Obtener todos los permisos de un usuario SQL Server

Algunas veces (por temas de auditoría) es necesario saber cuáles son todos los permisos que se tienen dentro de una BD.

No he encontrado un script que me permita saber absolutamente todos los permisos que posee mi usuario (teniendo en cuenta que el permiso puede no estar asociado a mi directamente si no a mi rol), es por eso que elaboré éste script que cubre en parte ésta necesidad.

El script que se muestra a continuación obtiene todos los permisos que tiene nuestro Login a nivel de servidor y además todos los permisos que tiene el usuario relacionado a nuestro login en cada Base de Datos.

Indiqué que esto cubría la necesidad "en parte" debido a que un permiso puede ser asignado directamente hacia un objeto lo cual está fuera del alcance del presente Script.

De todas maneras trabajaré una versión un poco más completa que cubra totalmente lo que se busca.

El Script es el siguiente:

SELECT 'Login: ' + SYSTEM_USER AS Login_Usuario
 
SELECT permission_name AS 'Permisos a nivel de servidor:'
FROM fn_my_permissions(NULL, 'SERVER')
 
DECLARE @Texto AS NVARCHAR(MAX)
 
SET @Texto = '
USE [?]
IF((SELECT COUNT(1) FROM sys.database_principals WHERE name = CURRENT_USER)>0)
BEGIN
      BEGIN TRY
            SELECT permission_name AS ''Permisos a nivel de BD (?):''
            FROM fn_my_permissions(NULL, ''DATABASE'')
      END TRY
      BEGIN CATCH
            SELECT ''Ocurrió un error: '' + ERROR_MESSAGE() AS ''Permisos a nivel de BD (?):''
      END CATCH
END'
 
EXEC master.sys.sp_MSforeachdb @Texto

0 comentarios:

Publicar un comentario