2013-02-14 76 views
4

我有一个用户John.Smith,我想知道他有哪些数据库db_owner,以及他没有的数据库db_owner。有我可以运行的脚本吗?我们有很多数据库,当我查看用户映射时,我觉得我可能会过度寻找某些东西。在每个数据库上为用户列出db_owner权限

+0

您已经标记了sql server和mysql。每个人的答案都不相同。 – 2013-02-14 23:08:43

+0

嗨丹 - 我在SQL服务器2008 R2工作 - 正在寻找一个SQL将在2008 R2工作。谢谢! – thaibythai 2013-02-15 14:24:11

回答

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并保存在一个全局临时表中的结果收集所有数据库的信息。

+0

嗨,谢谢你的代码!这也会显示什么分贝John.Smith也不属于db_owner?当我运行代码时,我可以看到John.Smith属于db_owner的数据库,但它不告诉我他不属于哪个数据库 – thaibythai 2013-02-15 14:25:39