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
yCREATE
. 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
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
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
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
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
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.
Deja una respuesta