数据库中特定用户的权限是什么?

时间:2014-10-16 10:27:00

标签: sql-server sql-server-2008 sql-server-2005 sql-server-2008-r2 sql-server-2012

如何查找我的数据库用户所属的AD组? 我需要找出特定用户在数据库中拥有的所有权限。

the users groups and roles in my database

2 个答案:

答案 0 :(得分:1)

使用 sys.fn_my_permissions

SELECT * FROM fn_my_permissions (NULL, 'DATABASE');

返回调用者的有效权限列表。

SELECT * FROM fn_my_permissions('ATLY', 'USER');

返回名为“ATLY”的用户的有效权限列表。

答案 1 :(得分:1)

如果要查找给定用户的所有权限路径,请使用sys.login_token和sys.user_token。

sys.login_token将为您提供当前服务器主体所属的所有AD组,也将其定义为登录。例如,如果AD用户[domain \ user]是[domain \ group1]和[domain \ group2]的成员,并且只将group1定义为登录,则只有group1将显示在列表中。 sys.login_token还将列出登录所属的任何服务器级角色。

sys.user_token是相同的,除了一切都是数据库作用域。

由于两个视图都在“当前用户”的上下文中运行,因此您需要冒充其他人来查找其权限。语法很简单:

execute as login = 'domain\user';
select * from sys.login_token;
select * from sys.user_token;
revert;

要获取已明确授予用户的任何权限,请查看sys.database_permissions和sys.server_permissions。

select * from sys.database_permissions
where grantee_principal_id = user_id();

select * from sys.server_permissions
where grantee_principal_id = suser_id();

最后,如果您不想尝试计算可以从各种路径中获取的所有权限,请查看sys.fn_my_permissions。基本语法是:

select * from sys.fn_my_permissions('dbo.table', 'object');