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.


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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.