我们正在创建一个工具,用于映射所有SQL服务器的每个数据库的所有登录,用户和角色。我们希望定期执行此操作并比较结果以深入了解更改。
最初我们从exec sp_MSloginmappings
开始,但是我们需要一个具有sysadmin角色的用户。
然后我们查询了sys.database_principles
。但除非我们授予ALTER ANY USER
和ALTER ANY ROLE
权限,否则我们只能看到自己的用户。
任何用户都可以看到自己的用户名,系统用户和固定数据库角色。要查看其他用户,需要ALTER ANY USER或用户权限。要查看用户定义的角色,需要ALTER ANY ROLE或角色成员资格。
我们认为ALTER ANY USER / ROLE
权限对于我们的用例而言过于宽泛。
我们考虑的最后一个选项是创建一个存储过程,使用sys.database_principles
将dbo
作为WITH EXECUTE AS
进行查询。这可以工作,但要求存储过程存在于每个数据库中。考虑到用例,这也不理想。
实现这一目标的好方法是什么?
谢谢大家!!