-- 已授與予權限的資料
SELECT l.name as [Grantee_Name],
p.state_desc AS [State_Desc],
p.permission_name AS [Permission_Name]
FROM sys.server_permissions AS p
JOIN sys.server_principals AS l
ON p.grantee_principal_id = l.principal_id
WHERE l.name NOT LIKE '##%' AND l.principal_id > 10
ORDER BY 1
GO
-- 角色及其成員資料
SELECT srm.role_principal_id AS [Role_Principal_ID],
sp.name AS [RoleName],
srm.member_principal_id AS [Member_Principal_ID],
member.name AS [MemberName]
FROM sys.server_role_members AS srm
JOIN sys.server_principals AS sp
ON srm.role_principal_id = sp.principal_id
JOIN sys.server_principals AS member
ON srm.member_principal_id = member.principal_id
ORDER BY 1
-- 所有資料庫角色資料
DECLARE @DBName varchar(20)
DECLARE @s1 varchar(max)
CREATE TABLE #DBRole(
DBName varchar(20), RoleName varchar(50), MemberName varchar(50) )
DECLARE dbrole CURSOR FOR SELECT name FROM [sys].[databases]
OPEN dbrole FETCH NEXT FROM dbrole INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @s1 =
'INSERT #DBRole '+
'SELECT '''+@DBName+''' AS [DBName],
role.name AS [RoleName], member.name AS [MemberName]
FROM '+@DBName+'.sys.database_role_members AS drm
JOIN '+@DBName+'.sys.database_principals AS role
ON drm.role_principal_id = role.principal_id
JOIN '+@DBName+'.sys.database_principals AS member
ON drm.member_principal_id = member.principal_id
WHERE member.name NOT IN ( ''dbo'' )'
EXEC (@s1)
FETCH NEXT FROM dbrole INTO @DBName
END
SELECT * FROM #DBRole --WHERE RoleName = 'db_owner'
DROP TABLE #DBRole
CLOSE dbrole
DEALLOCATE dbrole
-- 參考
-- M$ MSDN
沒有留言:
張貼留言