SQL Server 事务处理为所有数据库的所有表提供权限/权限

SQL Server transact give permisions/privileges to all tables for all databases

提问人:Sergio 提问时间:11/13/2023 最后编辑:jarlhSergio 更新时间:11/13/2023 访问量:61

问:

我正在尝试将所有数据库的权限授予用户,但我没有找到。

我只知道如何为一个数据库做到这一点:

use bd_flights
grant select on schema::dbo to USER1 WITH GRANT OPTION

有没有办法为您拥有的所有数据库执行此操作?

谢谢你,

我尝试过,但这仅适用于我所在的活动数据库。grant select on schema::dbo to USER1 WITH GRANT OPTION

sql-server 数据库 t-sql 架构

评论

0赞 Mitch Wheat 11/13/2023
sp_MSforeachdb....
1赞 Zohar Peled 11/13/2023
注意:授予 USER1 对 dbo 架构的选择权限,而不是对整个数据库的选择权限。一个数据库可能包含多个架构。此外,跨站点复制grant select on schema::dbo to USER1
1赞 Ben Thul 11/13/2023
如果您确实希望他们能够在实例上的任何数据库中进行选择,则 和 服务器级权限的某种组合将执行此操作。100% 确定您希望他们不仅在当前现有数据库中拥有这些权限,而且在实例上的任何未来数据库中都拥有这些权限!connect any databaseview any database

答:

-1赞 AztecCodes 11/13/2023 #1

示例实现:

DECLARE @DbName nvarchar(100)
DECLARE @Command nvarchar(max)

DECLARE db_cursor CURSOR FOR  
SELECT name 
FROM master.dbo.sysdatabases 
WHERE name NOT IN ('master', 'tempdb', 'model', 'msdb')
OPEN db_cursor   
FETCH NEXT FROM db_cursor INTO @DbName   

WHILE @@FETCH_STATUS = 0   
BEGIN   
       SET @Command = 'USE [' + @DbName + ']; GRANT SELECT ON SCHEMA::dbo TO USER1 WITH GRANT OPTION;' 
       EXEC sp_executesql @Command

       FETCH NEXT FROM db_cursor INTO @DbName   
END   

CLOSE db_cursor   
DEALLOCATE db_cursor