Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过C#确定SQL Server数据库用户的有效权限?_C#_Sql Server_Sql Server 2008_Sql Server 2008 R2_Ssms - Fatal编程技术网

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

如何通过C#确定SQL Server数据库用户的有效权限?,c#,sql-server,sql-server-2008,sql-server-2008-r2,ssms,C#,Sql Server,Sql Server 2008,Sql Server 2008 R2,Ssms,当我说有效权限时,我指的是在SQLServerManagementStudio中进入数据库属性时列出的权限,单击“权限”,然后单击“有效”选项卡 到目前为止,我已经能够使用以下代码确定显式权限: using Microsoft.SqlServer.Management.Smo; ... DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username"); 但是,我仍然需要获得有效的权限。在这个场

当我说有效权限时,我指的是在SQLServerManagementStudio中进入数据库属性时列出的权限,单击“权限”,然后单击“有效”选项卡

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

using Microsoft.SqlServer.Management.Smo;
...
DatabasePermissionInfo[] permissions = database.EnumDatabasePermissions("username");
但是,我仍然需要获得有效的权限。在这个场景中,我为一个用户添加了一个登录名,并通过用户映射为数据库赋予它
db\u datareader
db\u datawriter
的角色

在数据库的权限中,列出的有效权限是
CONNECT、DELETE、INSERT、SELECT、
UPDATE
,但只有显式权限列表CONNECT(这是上面代码收回的唯一内容)。那么,有没有一种方法可以通过编程方式检索有效的权限呢


谢谢。

看起来像是
sys.database\u principals
sys.database\u permissions
中有一些关于这方面的好信息。这条线索:进一步讨论它

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

我相信你可以打电话:


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

试试这个stackoverflow。以前的帖子应该会有帮助。他的答案非常好,但是对于迁移实例并在过程中更改用户和登录名的情况来说。那么您就不能使用“以用户身份执行”技术,而必须使用其他方法。在这种情况下,user645280给出的答案非常好。
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