Una de las cosas que siempre tenemos en cuenta cualquier DBA es mantener nuestros entornos lo más seguros posible. Para ello, es muy importante tener presente que cuando otorgamos un permiso cumpla el principio de menor privilegio. Por ejemplo, si un usuario sólo necesita permisos de “INSERT” sobre una tabla, intentamos aislar dicho permiso y no otorgar más permisos adicionales.
Teniendo presente este principio, nos hemos encontrado en la situación de que algún cliente nos solicita permisos para que un usuario pueda realizar backups de base de datos, por ejemplo. Para ello existe un permiso a nivel de base de datos:
USE [database_name]
GO
GRANT BACKUP DATABASE TO [op_backup]
GO
O añadir el usuario a un rol de base de datos:
USE [database_name]
GO
ALTER ROLE [db_backupoperator] ADD MEMBER [op_backup]
GO
Con estas operaciones resolveríamos la necesidad del cliente, pero ¿y si alguien con permisos crea una nueva base de datos? ¿el usuario op_backup podría realizar un backup?
No, no podría. Esto nos reporta un error indicando que el usuario no tiene permisos para realizar backups.
¿Qué soluciones tenemos?
Lo más sencillo sería añadir al usuario “op_backup” el rol sysadmin de la instancia, para que pueda hacer backups de todas las bases de datos existentes y las nuevas que vayan a ser creadas. Pero si queremos cumplir el principio que hemos comentado del menor privilegio, y las buenas practicas, no debemos hacerlo.
También se nos puede ocurrir otorgar el rol “db_backupoperator” pero esto sólo solucionaría el problema para esta base de datos en concreto, no para las nuevas que vayan a ser creadas en un futuro.
¿Qué solución proponemos nosotros?
Gracias a la base de datos “model” podemos solventar este asunto. La ‘model’ es una base de datos de sistema, que la podemos usar como plantilla. Todas las opciones y contenido de esta base de datos serán copiados a la nueva base de datos que creemos.
Sugerimos revisar el siguiente enlace de Microsoft para verificar las opciones que vienen por defecto y cuales podemos modificar:
Para crear el usuario en la base de datos “model” y otorgar el rol de “db_backupoperator” ejecutamos el siguiente script
USE [model]
GO
CREATE USER [op_backup] FOR LOGIN [op_backup]
GO
USE [model]
GO
ALTER ROLE [db_backupoperator] ADD MEMBER [op_backup]
GO
Podemos realizar una prueba creando una nueva base de datos:
CREATE DATABASE [bbdd_nueva]
GO
Y con esto, el usuario “op_backup” podrá realizar backups de esta nueva base de datos y las nuevas que se creen en el gestor, teniendo el permiso más restrictivo para realizar backups:
¡Hasta pronto!
Gran dato ! gracias por compartir esto !
Gracias Jesús, síguenos en Twitter para estar al día de las novedades de nuestro Blog.
@Sicuel1