Revista Informática

Obtener los permisos asignados en SQL Server

Publicado el 18 noviembre 2022 por Daniel Rodríguez @analyticslane
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.


Volver a la Portada de Logo Paperblog