我有一个我正在继承的旧数据库。访问权限在任何地方都没有明确定义,我正在寻找一种快速的方法来为每个人获取它们。假设我的数据库中有一个不属于任何成员角色的用户。但是,他们已被授予对特定表执行特定操作的权限。例如,他们可以在表 X 上运行选择查询并在表 Y 上运行更新查询。我知道我可以通过访问每个用户的属性来找出他们拥有的内容。然而,我认为必须有一个系统表在某个地方定义了所有这些并使其易于查询。这个查询会是什么样子。
仅供引用:我正在使用 SQL Server 2005
更新:是否还有一种方法可以对服务器上的所有数据库执行此操作?
最佳答案
看看Security Catalog Views ,然后查看 MrDenny 的回答 here它给出了一个查询来列出用户的权限。我在这里复制它(根据我的喜好整理)。
SELECT [Schema] = sys.schemas.name
, [Object] = sys.objects.name
, username = sys.database_principals.name
, permissions_type = sys.database_permissions.type
, permission_name = sys.database_permissions.permission_name
, permission_state = sys.database_permissions.state
, state_desc = sys.database_permissions.state_desc
, permissionsql = state_desc + ' ' + permission_name
+ ' on ['+ sys.schemas.name + '].[' + sys.objects.name
+ '] to [' + sys.database_principals.name + ']'
COLLATE LATIN1_General_CI_AS
FROM sys.database_permissions
INNER JOIN sys.objects ON sys.database_permissions.major_id = sys.objects.object_id
INNER JOIN sys.schemas ON sys.objects.schema_id = sys.schemas.schema_id
INNER JOIN sys.database_principals ON sys.database_permissions.grantee_principal_id = sys.database_principals.principal_id
ORDER BY 1, 2, 3, 5
关于sql-server - 如何查询特定用户访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1928571/