为数据库中所有存储过程的用户授予执行权限?
我从旧数据库生成脚本,创build一个新的数据库,并从旧数据库导入所有数据。 但是迄今为止,没有用户拥有执行存储过程的权限。 我知道我可以使用
GRANT EXECUTE ON [storedProcName] TO [userName]
但是,如果只是几个程序,我就有大约100个,那么对于特定的用户来说,最简单的方法是给予他们全部的执行权限。
提前致谢。
创build一个angular色,将这个angular色添加到用户,然后您可以将执行一次性授予所有例程。
CREATE ROLE <abc> GRANT EXECUTE TO <abc>
编辑
这在SQL Server 2005中起作用,我不确定这个function的向后兼容性,我相信比2005年晚的任何事情都可以。
这是一个解决scheme,意味着当您向模式添加新的存储过程时,用户可以执行它们而无需在新存储过程中调用grant执行:
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 eg 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
参考: 授予所有存储过程的执行权限
使用下面的代码,更改正确的数据库名称和用户名,然后将其输出并在SSMS中执行。 FOR SQL 2005以上
USE <database_name> select 'GRANT EXECUTE ON ['+name+'] TO [userName] ' from sys.objects where type ='P' and is_ms_shipped = 0
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