如何通过C#确定SQL Server数据库用户的有效权限?
当我说有效权限时,我指的是在SQLServerManagementStudio中进入数据库属性时列出的权限,单击“权限”,然后单击“有效”选项卡 到目前为止,我已经能够使用以下代码确定显式权限:如何通过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"); 但是,我仍然需要获得有效的权限。在这个场
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