Предоставить разрешение на выполнение для пользователя всех хранимых процедур в базе данных?
Я создал script из старой базы данных, создал новую базу данных и импортировал все данные из старой базы данных. Однако пока что так хорошо, что у пользователя нет прав на выполнение хранимых процедур. Я знаю, что могу использовать
GRANT EXECUTE ON [storedProcName] TO [userName]
Если бы у меня было всего несколько процедур, у меня было около 100, так что самый простой способ предоставить пользователю доступ к какому-либо конкретному пользователю для всех из них?
Спасибо заранее.
Ответы
Ответ 1
Создайте роль, добавьте эту роль пользователям, а затем вы сможете выполнить выполнение всех подпрограмм одним выстрелом в эту роль.
CREATE ROLE <abc>
GRANT EXECUTE TO <abc>
ИЗМЕНИТЬ
Это работает в SQL Server 2005, я не уверен в обратной совместимости этой функции, я уверен, что что-то позже 2005 года должно быть в порядке.
Ответ 2
Это решение, которое означает, что по мере добавления новых хранимых процедур в схему пользователи могут выполнять их без необходимости вызова выполнения разрешения в новой хранимой процедуре:
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
Ссылка: Предоставление разрешения на выполнение всех хранимых процедур
Ответ 3
используйте ниже код, измените правильное имя базы данных и имя пользователя, а затем выполните этот вывод и выполните в SSMS. Для SQL 2005 ВЫШЕ
USE <database_name>
select 'GRANT EXECUTE ON ['+name+'] TO [userName] '
from sys.objects
where type ='P'
and is_ms_shipped = 0
Ответ 4
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'[email protected]+';'
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