Przyznać użytkownikowi uprawnienia do wykonywania wszystkich procedur przechowywanych w bazie danych?
Wygenerowałem skrypt ze starej bazy danych, utworzyłem nową bazę danych i zaimportowałem wszystkie dane ze starej bazy danych. Na razie jednak żaden użytkownik nie ma uprawnień do wykonywania procedur przechowywanych. I know I can use
GRANT EXECUTE ON [storedProcName] TO [userName]
Jeśli to było tylko kilka procedur, to mam około 100, więc jaki jest najprostszy sposób, aby przyznać dostęp do execute dla konkretnego użytkownika do wszystkich z nich?
Z góry dzięki.5 answers
Utwórz rolę dodaj tę rolę do użytkowników, a następnie możesz nadać wykonanie wszystkim procedurom w jednym ujęciu do tej roli.
CREATE ROLE <abc>
GRANT EXECUTE TO <abc>
EDIT
To działa w SQL Server 2005, nie jestem pewien co do wstecznej kompatybilności tej funkcji, jestem pewien, że wszystko później niż 2005 powinno być w porządku.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-03-25 04:06:14
Jest to rozwiązanie, które oznacza, że po dodaniu nowych procedur składowanych do schematu, użytkownicy mogą je wykonywać bez konieczności wywoływania grant execute na nowej procedurze składowanej:
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
Referencja: przyznawanie uprawnień do wykonania dla wszystkich procedur przechowywanych
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-09-14 07:52:37
Użyj poniższego kodu, Zmień właściwą nazwę bazy danych i nazwę Użytkownika, a następnie weź to wyjście i wykonaj w SSMS. DLA SQL 2005 POWYŻEJ
USE <database_name>
select 'GRANT EXECUTE ON ['+name+'] TO [userName] '
from sys.objects
where type ='P'
and is_ms_shipped = 0
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-02-12 19:25:33
Bez nadmiernej komplikacji problemu, aby nadać wykonanie na wybranej bazie danych:
USE [DB]
GRANT EXEC TO [User_Name];
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-01-02 13:33:56
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
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-10-17 11:01:05