4

我有一个用户 John.Smith,我想知道他也有db_owner什么数据库以及他没有什么数据库db_owner。有我可以运行的脚本吗?我们有很多数据库,当我查看用户地图时,我觉得我可能看多了一些东西。

4

1 回答 1

2

你可以使用类似的东西:

CREATE TABLE ##DBOwners
(
    DBName SYSNAME,
    Username SYSNAME,
    Rolename NVARCHAR(50),
    IsOwner BIT
);

EXEC sp_MSforeachdb
    '
        USE [?];
        INSERT INTO ##DBOwners
            SELECT
                DB_NAME(),
                dp.name,
                dp2.name,
                CASE 
                    WHEN dp2.name = ''db_owner'' THEN 1
                    ELSE 0
                END AS ''db_owner''
            FROM
                sys.database_principals AS dp
            LEFT JOIN
                sys.database_role_members AS rm
                    ON
                        rm.member_principal_id = dp.principal_id
            LEFT JOIN
                sys.database_principals AS dp2
                    ON
                        rm.role_principal_id = dp2.principal_id
            WHERE
                dp.type <> ''R''
    '

SELECT * FROM ##DBOwners WHERE Username = 'John.Smith'
DROP TABLE ##DBOwners;

它通过使用存储过程 sp_MSforeachdb 收集有关所有数据库的信息并将结果保存在全局临时表中。

于 2013-02-14T23:20:24.020 回答