T-SQL pour lister tous les mappages utilisateur avec des rôles de base de données/autorisations pour une Connexion
Je suis à la recherche d'un script t-sql qui peut lister les bases de données et les et les rôles respectifs/privilèges mappé pour un utilisateur particulier. À l'aide de SQL Server 2008 R2.
J'ai écrit un petit interroger pour obtenir l'autorisation d'un utilisateur sur une base de données spécifique.
SELECT*FROM(SELECT
perm.permission_name AS'PERMISSION',perm.state_desc AS'RIGHT',perm.class_desc AS'RIGHT_ON',p.NAME AS'GRANTEE',m.NAME AS'USERNAME',s.name AS'SCHEMA',o.name AS'OBJECT',IIF(perm.class =0, db_name(),NULL)AS'DATABASE'FROM
sys.database_permissions perm
INNERJOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFTJOIN sys.database_role_members rm ON rm.role_principal_id = p.principal_id
LEFTJOIN sys.database_principals m ON rm.member_principal_id = m.principal_id
LEFTJOIN sys.schemas s ON perm.class =3AND perm.major_id = s.schema_id
LEFTJOIN sys.objects AS o ON perm.class =1AND perm.major_id = o.object_id
UNIONALLSELECT
perm.permission_name AS'PERMISSION',perm.state_desc AS'RIGHT',perm.class_desc AS'RIGHT_ON','SELF-GRANTED'AS'GRANTEE',p.NAME AS'USERNAME',s.name AS'SCHEMA',o.name AS'OBJECT',IIF(perm.class =0, db_name(),NULL)AS'DATABASE'FROM
sys.database_permissions perm
INNERJOIN sys.database_principals p ON p.principal_id = perm.grantee_principal_id
LEFTJOIN sys.schemas s ON perm.class =3AND perm.major_id = s.schema_id
LEFTJOIN sys.objects AS o ON perm.class =1AND perm.major_id = o.object_id
)AS[union]WHERE[union].USERNAME ='Username'-- Username you will search forORDERBY[union].RIGHT_ON,[union].PERMISSION,[union].GRANTEE
Les autorisations de base de données fixe les rôles n'apparaissent pas dans sys.database_permissions. Par conséquent, la base de données de la direction peuvent avoir des autorisations supplémentaires ne sont pas listés ici.
CREATETABLE#tempww (
LoginName nvarchar(max),
DBname nvarchar(max),
Username nvarchar(max),
AliasName nvarchar(max))INSERTINTO#tempww
EXEC master..sp_msloginmappings
-- display resultsdeclare@col varchar(1000)declare@sql varchar(2000)select@col =COALESCE(@col +', ','')+ QUOTENAME(DBname)from#tempww Groupby DBname
Set@sql='select * from (select LoginName,Username,AliasName,DBname,row_number() over(order by (select 0)) rn from #tempww) src
PIVOT (Max(rn) FOR DBname
IN ('+@col+')) pvt'EXEC(@sql)-- cleanupDROPTABLE#tempww
Quel est le nombre, en vertu de certaines des colonnes de base de données? Assez sûr que c'est la base de données que le Nom d'utilisateur dispose des autorisations mais est-ce le nombre de fois que cette connexion est connecté?
DECLARE@DB_USers TABLE(DBName sysname, UserName sysname, LoginType sysname, AssociatedRole varchar(max),create_date datetime,modify_date datetime)INSERT@DB_USers
EXEC sp_MSforeachdb
'
use [?]
SELECT ''?'' AS DB_Name,
case prin.name when ''dbo'' then prin.name + '' (''+ (select SUSER_SNAME(owner_sid) from master.sys.databases where name =''?'') + '')'' else prin.name end AS UserName,
prin.type_desc AS LoginType,
isnull(USER_NAME(mem.role_principal_id),'''') AS AssociatedRole ,create_date,modify_date
FROM sys.database_principals prin
LEFT OUTER JOIN sys.database_role_members mem ON prin.principal_id=mem.member_principal_id
WHERE prin.sid IS NOT NULL and prin.sid NOT IN (0x00) and
prin.is_fixed_role <> 1 AND prin.name NOT LIKE ''##%'''SELECT
dbname,username ,logintype ,create_date ,modify_date ,
STUFF((SELECT','+CONVERT(VARCHAR(500),associatedrole)FROM@DB_USers user2
WHERE
user1.DBName=user2.DBName AND user1.UserName=user2.UserName
FORXML PATH('')),1,1,'')AS Permissions_user
FROM@DB_USers user1
GROUPBY
dbname,username ,logintype ,create_date ,modify_date
ORDERBY DBName,username
Merci @Amon, mais je pense que je n'ai pas fait moi-même clair. La sortie du script devrait me donner la liste de la dbs, utilisateurs mappés à la dbs et le rôle de base de données les appartenances de chacun d'eux pour une connexion.
Est-ce le genre de chose que vous voulez?
Vous pourriez vouloir l'étendre pour obtenir plus d'infos de le sys tables.
utilisation de maître
DECLARE @nom VARCHAR(50) -- nom de base de données
DÉCLARER db_cursor CURSEUR POUR
select nom from sys.les bases de données
OUVRIR db_cursor
FETCH NEXT à PARTIR de db_cursor @nom
ALORS QUE @@FETCH_STATUS = 0
COMMENCER
print @nom
exec('UTILISER' + @nom +", sélectionnez-rp.nom, mp.nom de sys.database_role_members drm
rejoignez sys.database_principals rp (drm.role_principal_id = rp.principal_id)
rejoignez sys.database_principals mp (drm.member_principal_id = mp.principal_id)')
FETCH NEXT à PARTIR de db_cursor @nom
FIN
FERMER db_cursor
DÉSALLOUER db_cursor
Merci @JDC. Je crains que cela ne m'aide pas. Pour être précis, ce que je cherche, c'est la même chose appelé comme 'les rôles de Serveur" et "Mappage de l'Utilisateur" sous Propriétés de la Connexion pour une connexion particulière. J'ai besoin d'avoir concernés et les rôles de serveur de mappage de l'utilisateur des informations de connexion répertoriées.
OriginalL'auteur Walter Wildoer
J'ai écrit un petit interroger pour obtenir l'autorisation d'un utilisateur sur une base de données spécifique.
Les autorisations de base de données fixe les rôles n'apparaissent pas dans sys.database_permissions. Par conséquent, la base de données de la direction peuvent avoir des autorisations supplémentaires ne sont pas listés ici.
Je ne préfère pas
Parce que c'est juste de la récupération de laquelle les autorisations de l'utilisateur ne possède pas d'où ils viennent!
Peut-être que j'ai trouver comment rejoindre la base de données fixe les rôles de l'autorisation accordée à l'utilisateur un jour...
Pls profiter de la Vie et de la haine les Utilisateurs 😀
OriginalL'auteur Code.IT
OriginalL'auteur Piotr Czekaj
A volé cette de ici. Je l'ai trouvé très utile!
OriginalL'auteur sam yi
utilisant fn_my_permissions
OriginalL'auteur Arnon Rotem-Gal-Oz
Est-ce le genre de chose que vous voulez?
Vous pourriez vouloir l'étendre pour obtenir plus d'infos de le sys tables.
OriginalL'auteur JDC
Avez-vous de tri? Je viens de trouver ce code ici:
http://www.pythian.com/news/29665/httpconsultingblogs-emc-comjamiethomsonarchive20070209sql-server-2005_3a00_-view-all-permissions-_2800_2_2900_-aspx/
Je pense que je vais avoir besoin de faire un peu de peaufinage, mais essentiellement ce a trié pour moi!
Je souhaite, c'est pour vous aussi!
J
OriginalL'auteur JYatesDBA