2010-08-09 17 views
2

Je ne suis pas clair sur les vues catalogue liées à la sécurité dans SQL Server 2005 ou 2008. Je souhaite répertorier toutes les connexions, leurs rôles serveur, leurs utilisateurs correspondants dans toutes les bases de données, tous les rôles de base de données dans une requête. Comment puis-je écrire la requête?Dans SQL Server 2005, comment puis-je écrire une requête pour lister tous les login, leur rôle de serveur, correspondre à l'utilisateur dans tous les rôles db, db?

Je sais qu'il y a des vues de catalogue à utiliser, mais je ne connais pas leur relation. Ces vues de catalogue sont les suivantes: sys.database_role_member, sys.database_principals, sys.server_role_member, sys.server_principals.

Merci.

Répondre

1

Vous ne pouvez pas avoir une seule requête répertoriant toutes les bases de données car la liste est dynamique. Votre meilleur pari est d'utiliser sp_msforeachdb et un lot de construire le résultat et le retourner:

set nocount on; 
create table #result (sid varbinary(85), 
server_principal_id int, 
database_id int, 
database_principal_id int); 

exec ms_foreachdb 'insert into #result 
    (server_principal_id, database_id, database_principal_id) 
select s.principal_id, 
    db_id(''?''), 
    d.principal_id 
from sys.server_principals s 
join [?].sys.database_principals d 
    on s.sid = d.sid;'; 

select * from #result; 

Vous pouvez étendre à inclure les rôles de serveur et les rôles de base de données d'adhésion une fois que vous une forme de bon jeu de résultat pour regrouper tous cette information dans une seule table.

+0

si vous downview, rappelez-vous d'expliquer pourquoi –

1

Voici une requête qui répertoriera toutes les connexions avec leurs rôles au niveau du serveur.

select 
    login_name = pa.name, 
    --pa.principal_id, m.member_principal_id, m.role_principal_id,pb.principal_id, 
    role_name = pb.name 
from 
    sys.server_principals pa 
    inner join 
    sys.server_role_members m on pa.principal_id = m.member_principal_id 
    inner join 
    sys.server_principals pb on m.role_principal_id = pb.principal_id 
order by 
    pa.name, 
    pa.principal_id