我有一个用户John.Smith,我想知道他有什么数据库db_owner
以及他没有db_owner
的数据库。我可以运行一个脚本吗?我们有很多数据库,当我查看用户地图时,我觉得我可能会在寻找一些东西。
答案 0 :(得分: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收集有关所有数据库的信息,并将结果保存在全局临时表中。