9

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

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

using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");

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

在数据库的权限中,列出的有效权限是CONNECT, DELETE, INSERT, SELECT,and UPDATE,但显式权限仅列出 connect (这是上面代码唯一拉回的东西)。那么有没有办法以编程方式检索有效权限呢?

谢谢。

4

2 回答 2

11

我相信您可以致电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 选项相同的结果。

于 2012-10-08T20:37:17.083 回答
4

看起来sys.database_principalssys.database_permissions在其中有一些很好的信息。该线程:SQL Server query to find all permissions/access for all users in a database进一步讨论了它。

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

于 2012-10-08T20:34:35.377 回答