【问题标题】:How to query databases to get user roles?如何查询数据库以获取用户角色?
【发布时间】:2014-09-23 16:08:28
【问题描述】:

我被分配了一项我没有知识或经验的任务。我正在开发一个 .NET 解决方案,我需要使用 SQL 来查询 sql 中的数据库实例。对于实例中的每个数据库,我需要检索用户列表以及他们所属的角色。提前谢谢!

我在下面找到了这个脚本,但它需要管理员权限。

有没有办法在没有管理员权限的情况下做到这一点?

DECLARE @DB_USers TABLE (
    DBName SYSNAME
    ,UserName SYSNAME
    ,AssociatedRole VARCHAR(max)
    )

INSERT @DB_USers
EXEC sp_MSforeachdb 'use [?]
SELECT '' ? '' AS DB_Name
    ,CASE prin.NAME
        WHEN '' dbo ''
            THEN prin.NAME + '' (
                    '' + (
                        SELECT SUSER_SNAME(owner_sid)
                        FROM master.sys.databases
                        WHERE NAME = '' ? ''
                        ) + ''
                    ) ''
        ELSE prin.NAME
        END AS UserName
    ,isnull(USER_NAME(mem.role_principal_id), '''') AS AssociatedRole
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id = mem.member_principal_id
WHERE prin.sid IS NOT NULL
    AND prin.sid NOT IN (0x00)
    AND prin.is_fixed_role <> 1
    AND prin.NAME NOT LIKE '' ## %'''

SELECT dbname
    ,username
    ,STUFF((
            SELECT ',' + CONVERT(VARCHAR(500), associatedrole)
            FROM @DB_USers user2
            WHERE user1.DBName = user2.DBName
                AND user1.UserName = user2.UserName
            FOR XML PATH('')
            ), 1, 1, '') AS Permissions_user
FROM @DB_USers user1
GROUP BY dbname
    ,username
ORDER BY DBName
    ,username

【问题讨论】:

    标签: sql-server roles ssms


    【解决方案1】:

    我想这就是你想要的。它列出了每个用户及其角色。

    SELECT users.name, roles.name
    FROM sys.database_role_members roleToUsers JOIN sys.database_principals roles
            ON roleToUsers.role_principal_id = roles.principal_id
    JOIN sys.database_principals users
        ON roleToUsers.member_principal_id = users.principal_id;
    

    这对你有用吗?

    【讨论】:

    • 这适用于实例中的每个服务器还是作为独立服务器?
    猜你喜欢
    • 1970-01-01
    • 2019-10-07
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-08-19
    • 2021-02-01
    • 1970-01-01
    • 2019-11-02
    相关资源
    最近更新 更多