Frage Erteilen Sie die Berechtigung für einen Benutzer für alle gespeicherten Prozeduren in der Datenbank?


Ich habe ein Skript aus der alten Datenbank erstellt, eine neue Datenbank erstellt und alle Daten aus der alten Datenbank importiert. So weit, so gut, jedoch hat kein Benutzer Ausführungsrechte für gespeicherte Prozeduren. Ich weiß, dass ich es gebrauchen kann

GRANT EXECUTE ON [storedProcName] TO [userName] 

Wenn es nur ein paar Prozeduren waren, habe ich jedoch ungefähr 100. Was ist der einfachste Weg für mich, allen Benutzern den Ausführungszugriff für einen bestimmten Benutzer zu gewähren?

Danke im Voraus.


75
2018-03-25 04:01


Ursprung


Antworten:


Erstellen Sie eine Rolle, und fügen Sie diese Rolle den Benutzern hinzu. Anschließend können Sie allen Routinen auf einmal diese Rolle ausführen.

CREATE ROLE <abc>
GRANT EXECUTE TO <abc>

BEARBEITEN
Dies funktioniert in SQL Server 2005, ich bin mir nicht sicher über die Abwärtskompatibilität dieser Funktion, ich bin mir sicher, dass etwas später als 2005 in Ordnung sein sollte.


89
2018-03-25 04:06



Dies ist eine Lösung, die bedeutet, dass Benutzer beim Hinzufügen neuer gespeicherter Prozeduren zu dem Schema sie ausführen können, ohne grant execute für die neue gespeicherte Prozedur aufrufen zu müssen:

IF  EXISTS (SELECT * FROM sys.database_principals WHERE name = N'asp_net')
DROP USER asp_net
GO

IF  EXISTS (SELECT * FROM sys.database_principals 
WHERE name = N'db_execproc' AND type = 'R')
DROP ROLE [db_execproc]
GO

--Create a database role....
CREATE ROLE [db_execproc] AUTHORIZATION [dbo]
GO

--...with EXECUTE permission at the schema level...
GRANT EXECUTE ON SCHEMA::dbo TO db_execproc;
GO

--http://www.patrickkeisler.com/2012/10/grant-execute-permission-on-all-stored.html
--Any stored procedures that are created in the dbo schema can be 
--executed by users who are members of the db_execproc database role

--...add a user e.g. for the NETWORK SERVICE login that asp.net uses
CREATE USER asp_net 
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE] 
WITH DEFAULT_SCHEMA=[dbo]
GO

--...and add them to the roles you need
EXEC sp_addrolemember N'db_execproc', 'asp_net';
EXEC sp_addrolemember N'db_datareader', 'asp_net';
EXEC sp_addrolemember N'db_datawriter', 'asp_net';
GO

Referenz: Erteilen Sie die Berechtigung für alle gespeicherten Prozeduren


14
2017-10-01 14:45



Verwenden Sie den folgenden Code, ändern Sie den richtigen Datenbanknamen und Benutzernamen und nehmen Sie dann diese Ausgabe und führen Sie sie in SSMS aus. FÜR SQL 2005 OBEN

USE <database_name> 
select 'GRANT EXECUTE ON ['+name+'] TO [userName]  '  
from sys.objects  
where type ='P' 
and is_ms_shipped = 0  

5
2018-03-20 16:36



Ohne das Problem zu komplizieren, um die EXECUTE auf der ausgewählten Datenbank zu gewähren:

USE [DB]
GRANT EXEC TO [User_Name];

2
2018-01-02 13:33



USE [DATABASE]

DECLARE @USERNAME VARCHAR(500)

DECLARE @STRSQL NVARCHAR(MAX)

SET @USERNAME='[USERNAME] '
SET @STRSQL=''

select @STRSQL+=CHAR(13)+'GRANT EXECUTE ON ['+ s.name+'].['+obj.name+'] TO'+@USERNAME+';'
from
    sys.all_objects as obj
inner join
    sys.schemas s ON obj.schema_id = s.schema_id
where obj.type in ('P','V','FK')
AND s.NAME NOT IN ('SYS','INFORMATION_SCHEMA')


EXEC SP_EXECUTESQL @STRSQL

1
2017-08-21 10:55