Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
| Author |
Topic |
|
tanksoldier
Starting Member
4 Posts |
Posted - 2010-05-27 : 12:29:00
|
I need to return all the users with their permissions for each database on a server.I've got the query written, but I'd like to write a cursor that will increment for each database on the server. we have about 20 servers and some of our servers have 25+ databases and runing the query individually for each one is taking a lot of time.How would I encapulate this query into a cursor to return all users for each database on the server, grouped by database: quote: 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)--usersSELECT 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_nameFROM perms_cte pWHERE principal_type_desc <> 'DATABASE_ROLE'UNION--role membersSELECT rm.member_principal_name, rm.principal_type_desc, p.class_desc, p.object_name, p.permission_name, p.permission_state_desc,rm.role_nameFROM perms_cte pright 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) rmON rm.role_principal_id = p.principal_idorder by 1
Thanks for any help. |
|
|
|
|
|
|
|