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?
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.
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.
[. .____] 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
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.
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.
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