18 octubre, 2009

Los permisos para BACKUP y RESTORE

Cuando se ejecuta un respaldo de base de datos mediante el comando BACKUP, hay que considerar los siguientes permisos:

  • Permisos para poder ejecutar el comando BACKUP.
  • Permisos para escribir en los archivos físicos.

Para poder ejecutar el comando BACKUP, de forma predeterminada, los permisos para ejecutar los comandos BACKUP DATABASE y BACKUP LOG corresponden a los usuarios miembros del rol de servidor SysAdmin y de roles de base de datos Db_Owner y Db_BackupOperator.

Para poder escribir en los archivos físicos, los privilegios corresponden al servicio SQL que es quién hace la tarea. El servicio SQL Server debe poder leer y escribir en el dispositivo y la cuenta en la que se ejecuta el servicio SQL Server debe tener permisos de escritura. Observar que los privilegios del usuario que ejecutó el comando BACKUP no interesan: Una vez que el BACKUP pudo ejecutarse, los privilegios de escritura los tiene el servicio SQL.

Ejemplo:

-- Respaldo completo de una base de datos
BACKUP DATABASE MiBase
TO DISK = 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak'
GO

Para que este comando sea exitoso, los permisos deben ser así:

1. El usuario que ejecuta el BACKUP debe pertenecer al rol SysAdmin o Db_Owner o Db_BackupOperator.

2. La cuenta de inicio de SQL Server debe tener permiso de Lectura y Escritura sobre la carpeta Z:\Respaldos\Sql

Para hacer un RESTORE, las consideraciones son:

Si la base de datos que se va a restaurar no existe, el usuario debe tener permisos CREATE DATABASE para poder ejecutar RESTORE. Si la base de datos existe, los permisos RESTORE corresponden de forma predeterminada a los miembros de las funciones fijas de servidor sysadmin y dbcreator, y al propietario (dbo) de la base de datos (para la opción FROM DATABASE_SNAPSHOT, la base de datos siempre existe).

Los permisos RESTORE se conceden a funciones en las que la información acerca de los miembros está siempre disponible para el servidor. Debido a que los miembros de una función fija de base de datos sólo se pueden comprobar cuando la base de datos es accesible y no está dañada, lo que no siempre ocurre cuando se ejecuta RESTORE, los miembros de la función fija de base de datos db_owner no tienen permisos RESTORE.

Ejemplo:

RESTORE DATABASE MiBaseNueva
FROM DISK = 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak'

La cuenta de inicio de SQL Server debe tener permisos de lectura sobre los archivos físicos involucrados en el comando RESTORE (en el ejemplo: 'Z:\Respaldos\Sql\MiRespaldoDeBase1.bak').

3 comentarios:

  1. Hola buenas, estoy realizando un formulario donde el cliente pueda hacer un backup de la BBDD del programa, y también pueda restaurarla, el backup me lo realiza pero el restore no, me dice que "No se puede abrir el archivo fisico" de mi BD.mdf. La BBDD la tengo alojada en la carpeta del proyecto, en C:\Proyecto\BD.mdf, he leido tu articulo, pero no se como darle los privilegios para realizar los querys con sysadmin o dbowner.
    Un saludo

    ResponderEliminar
  2. El error parece indicar que se ha especificado incorrectamente la carpeta física, no parece ser un problema de permisos.

    Sería una buena idea que usted plantee este problema en los foros MSDN de SQL Server; así usted recibirá ayuda de muchas personas y su problema podrá ser de ayuda a la comunidad.

    Los foros MSDN de SQL Server están en:

    http://social.msdn.microsoft.com/Forums/es-ES/sqlserveres/threads

    ResponderEliminar
  3. Gracias gustavo. Preguntaré ahí.
    Un saludo! ;)

    ResponderEliminar

Nota: solo los miembros de este blog pueden publicar comentarios.