Antworten:
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]
user
mö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
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]
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 myAppRights
Ausfü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.
GRANT EXECUTE TO [ROLLE]
Dieser hilft sicherlich