Normalerweise verwende ich beim Erstellen einer gespeicherten Prozedur Folgendes als Vorlage für die Sortierung

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end 

Gibt es eine Möglichkeit, die Erteilung einer Ausführungsberechtigung nur für diese gespeicherte Prozedur einzuschließen, während ich gerade dabei bin?
Zum Beispiel wie …

Grant execute [User_Execute] 

… aber nur für diese gespeicherte Prozedur?

Ich habe einige andere ähnliche Fragen gesehen, aber sie scheinen sich alle auf ALLE gespeicherten Prozeduren zu beziehen und nicht nur auf eine, noch habe ich eine wo gesehen Sie können Berechtigungen im Skript create procedure angeben. Sogar Antworten darüber, wie ich Berechtigungen ohne die GUI für bestimmte gespeicherte Prozeduren festlegen kann, wären willkommen.

Bearbeiten Die Top-Antwort hat mich sicherlich in die richtige Richtung gelenkt, das ist im Wesentlichen was Ich habe gesucht, ich habe nicht daran gedacht, die Befehle zu stapeln, was ich letztendlich getan habe, und den Befehl zusammen mit meiner gespeicherten Prozedur zu stapeln. Wie auch immer, ich denke, es ist ziemlich schlau.

Create procedure <procedurename> <@param1 <type>, @param2 <type>, etc..> as begin <procedure> end GO GRANT EXECUTE ON <procedurename> to <username> GO 

Kommentare

  • Der im bearbeiteten Text angegebene Code ist gültig und die richtige Antwort auf diese Frage.

Antwort

GRANT EXECUTE ON dbo.procname TO username; 

Antwort

Tabelle abschneiden Das Festlegen von Berechtigungen für Objekte wie gespeicherte Prozeduren kann wie folgt erfolgen:

GRANT EXECUTE ON <schema>.<object> to <user>; 

Möglicherweise möchten Sie jedoch auch Sicherheitsrechte unter erteilen sowohl die Anmelde- als auch die Benutzerebene. Sie möchten NUR die erforderlichen Rechte für die Objekte festlegen und gewähren, für die Zugriff erforderlich ist (z. B. Ausführung). Erwägen Sie die Verwendung der Funktion EXECUTE AS, mit der sich ein anderer Benutzer imitieren kann, um Berechtigungen zu überprüfen, die zum Ausführen des Codes erforderlich sind, ohne alle erforderlichen Rechte für alle zugrunde liegenden Objekte zu erteilen (z Tabellen). EXECUTE AS kann zu gespeicherten Prozeduren, Funktionen, Triggern usw. hinzugefügt werden.

Fügen Sie den Code wie folgt direkt in der gespeicherten Prozedur hinzu:

CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER 

In diesem Fall geben Sie sich als Eigentümer des aufgerufenen Moduls aus. Sie können sich auch als SELBST ODER als Benutzer ausgeben, der das Modul erstellt oder ändert ODER … CALLER imperonieren, wodurch das Modul die Berechtigungen des aktuellen Benutzers übernehmen kann, ODER als EIGENTÜMER, der die Berechtigung des Moduls übernimmt Der Eigentümer der Prozedur, die als OR bezeichnet wird, gibt sich als „Benutzername“ aus, der sich als ein bestimmter Benutzer ausgibt, oder … als „Anmeldename“, um sich als ein bestimmtes Login auszugeben.

Meistens werden Sie dies tun Sie müssen nur EXECUTE Rechte für gespeicherte Prozesse erteilen, und dann werden Rechte für alle Objekte gewährt, auf die im gespeicherten Prozess verwiesen wird.

Auf diese Weise müssen Sie dies NICHT tun Geben Sie implizite Rechte (Beispiel: Aktualisieren von Daten oder Aufrufen zusätzlicher Prozesse). Die Verkettung der Eigentümer übernimmt dies für Sie. Dies ist besonders hilfreich für dynamisches SQL oder wenn Sie Aufgaben mit erhöhter Sicherheit erstellen müssen, z. B. CREATE TABLE. EXECUTE AS ist ein nützliches Tool, das Sie in Betracht ziehen sollten.

Dieses Beispiel kann Ihnen dabei helfen, all dies zu verdeutlichen:

Erstellen Sie einen Benutzer namens NoPrivUser mit Öffentlicher Zugriff auf eine Datenbank (z. B. dbadb):

USE [master]; GO CREATE LOGIN [NoPrivUser] WITH PASSWORD=N"ABC5%", DEFAULT_DATABASE=[dbadb], CHECK_EXPIRATION=ON, CHECK_POLICY=ON; GO USE [DBAdb]; GO CREATE USER [NoPrivUser] FOR LOGIN [NoPrivUser]; GO 

HINWEIS: ERSTELLER ODER EIGENTÜMER DIESES VERFAHRENS ERFORDERN DIE ERSTELLUNG VON TABELLENRECHTEN in der Zieldatenbank.

use DBAdb go CREATE PROCEDURE dbo.MyProcedure WITH EXECUTE AS OWNER truncate table MyTable GO GRANT EXEC ON dbo.MyProcedure TO NoPrivUser; GO -- Now log into your database server as NoPrivUser and run the following. 

Mit der Klausel EXECUTE AS wird die gespeicherte Prozedur im Kontext des Objektbesitzers ausgeführt. Dieser Code erstellt erfolgreich dbo.MyTable und Zeilen werden erfolgreich eingefügt. In diesem Beispiel hat der Benutzer NoPrivUser absolut keine Berechtigungen zum Ändern der Tabelle oder zum Lesen oder Ändern von Daten in dieser Tabelle.

Es dauert nur

Diese Methode zum Erstellen gespeicherter Prozeduren, mit denen Aufgaben ausgeführt werden können, für die erhöhte Sicherheitsrechte erforderlich sind, ohne diese Rechte dauerhaft zuzuweisen, ist sehr nützlich.

Kommentare

Antwort

Geben Sie hier die Bildbeschreibung ein.

Datenbank-Login auswählen -> Gehen Sie zu Securable und klicken Sie wie im vorherigen Bild auf die Schaltfläche Suchen. Wenn Sie auf die Schaltfläche „Suchen“ klicken, wird das folgende Fenster angezeigt, in dem Sie den Objekttyp hinzufügen können.

Klicken Sie auf die Schaltfläche „Objekttypen“, um das Fenster „Objekttypen auswählen“ mit verschiedenen Objekten anzuzeigen. Wenn Sie nun sehen, wird die gespeicherte Prozedur im Bereich Objekttypen aufgelistet. Jetzt wählen wir unsere spezifische gespeicherte Prozedur aus, für die wir die Berechtigung erteilen möchten.

Kommentare

  • Erstens war die Frage über fünf Jahre alt, als Sie sie beantworteten. Das wäre in Ordnung, außer dass das OP speziell nach Lösungen gefragt hat, die ' die GUI nicht verwenden und in ein Skript eingebettet werden können. Ihre Antwort geht darauf nicht ein.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.