【问题标题】:How to determine the effective permissions for a user of a SQL Server database through C#?如何通过C#确定SQL Server数据库用户的有效权限?
【发布时间】:2012-09-29 03:03:38
【问题描述】:

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

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

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

但是,我仍然需要获取有效权限。在这个场景中,我为一个用户添加了一个登录名,并通过用户映射为数据库赋予了db_datareaderdb_datawriter 的角色。

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

谢谢。

【问题讨论】:

标签: c# sql-server sql-server-2008 sql-server-2008-r2 ssms


【解决方案1】:

相信你可以拨打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 选项相同的结果。

【讨论】:

  • 他的回答非常好,但对于您已迁移实例并在此过程中更改用户和登录名的情况。那么您就不能使用“以用户身份执行”技术,而必须使用其他方法。 user645280给出的答案在这种情况下很好。
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2016-05-05
    • 2014-12-11
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    • 2021-03-02
    • 2016-10-12
    • 2011-10-05
    相关资源
    最近更新 更多