0

¿Cómo copiar permisos de usuario a través de procedimientos almacenados?

Siguiendo con temas de permisos, seguridad y roles ¿alguna vez has tenido que copiar/replicar permisos de un usuario de tus instancias SQL Server? Hace poco, nos tocó transferir todos los permisos que tenía un usuario a otro ¿conoces alguna manera ágil para hacerlo?
Nosotros conocemos dos procedimientos almacenados libres y desarrollados por Kenneth Fisher (http://www.sqlstudies.com), muy útiles y que nos van a facilitar este tipo de tareas que pueden llegar a ser muy complejas. Imagina que puede haber permisos asignados hasta nivel de tabla/columna, esto sería muy difícil sin ayuda de este tipo de procedimientos almacenados:


sp_SrvPermissions


Este primer procedimiento nos devuelve tres resultados, el listado y código del login, los roles asignados a nivel de instancia y los permisos asignados a nivel de instancia.

Por ejemplo, al usuario prueba le asignamos el rol de instancia “dbcreator” y le asignamos el permiso de VIEW SERVER STATE sobre la instancia.



Lo primero que hay que hacer es crear el procedimiento en la instancia (el código lo puedes obtener en este enlace https://sqlstudies.com/free-scripts/sp_srvpermissions/)

El siguiente paso es ejecutar el procedimiento con el parámetro @Principal, pasándole el valor del usuario:




Como puedes ver en la imagen, los resultados son correctos mostrándonos que es miembro del rol dbcreator y tiene el permiso de VIEW SERVER STATE. Pero lo más útil en nuestra opinión es que te autogenera el script para asignar los permisos o revocarlos:



Con un simple “replace” en cualquier editor de texto o en nuestro propio SSMS podríamos ejecutar el script sobre otro usuario.


sp_DBPermissions


El segundo procedimiento nos devuelve tres resultados. El primero es un listado de los usuarios, el segundo si es miembro de algún rol de base de datos y el tercero los permisos a nivel de objetos.

Continuando realizando pruebas con el usuario “prueba” le asignamos una BBDD llamada “SICUEL”, agregándole a un rol dentro de la BBDD, db_datareader, y por último otorgándole un permiso de delete sobre una tabla.



Debemos crear el procedimiento en nuestra instancia al igual que con el procedimiento anterior. El código lo podemos encontrar en: https://sqlstudies.com/free-scripts/sp_dbpermissions/

Una vez creado procedemos a ejecutarlo:



Pasándole el parámetro de @LoginaName el nombre del usuario, en nuestro caso, prueba:



La salida es muy similar al primer procedimiento. Nos aparece un listado con los permisos asignados, y lo más útil para nosotros es que nos genera un script automáticamente para crear el usuario en cada base de datos y asignar los permisos/roles.


La hostia estos procedimientos ¿no? Desde aquí agradecer a Kenneth Fisher su creación ya que a nosotros nos han salvado en más de una ocasión de volvernos locos picando permisos. Os invitamos a pasar por su linkedin y seguirle

Os sugerimos guardar en favoritos o marcadores esta entrada ya que creemos que estos dos procedimientos hay que tenerlos siempre en la recámara ya que son tan útiles cómo frecuentes de utilizar y nos ahorra muchísimo tiempo de tener que hacer todo el proceso manualmente.

Por cierto, ya que nos estas visitando y estás buscando info sobre seguridad, permisos y roles te sugerimos pasar por otra de nuestras entrada y tener siempre a mano el poster que nos proporciona Microsoft:.

¡Nos vemos pronto debeas!

RSS
Facebook
Twitter
LINKEDIN

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *