Lista istniejących loginów i użytkowników SQL Server

14

Wiem, że możemy sprawdzić loginy i zdefiniowanych użytkowników za pomocą GUI w SQL Server, ale zastanawiam się, jak możemy to sprawdzić za pomocą skryptu.

Uruchomiłem poniższe zapytanie, ale pokazuje ono Principal_id, którego nie jestem pewien, jak zmapować, aby uzyskać poziom uprawnień.

SELECT * FROM Sys.login_token 

Czy jest więc jakiś wbudowany zapisany proces, który może wyświetlać dane logowania i użytkowników z ich poziomem uprawnień ?

Dziękuję Ci.

Niebo
źródło
Zdefiniuj „poziom uprawnień”. Prawa do obiektu, członkostwo w roli bazy danych, członkostwo w roli serwera?
mrdenny,
W razie wątpliwości włącz Profiler przeciwko Management Studio i zobacz, co robi.
Jon Seigel,

Odpowiedzi:

14

Nie jestem pewien, czy istnieje wbudowany sposób, ale wypróbuj to zapytanie dla podmiotów głównych serwera:

;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

Zasadniczo to, co robi, otrzymuje uprawnienia przyznane i odmówione, i łączy je z członkostwem w roli. Powinno to dać ci krótkie spojrzenie na bezpieczeństwo logowania do serwera. Daj mi znać, jeśli tego właśnie szukasz.

Thomas Stringer
źródło
To było bardzo przydatne! Dodałem ciąg konkatenacji, aby „pokazać mi polecenie nadania / cofnięcia uprawnień do każdego loginu na liście”, podobnie jak to - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryco pomaga replikować te uprawnienia, jeśli migrujesz serwer :)
NateJ
8

Spróbuj tego - wyświetli się lista użytkowników, obiektów i uprawnień, które mają na tych obiektach:

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

Powinieneś także sprawdzić funkcję sys.fn_my_permissions:

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

Oto kilka linków, które powinny Ci również pomóc:

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

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

Mam nadzieję, że to Ci pomoże.

Mr.Brownstone
źródło