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

ath*_*hom 7 c# sql-server ssms sql-server-2008 sql-server-2008-r2

当我说有效权限时,我指的是当您进入SQL Server Management Studio中的数据库属性时列出的权限,单击"权限",然后单击"有效"选项卡.

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

using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");
Run Code Online (Sandbox Code Playgroud)

但是,我仍然需要获得有效的权限.在这种情况下,我为用户添加了一个登录名,db_datareaderdb_datawriter通过用户映射为其提供了数据库的角色.

在数据库的权限中,列出的有效权限是CONNECT, DELETE, INSERT, SELECT,UPDATE,但仅显式权限列表连接(这是上述代码唯一回退的内容).那么还有一种以编程方式检索有效权限的方法吗?

谢谢.

Tim*_*ner 9

我相信你可以打电话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
Run Code Online (Sandbox Code Playgroud)

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