当我说的有效权限,我指的是所列出的权限,当你进入在SQL Server Management Studio创建数据库的属性,点击“权限”,然后单击“有效”的标签。
到目前为止,我已经能够确定与下面的代码明确权限:
using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");
不过,我仍然需要得到有效的权限。 在这种情况下,我加入了一个用户登录并赋予它的作用db_datareader
和db_datawriter
通过用户映射数据库。
在数据库的权限,列出的有效权限是CONNECT, DELETE, INSERT, SELECT,
和UPDATE
,但明确权限只列出连接(这是上面的代码拉回唯一)。 那么,有没有一种方法以编程方式检索的有效权限呢?
谢谢。
我相信你可以打电话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选项。
貌似sys.database_principals
和sys.database_permissions
在他们这个一些不错的信息。 这个线程: SQL Server查询找到数据库中的所有用户的所有权限/访问进一步谈论它。
注:我假设C#调用到数据库是可以接受的解决方案。
文章来源: How to determine the effective permissions for a user of a SQL Server database through C#?