Listado de los inicios de sesión y usuarios de SQL Server existentes

14

Sé que podemos verificar los inicios de sesión y los usuarios que están definidos, usando la GUI en SQL Server, pero me pregunto cómo podemos hacer esta verificación usando el script.

Ejecuté la consulta a continuación, pero muestra Principal_id, que no estoy seguro de cómo asignar para obtener el nivel de permiso.

SELECT * FROM Sys.login_token 

Entonces, ¿hay algún proceso almacenado incorporado que pueda enumerar los inicios de sesión y los usuarios con su nivel de permiso ?

Gracias.

Cielo
fuente
Definir "nivel de permiso". Derechos de objeto, membresía de rol de base de datos, membresía de rol de servidor
mrdenny
En caso de duda, active Profiler contra Management Studio y vea qué hace.
Jon Seigel

Respuestas:

14

No estoy seguro de si hay una forma integrada, pero pruebe esta consulta para los principales del 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

Básicamente, lo que hace es obtener los permisos otorgados y denegados, y los une con el rol de miembro. Debería darle una breve mirada sobre la seguridad para los inicios de sesión del servidor. Avísame si eso es lo que estás buscando.

Thomas Stringer
fuente
¡Esto fue muy útil! Agregué una concatenación de cadenas para "mostrarme un comando para otorgar / revocar los permisos para cada inicio de sesión enumerado", de esta manera, lo CAST([srvperm].[state_desc] AS VARCHAR(MAX)) + ' ' + CAST(srvperm.[permission_name] AS VARCHAR(MAX)) + ' TO [' + CAST(srvprin.name AS VARCHAR(MAX)) + '];' as GrantQueryque ayuda a replicar esos permisos si está migrando un servidor :)
NateJ
8

Pruebe este: enumerará los usuarios, los objetos y los permisos que tienen sobre esos 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

También debe consultar la función sys.fn_my_permissions:

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

Aquí hay algunos enlaces que deberían ayudarlo también:

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

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

Espero que esto te ayude.

Mr.Brownstone
fuente