¿Cuáles son los permisos mínimos requeridos para realizar tareas administrativas en la base de datos del sistema?
Pregunta
¿Cuáles son los permisos mínimos para realizar tareas administrativas en la base de datos del sistema BarTender en BarTender 2019 y versiones posteriores?
Respuesta
Rol de servidor: dbcreator y Rol de base de datos: db_owner son los permisos mínimos requeridos para realizar todas las tareas administrativas disponibles en la Consola de Administración para la base de datos del sistema BarTender.
Aquí tienes un desglose de qué permisos corresponden a cada tarea en la Consola de Administración:
| Acción/Procedimiento | Permisos mínimos |
| Ver tamaño de la base de datos | Permiso de base de datos: Ver estado de la base de datos |
| Respaldar base de datos |
Permiso de base de datos: Respaldar base de datos El directorio donde se guarda el respaldo debe existir, y el servicio de SQL Server debe tener permisos de lectura/escritura en ese directorio. |
| Restaurar base de datos |
Rol de servidor: dbcreator Rol de base de datos: db_owner |
| Ejecutar mantenimiento ahora |
Permisos de base de datos: Conectar, eliminar, ejecutar, insertar, seleccionar, actualizar, respaldar base de datos (si la casilla "Archivar registros eliminados" está habilitada) |
| Purgar todos los registros ahora |
Permisos de base de datos: Conectar, eliminar, ejecutar, insertar, seleccionar, actualizar, respaldar base de datos (si la casilla "Archivar registros eliminados" está habilitada) Rol de base de datos: db_ddladmin |
Sin embargo, incluso con el conjunto correcto de permisos, actualmente existe un problema conocido que hará que la ejecución de Mantenimiento falle a menos que el usuario que realiza la acción tenga el rol de sysadmin. El mensaje de error será similar al siguiente:
Stored Procedure: sp_updatestats Failed; Inner Message: User does not have permission to perform this action.
Processed 584 pages for database 'SystemDB', file 'SystemDB' on file 1.
Processed 1 pages for database 'SystemDB', file 'SystemDB_log' on file 1.
BACKUP DATABASE successfully processed 585 pages in 0.091 seconds (50.217 MB/sec).
Este es un problema conocido de SQL Server. Uno de los procedimientos almacenados usados en el mantenimiento, 'SpDeleteRecords', llama a un procedimiento "builtin" de SQL Server llamado 'sp_updatestats'. Esto ayuda a mejorar el rendimiento de las consultas una vez que se han eliminado los registros.
Desafortunadamente, aunque la documentación de Microsoft indica que el propietario de la base de datos (dbo) tiene permiso para ejecutar esto, actualmente hay un error en SQL Server que hace que falle.
Una solución temporal para los clientes es modificar el procedimiento almacenado 'SpDeleteRecords' (a través de SQL Server Management Studio) de la siguiente manera:
Genera un script ALTER para 'SpDeleteRecords' haciendo clic derecho sobre él en el panel izquierdo de SQL Server Management Studio bajo "TuBaseDeDatos\Programabilidad\Procedimientos almacenados", haz clic derecho en dbo.SpDeleteRecords y selecciona "Script Stored Procedure as ALTER to > New Query Editor Window".
Agrega "with execute as 'dbo'" a la línea ALTER del script de la siguiente manera:
ALTER PROC [dbo].[SpDeleteRecords](@pastUtcTicks bigint, @categories nvarchar(1024)) with execute as 'dbo'
Ejecuta este script con F5 o el botón "! Ejecutar" de la barra de herramientas.
Esto forzará que 'SpDeleteRecords' se ejecute bajo las credenciales del propietario de la base de datos. Después de modificar el procedimiento almacenado, intenta ejecutar el mantenimiento nuevamente (con los permisos mínimos mencionados en la tabla anterior) y debería funcionar.
Más información (uso interno solamente)
Ver DEVQ-4363 y BUG-2270
Además, tarde o temprano, probablemente recibiremos quejas sobre por qué es necesario otorgar cierto rol de servidor o permiso de base de datos, y que esto representa un riesgo de seguridad (como db_owner). De hecho, hoy recibí esta pregunta de un cliente y esto fue lo que respondí
En lugar de verlo desde el punto de vista de qué rol de base de datos tiene este usuario de SQL Server, lo enfocaría desde el punto de vista de:
- ¿La contraseña de la cuenta de SQL Server utilizada por la base de datos del sistema BarTender es compleja y, por lo tanto, más segura?
- ¿Qué miembro de tu empresa conoce o tiene acceso a esta contraseña?
El permiso db_owner en la base de datos ya es una preocupación de seguridad si le preguntas a un administrador de SQL Server, pero creo que lo más importante es quién tiene acceso a la contraseña de esta cuenta de SQL Server y cuán compleja es la contraseña.