Listando os logons e usuários existentes do SQL Server

14

Eu sei que podemos verificar os logons e os usuários definidos, usando a GUI no SQL Server, mas estou pensando em como podemos fazer essa verificação usando o script.

Eu executei a consulta abaixo, mas ela mostra Principal_id, que não tenho certeza de como mapear para obter o nível de permissão.

SELECT * FROM Sys.login_token 

Existe algum processo armazenado interno que possa listar os logins e os usuários com seu nível de permissão ?

Obrigado.

Céu
fonte
Defina "nível de permissão". Direitos de objeto, associação de função de banco de dados, associação de função de servidor?
mrdenny
Em caso de dúvida, ative o Profiler no Management Studio e veja o que ele faz.
21412 Jon Seigel

Respostas:

14

Não tenho certeza se existe uma maneira interna, mas tente esta consulta para os principais do servidor:

;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

Basicamente, o que ele faz obtém as permissões concedidas e negadas e une-o à associação de função. Deve dar uma breve olhada na segurança dos logins do servidor. Deixe-me saber se é isso que você está procurando.

Thomas Stringer
fonte
Isso foi muito útil! Eu adicionei uma seqüência de concatenação para "me mostrar um comando para concessão / revogar as permissões para cada login listado", como assim - CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryo que ajuda a replicar essas permissões se você estiver migrando um servidor :)
NateJ
8

Experimente este - listará usuários, objetos e as permissões que eles têm sobre esses objetos:

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

Você também deve verificar a função sys.fn_my_permissions:

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

Aqui estão alguns links que também devem ajudá-lo:

PERMISSÕES: http://msdn.microsoft.com/en-us/library/ms191291.aspx

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

Espero que isso ajude você.

Mr.Brownstone
fonte