Inicio > Sql Server 2005 - 2008 > Auditoría de permisos y Roles del servidor (SQL Server)

Auditoría de permisos y Roles del servidor (SQL Server)


Dado que SQL Server implemento un nuevo modelo de seguridad y se pueden asignar permisos, hay varias vistas del catálogo que nos interesa para realizar una Auditoría.

sys.server_principals : Contiene una fila por cada entidad de seguridad del servidor.
sys.server_permissions : Devuelve una fila por cada permiso a nivel de servidor.
sys.server_role_members : Devuelve una fila por cada miembro de cada función fija de servidor.

Para obtener los miembros de la función de servidor vamos a combinar sys.server_principals sys.server_role_members :

SELECT SP1.[name] AS ‘Login’, SP2.[name] AS ‘ServerRole’
FROM sys.server_principals SP1
JOIN sys.server_role_members SRM
ON SP1.principal_id = SRM.member_principal_id
JOIN sys.server_principals SP2
ON SRM.role_principal_id = SP2.principal_id
ORDER BY SP1.[name], SP2.[name];

Para obtener los permisos, usaremos sys.server_principals y sys.server_permissions :

SELECT SP.[name] AS ‘Login’ , SPerm.state_desc + ‘ ‘ + SPerm.permission_name AS ‘ServerPermission’
FROM sys.server_principals SP
JOIN sys.server_permissions SPerm
ON SP.principal_id = SPerm.grantee_principal_id
ORDER BY [Login], [ServerPermission];

Tener en cuenta que si usted no está interesado en el permiso CONNECT SQL, puedes realizar un filtro utilizando una cláusula WHERE apropiada (SPerm.type = ‘COSQ’ Y SPerm.state = ‘G’) – que eliminará del conjunto de resultados.
Por supuesto, podemos combinar los dos para generar una consulta para un único informe. Ya que sabemos que no habrá duplicaciones entre las dos instrucciones SELECT, podemos utilizar UNION ALL y una ligera modificación a la primera consulta (para indicar el ROL) para obtener los permisos para cada login.

SELECT SP1.[name] AS ‘Login’, ‘Role: ‘ + SP2.[name] COLLATE DATABASE_DEFAULT AS ‘ServerPermission’
FROM sys.server_principals SP1
JOIN sys.server_role_members SRM
ON SP1.principal_id = SRM.member_principal_id
JOIN sys.server_principals SP2
ON SRM.role_principal_id = SP2.principal_id
UNION ALL
SELECT SP.[name] AS ‘Login’ , SPerm.state_desc + ‘ ‘ + SPerm.permission_name COLLATE DATABASE_DEFAULT AS ‘ServerPermission’ FROM sys.server_principals SP
JOIN sys.server_permissions SPerm
ON SP.principal_id = SPerm.grantee_principal_id
ORDER BY [Login], [ServerPermission];

  1. Aún no hay comentarios.
  1. No trackbacks yet.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: