SQL Server 对服务器登录进行脚本编写的权限(但不能更改它们)



我有一个脚本,试图重新创建数据库的一部分。 其中一部分是编写与该数据库一起使用的登录名的脚本。

我正在尝试找到一个"不能造成伤害"的许可级别来运行它。

基本上,它需要能够看到所有服务器登录名以编写脚本(当然密码除外(。 但它不需要有权在服务器上添加、更改或删除任何内容。 只是脚本。

我查看了服务器级别的角色和权限,但没有找到类似的东西。

SQL Server 是否具有服务器级别的登录只读权限?

SQL Server 是否具有服务器级别的登录只读权限?

是的,但它不适用于任何登录,它是在粒度级别上,对于每次登录: https://learn.microsoft.com/en-us/sql/t-sql/statements/grant-server-principal-permissions-transact-sql

USE master;  
GRANT VIEW DEFINITION ON LOGIN::EricKurjan TO RMeyyappan   
GO

缺点是您必须为每个登录名以及每次创建新登录名时授予视图定义。对于新登录名,您可以创建一个服务器 DDL 触发器,该触发器授予新创建的登录名的 VIEW DEFINITION 权限(或者更好地为此创建自定义服务器角色(

CREATE TRIGGER ddl_trig_for_create_login
ON ALL SERVER   
FOR CREATE_LOGIN  
AS
BEGIN   
declare @newlogin sysname = quotename(EVENTDATA().value('(/EVENT_INSTANCE/ObjectName)[1]','sysname'));
declare @sql nvarchar(200) = 'GRANT VIEW DEFINITION ON LOGIN::'+ @newlogin +' TO public'; --<-- public just for testing.. change public to a custom server role
exec(@sql);
END
GO 

另一种选择(未经测试,但逻辑上应该可以工作(是从证书或非对称密钥创建登录名,将证书/非对称登录名添加到 securityadmin 角色,然后使用 cert/asym 密钥对脚本(读取登录名的脚本(进行签名。

相关内容

最新更新