当我说有效权限时,我指的是当您进入SQL Server Management Studio中的数据库属性时列出的权限,单击“权限”,然后单击“有效”选项卡。
到目前为止,我已经能够使用以下代码确定显式权限:
using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");
但是,我仍然需要获得有效权限。在这种情况下,我为用户添加了一个登录名,并通过用户映射为数据库赋予了db_datareader
和db_datawriter
的角色。
在数据库的权限中,列出的有效权限为CONNECT, DELETE, INSERT, SELECT,
和UPDATE
,但显式权限仅列出连接(这是上述代码唯一回退的内容)。那么还有一种以编程方式检索有效权限的方法吗?
感谢。
答案 0 :(得分:7)
我相信你可以致电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选项相同的结果。
答案 1 :(得分:3)
看起来sys.database_principals
和sys.database_permissions
有一些很好的信息。这个帖子:SQL Server query to find all permissions/access for all users in a database进一步讨论它。
注意:我假设C#调用DB是可接受的解决方案。