Liste des connexions et des utilisateurs SQL Server existants

14

Je sais que nous pouvons vérifier les connexions et les utilisateurs qui sont définis, en utilisant l'interface graphique dans SQL Server, mais je me demande comment nous pouvons faire cette vérification en utilisant un script.

J'ai exécuté la requête ci-dessous mais elle montre Principal_id que je ne sais pas comment mapper pour obtenir le niveau d'autorisation.

SELECT * FROM Sys.login_token 

Y a-t-il donc un proc stocké intégré qui peut répertorier les connexions et les utilisateurs avec leur niveau d'autorisation ?

Je vous remercie.

Ciel
la source
Définissez le "niveau d'autorisation". Droits d'objet, appartenance au rôle de base de données, appartenance au rôle serveur?
mrdenny
En cas de doute, activez Profiler contre Management Studio et voyez ce qu'il fait.
Jon Seigel

Réponses:

14

Je ne sais pas s'il existe une méthode intégrée, mais essayez cette requête pour les principaux du serveur:

;with ServerPermsAndRoles as
(
    select
        spr.name as principal_name,
        spr.type_desc as principal_type,
        spm.permission_name collate SQL_Latin1_General_CP1_CI_AS as security_entity,
        'permission' as security_type,
        spm.state_desc
    from sys.server_principals spr
    inner join sys.server_permissions spm
    on spr.principal_id = spm.grantee_principal_id
    where spr.type in ('s', 'u')

    union all

    select
        sp.name as principal_name,
        sp.type_desc as principal_type,
        spr.name as security_entity,
        'role membership' as security_type,
        null as state_desc
    from sys.server_principals sp
    inner join sys.server_role_members srm
    on sp.principal_id = srm.member_principal_id
    inner join sys.server_principals spr
    on srm.role_principal_id = spr.principal_id
    where sp.type in ('s', 'u')
)
select *
from ServerPermsAndRoles
order by principal_name

Fondamentalement, ce qu'il fait obtient les autorisations accordées et refusées et les associe au rôle d'appartenance. Il devrait vous donner un bref aperçu de la sécurité des connexions au serveur. Faites-moi savoir si c'est ce que vous recherchez.

Thomas Stringer
la source
C'était très utile! J'ai ajouté une concaténation de chaînes pour "afficher une commande pour accorder / révoquer les autorisations à chaque connexion répertoriée", comme ceci - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryce qui aide à répliquer ces autorisations si vous migrez un serveur :)
NateJ
8

Essayez celui-ci - cela répertoriera les utilisateurs, les objets et les autorisations dont ils disposent sur ces objets:

SELECT p.name, o.name, d.*
FROM sys.database_principals AS p
JOIN sys.database_permissions AS d ON d.grantee_principal_id = p.principal_id
JOIN sys.objects AS o ON o.object_id = d.major_id

Vous devriez également consulter la fonction sys.fn_my_permissions:

http://msdn.microsoft.com/en-us/library/ms188367.aspx

Voici quelques liens qui devraient également vous aider:

AUTORISATIONS: http://msdn.microsoft.com/en-us/library/ms191291.aspx

SYS.DATABASE_PERMISSIONS: http://msdn.microsoft.com/en-us/library/ms188367.aspx

J'espère que ceci vous aide.

Mr.Brownstone
la source