Normalerweise verwende ich beim Erstellen einer gespeicherten Prozedur Folgendes als eine Art Vorlage
Create procedure <procedurename>
<@param1 <type>, @param2 <type>, etc..>
as begin
<procedure>
end
Gibt es eine Möglichkeit, die Erteilung von Ausführungsberechtigungen nur für diese gespeicherte Prozedur einzuschließen, wenn ich gerade dabei bin?
Zum Beispiel wie ...
Grant execute [User_Execute]
... aber nur für diese gespeicherte Prozedur?
Ich habe einige ähnliche Fragen gesehen, aber anscheinend beziehen sich alle auf ALLE gespeicherten Prozeduren und nicht nur auf eine. Ich habe auch keine gesehen, bei der Sie Berechtigungen innerhalb des create procedure
Skripts angeben können . Selbst 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 auf jeden Fall in die richtige Richtung geführt. Dies ist im Wesentlichen das, wonach ich gesucht habe. Ich habe nicht darüber nachgedacht, die Befehle 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
quelle
Antworten:
quelle
Tabelle abschneiden Das Festlegen von Berechtigungen für Objekte wie gespeicherte Prozeduren kann folgendermaßen erfolgen:
Möglicherweise möchten Sie jedoch auch Sicherheitsrechte sowohl auf Anmelde- als auch auf Benutzerebene erteilen. Sie möchten NUR die erforderlichen Rechte für die Objekte festlegen und gewähren, die Zugriff benötigen (z. B. Ausführung). Erwägen Sie die Verwendung der
EXECUTE AS
Funktion, die das Identitätswechsel eines anderen Benutzers ermöglicht, um Berechtigungen zu validieren, die zum Ausführen des Codes erforderlich sind, ohne alle erforderlichen Rechte für alle zugrunde liegenden Objekte (z. B. Tabellen) erteilen zu müssen.EXECUTE AS
kann zu gespeicherten Prozeduren, Funktionen, Triggern usw. hinzugefügt werdenFügen Sie den Code wie folgt direkt in der gespeicherten Prozedur hinzu:
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 ... imperonate CALLER, wodurch das Modul die Berechtigungen des aktuellen Benutzers übernehmen kann Der Eigentümer der Prozedur mit dem Namen OR ... gibt sich als 'Benutzername' aus, wodurch sich ein bestimmter Benutzer als OR ... gibt sich als 'Anmeldename' mit einem bestimmten Anmeldenamen aus.
In den
EXECUTE
meisten Fällen müssen Sie nur Rechte für gespeicherte Prozesse erteilen, und dann werden Rechte für alle Objekte erteilt, auf die im gespeicherten Prozess verwiesen wird.Auf diese Weise müssen Sie KEINE impliziten Rechte vergeben (Beispiel: Daten aktualisieren oder zusätzliche Prozesse aufrufen). Ownership Chaining ü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
CREATE TABLE
.EXECUTE AS
ist ein nützliches Werkzeug, um dies zu berücksichtigen.Dieses Beispiel kann all dies verdeutlichen:
Erstellen Sie einen Benutzer namens NoPrivUser mit öffentlichem Zugriff auf eine Datenbank (z. B. dbadb):
HINWEIS: ERSTELLER ODER BESITZER DIESES VERFAHRENS ERFORDERN TABELLENRECHTE ERSTELLEN in der Zieldatenbank.
Mit der
EXECUTE AS
Klausel wird die gespeicherte Prozedur im Kontext des Objektbesitzers ausgeführt. Dieser Code wird erfolgreich erstelltdbo.MyTable
und Zeilen werden erfolgreich eingefügt. In diesem Beispiel hat der BenutzerNoPrivUser
absolut keine Berechtigung, die Tabelle zu ändern oder Daten in dieser Tabelle zu lesen oder zu ändern.Es werden nur die Rechte übernommen, die zum Ausführen dieser bestimmten Aufgabe erforderlich sind, die im Rahmen dieses Verfahrens codiert wurde.
Diese Methode zum Erstellen gespeicherter Prozeduren, die Aufgaben ausführen können, für die erhöhte Sicherheitsrechte erforderlich sind, ohne diese Rechte dauerhaft zuzuweisen, ist sehr nützlich.
quelle
Datenbank-Login auswählen -> Gehen Sie zu Securable und klicken Sie auf die Schaltfläche Suchen wie im vorherigen Bild. 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 und Sie erhalten das Fenster "Objekttypen auswählen" mit verschiedenen Objekten. 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.
quelle