web-dev-qa-db-fra.com

Énumérez tous les utilisateurs sur SQL Server pour l'audit

J'utilise SQL Server Management Studio 17 et j'essaie d'énumérer tous les utilisateurs à l'audit de manière organisée en mentionnant leur nom de base de données.

J'ai essayé la requête ci-dessous, mais il montre que les utilisateurs dans des horaires différents et que certains utilisateurs sont dupliqués.

exec sp_MSforeachdb 'select * from ?.sys.sysusers'

Que pourrais-je utiliser/essayer à la place?

1
haithm

Vous voudrez peut-être essayer la fonction intégrée sp_helplogins.

Fournit des informations sur les connexions et les utilisateurs qui leur sont associés dans chaque base de données.

Référence:sp_helplogins (Transact-SQL) (Microsoft | Docs | SQL Server)

Si vous exécutez un simple:

 exec sp_helplogins

... il vous sera présenté avec deux fenêtres.

Première fenêtre

Le premier rapport contient des informations sur chaque connexion spécifiée, comme indiqué dans le tableau suivant.

Column name   Data type       Description

LoginName     sysname         Login name.

SID           varbinary(85)   Login security identifier (SID).

DefDBName     sysname         Default database that LoginName uses when connecting to an 
                              instance of SQL Server.

DefLangName   sysname         Default language used by LoginName.

Auser         char(5)         Yes = LoginName has an associated user name in a database.
                              No = LoginName does not have an associated user name.

ARemote       char(7)         Yes = LoginName has an associated remote login.
                              No = LoginName does not have an associated login.

Résultat

[. .____] LoginName | SID | DefDBName | DefLangName | AUSER | ARemote 
 ---------------------------------------- + --- -------------------------------------------------- --------------- + ----------- + ------------- + ------- + --------- [. .____] ## MS_AgentSigningCertificate ## | 0x010600000000000901000000AB808B5B1F45E02462E89246B35D879D459D7BCB | maître | us_english | oui | non 
 ## MS_PolicyEventProcessingLogin ## | 0x99533C1F5E0B584889BB3FA05C33ADC1 | maître | us_english | oui | non 
 ## MS_PolicySigningCertificate ## | 0x0106000000000009010000006DFF93DB1C345982E5FF1D9148CA1CC1A605C5EC | maître | NULL | NO | non 
 ## MS_PolicyTsqlExecutionLogin ## | 0xA9EEB439F4762546BD90D163703F6DA1 | maître | us_english | oui | non 
 ## MS_SmoExtendedSigningCertificate ## | 0x010600000000000901000000044EFFBABE4DF3793E8DA9D60353CD089AC2C183 | maître | NULL | NO | non 
 ## MS_SQLAuthenticatorCertificate ## | 0x0106000000000009010000001D9B4659FEDA4633E7989520152C8AFCCAF6430C | maître | NULL | NO | non 
 ## MS_SQLReplicationSigningCertificate ## | 0x010600000000000901000000195A781158BF37965401996C9645207BFF20F765 | maître | NULL | NO | non 
 ## MS_SQLResourceSigningCertificate ## | 0x010600000000000901000000922D2F20EB6613B78484357D75AFFAB066EAC58A | maître | NULL | NO | non 
 service NT\MSSQLSERVER | 0x010600000000000550000000E20F4FE7B15874E48E19026478C2DC9AC307B83E | maître | us_english | NO | non 
 NT SERVICE\ReportServer | 0x010600000000000550000000214401ACF066EA342187301080455260EB684BA2 | maître | us_english | oui | non 
 NT SERVICE\SQLSERVERAGENT | 0x010600000000000550000000DCA88F14B79FD47A992A3D8943F829A726066357 | maître | us_english | NO | non 
 NT SERVICE\SQLWriter | 0x010600000000000550000000732B9753646EF90356745CB675C3AA6CD6B4D28B | maître | us_english | NO | non 
 NT SERVICE\Winmgmt | 0x0106000000000005500000005A048DDFF9C7430AB450D4E7477A2172AB4170F4 | maître | us_english | NO | non 
 NT-Autorität\Netzwerkdienst | 0x010100000000000514000000 | maître | us_english | NO | non 
 NT-Autorität\SYSTEM | 0x010100000000000512000000 | maître | us_english | oui | [. .____] pas sa | 0x01 | maître | us_english | oui | aucun test 
 | 0x70F0AA94953CE7479682442D59C74CF5 | maître | us_english | oui | non  

Deuxième fenêtre

Le deuxième rapport contient des informations sur les utilisateurs mis en correspondance à chaque connexion, et les appartenances de rôle de la connexion comme indiqué dans le tableau suivant.

Column name   Data type   Description

LoginName     sysname     Login name.

DBName        sysname     Default database that LoginName uses when connecting to an instance of SQL Server.

UserName      sysname     User account that LoginName is mapped to in DBName, and the roles that LoginName is a member of in DBName.

UserOrAlias   char(8)     MemberOf = UserName is a role.
                          User = UserName is a user account.  

Résultat

 
 LoginName | DBName | Nom d'utilisateur | Useroralias [.____] ------------------------------------- + ---------------- + ---------------- + --------------- + ---------------- + ----------- ---------------- + -------------------------------------- + ------------ 
 ## ms_agentsIntingCertificate ## | maître | ## ms_agentsIntingCertificate ## | Utilisateur 
 ## ms_policyEventProcessingLogin ## | maître | ## ms_policyeventProcessingLogin ## | Utilisateur 
 ## ms_policyEventProcessingLogin ## | msdb | ## ms_policyeventProcessingLogin ## | Utilisateur 
 ## ms_policyEventProcessingLogin ## | msdb | PolitiqueAdministratorrole | Membre de 
 ## ms_policytsqlexecueLogin ## | msdb | ## ms_policytsqlexecotLogin ## | Utilisateur 
 ## MS_POLICYTSQLEXECUTLOGIN ## | msdb | PolitiqueAdministratorrole | Membre de 
 NT Service\Reporterver | maître | Service NT\NOCKERVER | Utilisateur 
 Service NT\NOCKERVER | maître | Rsexecrole | Membre de 
 NT Service\Reporterver | msdb | Service NT\NOCKERVER | Utilisateur 
 Service NT\NOCKERVER | msdb | Rsexecrole | Membre de 
 NT Service\Reporterver | Reporanver | Service NT\NOCKERVER | Utilisateur 
 Service NT\NOCKERVER | Reporanver | Rsexecrole | Membre de 
 NT Service\Reporterver | Reportervertempdb | Service NT\NOCKERVER | Utilisateur 
 Service NT\NOCKERVER | Reportervertempdb | Rsexecrole | Membre de 
 NT-Autorität\System | Aventureworksdw2012 | db_owner | Membre de 
 NT-Autorität\System | Aventureworksdw2012 | DBO | Utilisateur [.____] SA | maître | db_owner | Membre de [.____] SA | maître | DBO | Utilisateur [.____] SA | Modèle | db_owner | Membre de [.____] SA | Modèle | DBO | Utilisateur [.____] SA | msdb | db_owner | Membre de [.____] SA | msdb | DBO | Utilisateur [.____] SA | templdb | db_owner | Membre de [.____] SA | templdb | DBO | Utilisateur 
 Test | Stackexchange | Test | Utilisateur             

Cela pourrait être ce que vous cherchez.

0
John aka hot2use

Vous pouvez également utiliser un curseur pour boucler sur les bases de données et obtenir leurs utilisateurs:

DECLARE @dbname NVARCHAR(255), @sql NVARCHAR(max)

DECLARE c CURSOR FORWARD_ONLY READ_ONLY FOR
SELECT name FROM sys.databases 
WHERE database_id > 4;

OPEN c
FETCH NEXT FROM c INTO @dbname ;

WHILE @@fetch_status = 0
BEGIN
    set @sql =
    'use '+@dbname+' 
    select '''+@dbname+''',* 
    from sys.sysusers 
    where name not in 
    (''public''
    ,''dbo''
    ,''guest''
    ,''INFORMATION_SCHEMA''
    ,''sys''
    ,''db_owner''
    ,''db_accessadmin''
    ,''db_securityadmin''
    ,''db_ddladmin''
    ,''db_backupoperator''
    ,''db_datareader''
    ,''db_datawriter''
    ,''db_denydatareader''
    ,''db_denydatawriter'')';

    EXEC (@sql);
    FETCH NEXT FROM c INTO @dbname;
END
CLOSE C
DEALLOCATE c
0
Randi Vertongen