我负责一些测试数据库服务器。从历史上看,有太多其他人可以接触到他们。它们在SQL Server 2005上运行。我一直在编写查询并将其包装在脚本中,以便我可以对权限进行定期审核。找出哪些用户具有服务器本身的管理员权限就很好了,就像找出谁在其登录名上具有'sysadmin'角色一样-只需对后者进行单行查询即可。
但是,如何找出哪些登录将用户映射到特定(或任何)数据库?我可以找到sys.database_principals和sys.server_principals表。我找到了sys.databases表。我还没有弄清楚如何找出哪些用户对数据库具有权限,如果是,则如何。每次Google搜索都使用“登录”对话框的“用户映射”窗格来手动调动人员,而不是使用查询来调动人员。有任何想法吗?
问题来源于stack overflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
这是这样做的方法。我最终在MSDN文档中找到对存储过程的引用。我从存储过程中提取了此信息,并将其包装到实例已知的所有数据库的循环中。
select DbRole = g.name, MemberName = u.name from @NAME.sys.database_principals u, @NAME.sys.database_principals g, @NAME.sys.database_role_members m where g.principal_id = m.role_principal_id and u.principal_id = m.member_principal_id and g.name in (''db_ddladmin'', ''db_owner'', ''db_securityadmin'') and u.name not in (''dbo'') order by 1, 2
然后,这将报告具有DBO的用户,而这些用户可能不应该这样做。我已经撤消了某些不需要的用户的管理员访问权限。感谢大家!