Herramientas

Obtener los permisos asignados en SQL Server

Saber los permisos asignados en SQL Server a cada uno de los usuarios puede ser algo complicado. Para ello existen un par de funciones del sistema que se explican a continuación.

Seguridad en SQL Server

Los permisos de una base de datos son uno de los elementos clave para conseguir que estas sean seguras. Estos deben ser asignados explícitamente a cada uno de los usuarios o a los grupos de usuarios a los que pertenecen estos. Para asignar correctamente los permisos en el caso de SQL Server es necesario conocer una serie de conceptos:

  • Securizable (Securable): son los recursos a los que el motor de base de datos autoriza el acceso. Existiendo tres categorías en las que se puede agrupar los diferentes objetos securizables:
    • Servidor: por ejemplo, bases de datos, inicios de sesión y roles de servidor
    • Bases de datos: por ejemplo, esquema, certificado, usuario
    • Esquema: por ejemplo, tabla, vista, procedimiento, función
  • Permisos (Permissions): cada elemento securizable de una base de datos SQL Server tiene una serie de permisos asociados como puede ser el caso de ALTER, CONTROL y CREATE. Los permisos son gestionados a nivel de servidor mediante los inicios de sesión y a nivel de base de datos mediante los usuarios.
  • Principales (Principals): las identidades de seguridad que reciben el permiso para un objeto securizable se denominan principales. Los accesos a un objeto securizable se controlan otorgando o negando permisos o agregando roles a los usuarios.

Los tres términos con clave para comprender la forma en la que se gestiona el acceso a los recursos en SQL Server. Cada uno de los objetos securizables cuenta cuentan con diferentes niveles de permisos. Para que un usuario puede realizar una operación este debe tener el permiso adecuado en el objeto securizable sobre el que la desea realizar.

Comprobar los permisos en un servidor de SQL Server

En SQL server existe la función fn_my_permissions() con la que se puede comprobar los permisos asignados a un principal para un usuario. Una función que tienen dos parámetros, el primero es el objeto securizable y el segundo una cadena de texto con la clase de este objeto. Por ejemplo, se puede comprobar todos los permisos que tiene un usuario en relación con la base de datos con la siguiente instrucción.

SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
Listado de permisos asignados para el servidor de SQL Server

En el caso de que se ejecute como administrador deberán aparecer que se dispone de todos los servicios. Pero si se ejecuta para la cuenta de un usuario normal no debería aparecer ninguno.

EXECUTE AS USER = 'test'
SELECT * FROM fn_my_permissions(NULL, 'SERVER');
GO
Listado de permisos asignados para el servidor de SQL Server para un usuario de prueba

Comprobar los permisos sobre una base de datos

La comprobación se puede realizar también sobre la base de datos sobre la que se esté trabajando. Para ello solamente se debe cambiar la cadena 'SERVER' por la cadena 'DATABASE'. Lo que se puede ver en el siguiente ejemplo.

EXECUTE AS USER = 'test'
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
Listado de permisos asignados para la base de datos en SQL Server

Es fácil comprobar que para un usuario normal los permisos serían diferentes.

EXECUTE AS USER = 'test'
SELECT * FROM fn_my_permissions(NULL, 'DATABASE');
GO
Listado de permisos asignados para la base de datos en SQL Server para un usuario de prueba

Obtener el listado de permisos integrados en SQL Server

Para obtener el listado de todos los permisos integrados en SQL Server se puede recurrir a la función fn_builtin_permissions(). Una función que devuelve una tabla, por lo que se pueden obtener los resultados mediante una consulta SQL.

SELECT * FROM fn_builtin_permissions(NULL);
GO
Listado de permisos integrados en SQL Server

Conclusiones

En esta entrada se han visto un par de funciones con las que es posible comprobar los permisos asignados en SQL Server. Un par de funciones con las que podemos saber qué puede hacer cada uno de los usuarios sobre los diferentes objetos de la base de datos.

Imagen de Bruno /Germany en Pixabay

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez
Tags: SQL Server

Recent Posts

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

3 días ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

5 días ago

Curiosidad: ¿Por qué usamos p < 0.05? Un umbral que cambió la historia de la ciencia

En casi cualquier análisis estadístico —ya sea en medicina, psicología, economía o ciencia de datos—…

1 semana ago

¿Está concentrado el MSCI World? Un análisis con Gini, Lorenz y leyes de potencia

El MSCI World Index suele presentarse como “la ventana al mundo” para quienes invierten en…

2 semanas ago

Curiosidad: La maldición de la dimensionalidad, o por qué añadir más datos puede empeorar tu modelo

En el mundo del análisis de datos solemos escuchar una idea poderosa: cuantos más datos,…

2 semanas ago

Error npm ERR! code EACCES al instalar paquetes en Node.js: Cómo solucionarlo paso a paso

¿Te has encontrado con este error al intentar instalar paquetes con npm? npm ERR! code…

3 semanas ago

This website uses cookies.