2014-01-06 44 views
2

如何獲取每個用戶及其在服務器上每個數據庫中的角色?每個用戶及其在服務器上每個數據庫中的角色

我想我會用這個啓動:

SELECT * 
FROM sys.database_role_members drm 
INNER JOIN sys.database_principals rp ON drm.role_principal_id = rp.principal_id 
INNER JOIN sys.database_principals mp ON drm.member_principal_id = mp.principal_id 

回答

1

我想我想通了:

DECLARE @table TABLE (
    SERVER VARCHAR(100), 
    db_name VARCHAR(100), 
    db_role VARCHAR(100), 
    db_user VARCHAR(100) 
    ) 

INSERT INTO @table 
EXEC sp_msforeachdb ' 
    USE [?]; 

    SELECT @@SERVERNAME SERVER, 
     ''?'' db, 
     rp.NAME AS database_role, 
     mp.NAME AS database_user 
    FROM sys.database_role_members drm 
    INNER JOIN sys.database_principals rp ON drm.role_principal_id = rp.principal_id 
    INNER JOIN sys.database_principals mp ON drm.member_principal_id = mp.principal_id 
    ORDER BY 3 
' 


SELECT SERVER, 
    db_role, 
    db_user, 
    db_name 
FROM @table 
WHERE db_name NOT IN (
     'master', 
     'tempdb', 
     'model', 
     'msdb', 
     'DBA_UTIL' 
     ) 
ORDER BY 4 DESC, 
    2 
+3

[只是爲了解釋爲什麼這是越來越向下投(HTTP:// www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/)。 「Noobs」不會意識到,這種無證的,不受支持的存儲過程可以跳過數據庫而無需任何指示。 –

+2

'sp_msforeachdb'不好。你爲什麼會問? [Link#1](http://sqlblog.com/blogs/aaron_bertrand/archive/2010/02/08/bad-habits-to-kick-relying-on-undocumented-behavior.aspx),[Link#2] (http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/29/a-more-reliable-and-more-flexible-sp-msforeachdb.aspx),[Link#3](http:// www.mssqltips.com/sqlservertip/2201/making-a-more-reliable-and-flexible-spmsforeachdb/)。他們寫的是一些人名叫Aaron Bertrand。我聽說他駕駛奔馳。 – Kermit

+0

這就是爲什麼我討厭你們。而且你對SP完全正確,我知道/知道每次使用它。 – SQLMason

相關問題