GRANT EXECUTE für alle gespeicherten Prozeduren


147

Gibt der folgende Befehl dem Benutzer "MyUser" effektiv die Berechtigung, ALLE in der Datenbank gespeicherten Prozeduren auszuführen?

GRANT EXECUTE TO [MyDomain\MyUser]

Antworten:


244

SQL Server 2008 und höher:

/* CREATE A NEW ROLE */
CREATE ROLE db_executor

/* GRANT EXECUTE TO THE ROLE */
GRANT EXECUTE TO db_executor

Für nur einen Benutzer (keine Rolle):

USE [DBName]
GO
GRANT EXECUTE TO [user]

28
+1 plus: Es gewährt sogar EXECUTE-Berechtigungen für zukünftige gespeicherte Prozeduren, z. B. solche, die noch nicht in Ihrer Datenbank enthalten sind - aber später erstellt werden.
marc_s

2
Ich denke, es ist erwähnenswert, dass Sie usermöglicherweise in eckigen Klammern stehen müssen. Dies traf in meinem Anwendungsfall zumindest teilweise zu, weil meinem Benutzer eine Domain angehängt war (dh ein \ -Zeichen darin war). Bearbeiten: Unescaped Slash Charakter
behoben

1
Warum nicht den Benutzer der Rolle db_ddladmin zuweisen? "Mitglieder der festen Datenbankrolle db_ddladmin können jeden DDL-Befehl (Data Definition Language) in einer Datenbank ausführen." - siehe hier
Michael Tobisch

1
@MichaelTobisch muss hier nur gespeicherte Prozeduren ausführen. Die DDL-Rolle muss in Szenarien zum Erstellen, Ändern, Löschen usw. verwendet werden. Diese Links müssen nützlich sein: docs.microsoft.com/en-us/sql/relational-databases/security/… und geeksforgeeks.org/sql-ddl-dml-dcl-tcl-commands
QMaster

2
Und die nächste Stufe des Hinzufügens eines Benutzers zu einer Rolle, falls dadurch jemand einen weiteren Forschungsschritt erspart. ALTER ROLE db_executor MITGLIED HINZUFÜGEN YourUserNameHere
Piwaf

72

In SQL Server 2005 wurde die Möglichkeit eingeführt , Datenbankausführungsberechtigungen für ein Datenbankprinzip zu erteilen , wie Sie beschrieben haben:

GRANT EXECUTE TO [MyDomain\MyUser]

Dadurch wird die Berechtigung für den Datenbankbereich erteilt, der implizit alle gespeicherten Prozeduren in allen Schemas enthält. Dies bedeutet, dass Sie keine Berechtigungen pro gespeicherter Prozedur explizit erteilen müssen.

Sie können auch einschränken, indem Sie Schemaausführungsberechtigungen erteilen, wenn Sie detaillierter arbeiten möchten:

GRANT EXECUTE ON SCHEMA ::dbo TO [MyDomain\MyUser]

5
Es ist großartig, dies für ein bestimmtes Schema tun zu können, um Berechtigungen für sys zu vermeiden
RemarkLima

17

Zusätzlich zu den obigen Antworten möchte ich hinzufügen:


Möglicherweise möchten Sie dies stattdessen einer Rolle zuweisen und die Rolle dann den Benutzern zuweisen. Angenommen, Sie haben eine Rolle myAppRightsüber erstellt

CREATE ROLE [myAppRights] 

dann können Sie Ausführungsrechte über geben

GRANT EXECUTE TO [myAppRights] 

zu dieser Rolle.


Oder wenn Sie dies auf Schemaebene tun möchten :

GRANT EXECUTE ON SCHEMA ::dbo TO [myAppRights]

funktioniert auch (in diesem Beispiel hat die Rolle anschließend myAppRightsAusführungsrechte für alle Elemente des Schemas dbo).

Auf diese Weise müssen Sie dies nur einmal tun und können einem Benutzer alle zugehörigen Anwendungsrechte einfach zuweisen / widerrufen, wenn Sie dies später ändern müssen - besonders nützlich, wenn Sie komplexere Zugriffsprofile erstellen möchten.

Hinweis: Wenn Sie einem Schema eine Rolle zuweisen, wirkt sich dies auch auf Elemente aus, die Sie später erstellt haben. Dies kann je nach beabsichtigtem Design von Vorteil sein oder auch nicht. Denken Sie also daran.


-5

GRANT EXECUTE TO [ROLLE]

Dieser hilft sicherlich


Sie möchten der öffentlichen Rolle keine Ausführung gewähren, da dies Sicherheitsbedenken aufwirft. Gewähren Sie es einfach dem Benutzer oder der Rolle. Das Gewähren der Ausführung für bestimmte Prozesse ist der beste Weg, damit Sie steuern können, wer was trifft.
ammills01

Der Sarkasmus ist hier nicht für eine Q & A-Site geeignet, insbesondere wenn er möglicherweise gefährliche Ergebnisse liefert.
Christopher Brown

"Jede Anmeldung gehört zur öffentlichen festen Serverrolle, und jeder Datenbankbenutzer gehört zur öffentlichen Datenbankrolle. Wenn einer Anmeldung oder einem Benutzer keine bestimmten Berechtigungen für eine sichere Datei erteilt oder verweigert wurden, erbt die Anmeldung oder der Benutzer die Berechtigungen, die der Öffentlichkeit für erteilt wurden that securable "Das Erteilen von Berechtigungen an PUBLIC bedeutet also das Erteilen dieser Berechtigungen an alle Benutzer. Dies ist eine große Sicherheitslücke. Lesen Sie diesen Link für weitere Informationen
QMaster

Bei solchen Antworten ist es kein Wunder, dass es so viele schlecht gesicherte Websites und Datenbanken gibt. Meine Güte Mann.
Dave Lucre
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.