2014-02-27 66 views
0

我正在尋找一個DMV,它返回每個數據庫的用戶列表。我創建了一個名爲「elad」的新登錄名,我可以在DMV sys.login下找到。DMV返回每個數據庫的用戶列表

我現在已經在數據庫上創建了一個用戶名「moshe」 - 在哪個表中我可以找到db用戶的詳細信息?

回答

0

我不知道DMV,但這是我用了一段時間。我應該引用來源,但我真的不記得我得到它的地方,對不起。

WITH perms_cte as 
(
     select USER_NAME(p.grantee_principal_id) AS principal_name, 
       dp.principal_id, 
       dp.type_desc AS principal_type_desc, 
       p.class_desc, 
       OBJECT_NAME(p.major_id) AS object_name, 
       p.permission_name, 
       p.state_desc AS permission_state_desc 
     from sys.database_permissions p 
     inner JOIN sys.database_principals dp 
     on  p.grantee_principal_id = dp.principal_id 
) 
--users 
SELECT p.principal_name, p.principal_type_desc, p.class_desc, p.[object_name], p.permission_name, p.permission_state_desc, cast(NULL as sysname) as role_name 
FROM perms_cte p 
WHERE principal_type_desc <> 'DATABASE_ROLE' 
UNION 
--role members 
SELECT rm.member_principal_name, rm.principal_type_desc, p.class_desc, p.object_name, p.permission_name, p.permission_state_desc,rm.role_name 
FROM perms_cte p 
right outer JOIN (
    select role_principal_id, dp.type_desc as principal_type_desc, member_principal_id,user_name(member_principal_id) as member_principal_name,user_name(role_principal_id) as role_name--,* 
    from sys.database_role_members rm 
    INNER JOIN sys.database_principals dp 
    ON  rm.member_principal_id = dp.principal_id 
) rm 
ON  rm.role_principal_id = p.principal_id 
order by 1