如何确定SQL Server数据库用户的有效权限?

问题描述 投票:0回答:2
当我说有效权限时,我指的是当您进入 SQL Server Management Studio 中的数据库属性,单击“权限”,然后单击“有效”选项卡时列出的权限。

到目前为止,我已经能够使用以下代码确定显式权限:

using Microsoft.SqlServer.Management.Smo; ... DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");
但是,我仍然需要获得有效的权限。在这种情况下,我为用户添加了登录名,并通过用户映射为其赋予了数据库的 

db_datareader

db_datawriter
 角色。

在数据库的权限中,列出的有效权限是

CONNECT, DELETE, INSERT, SELECT,

UPDATE
,但显式权限仅列出connect(这是上面代码唯一撤回的权限)。那么有没有一种方法可以以编程方式检索有效权限呢?

c# sql-server sql-server-2008 sql-server-2008-r2
2个回答
12
投票
我相信你可以打电话给

sys.fn_my_permissions

:

execute as user = 'SomeUserName' -- Set this to the user name you wish to check select * from fn_my_permissions(null, 'DATABASE') -- Leave these arguments, don't change to MyDatabaseName order by subentity_name, permission_name revert

这给了我与你提到的 SSMS 选项相同的结果。


4
投票
看起来

sys.database_principals

sys.database_permissions
 有一些关于这方面的好信息。此主题:
SQL Server 查询查找数据库中所有用户的所有权限/访问权限 进一步讨论了这一点。

注意:我假设 C# 调用数据库是可接受的解决方案。

© www.soinside.com 2019 - 2024. All rights reserved.