sql-server - una - restaurar base de datos sql server 2008
Permisos de copia de seguridad (4)
Creé un nuevo usuario en el servidor que accederá a ciertas bases de datos.
Pero cuando voy a hacer una copia de seguridad o restaurar la base de datos obtengo el error:
C: / Archivos de programa / Microsoft SQL Server / MSSQL10.MSSQLSERVER / MSSQL / Backup
No se puede acceder a la ruta o archivo especificado en el servidor. Verifique que tiene los privilegios de seguridad necesarios y que la ruta o archivo existe .....................
El error se muestra para cualquier otra ruta en mi sistema. Incluso aquellos en los que el usuario y la cuenta de servicio tienen permisos de control total.
PERO, si escribo la ruta completa y hago clic en Aceptar, se queja de que no se puede mostrar, PERO realiza una copia de seguridad o restaura la base de datos. Simplemente no muestra la vista de árbol para la ruta.
Si realizo la operación usando la cuenta sa
, el cuadro de diálogo muestra todas las rutas sin quejarse.
PD: usuario ya agregado a la función db_backoperator
.
¿Qué permisos se requieren?
¿Se está conectando usando un inicio de sesión de autenticación de SQL o un inicio de sesión de Windows? Si un inicio de sesión de autenticación SQL, ¿cómo le está dando a ese inicio de sesión de SQL "permisos de control total" en una carpeta en Windows? Windows no tiene idea de los inicios de sesión de autenticación SQL que haya creado en SQL Server. Por favor, muéstrenos exactamente lo que quiere decir con "Creé un usuario en el servidor", ¿qué usuario? ¿que servidor? SQL Server o Windows?
Como solución alternativa, también puede crear un procedimiento almacenado que se ejecute como sa
o un inicio de sesión de Windows que forme parte del grupo sysadmin, y otorgar a este usuario con privilegios menores la capacidad de ejecución. Sin embargo, pude hacer una copia de seguridad de una base de datos al agregar un usuario peón sin ningún otro permiso y simplemente agregarlo al rol db_backupoperator
:
CREATE LOGIN peon WITH PASSWORD = ''foo'', CHECK_POLICY = OFF;
GO
CREATE DATABASE splunge;
GO
USE splunge;
GO
CREATE USER peon FROM LOGIN peon;
GO
EXEC sp_addrolemember ''db_backupoperator'', ''peon'';
GO
EXECUTE AS USER = ''peon'';
GO
BACKUP DATABASE splunge
TO DISK = ''C:/tmp/splung.bak'' -- change this path obviously
WITH INIT, COMPRESSION;
GO
REVERT;
GO
Por lo tanto, validaría que la cuenta de servicio de SQL Server tenga suficientes privilegios para escribir en la ruta en cuestión. Sé que dijiste que este era el caso, pero como he demostrado, esto no parece ser un problema para el usuario peon
sino más bien la capacidad del motor subyacente para escribir en el sistema de archivos. Si prueba el comando de copia de seguridad anterior sin agregar peon
a la función db_backupoperator
, obtendrá este error (no le permite acercarse al comando de copia de seguridad real ni verificar los permisos en el disco):
Msg 262, Level 14, State 1, Line 1 BACKUP DATABASE permission denied in database ''splunge''. Msg 3013, Level 16, State 1, Line 1 BACKUP DATABASE is terminating abnormally.
Si se trata de un inicio de sesión de Windows, valide que, de hecho, el usuario tenga permisos de escritura en la carpeta en cuestión. Pruebe con una carpeta diferente que no sea la jerarquía en C:/Program Files/...
y no intente escribir directamente en la raíz (por ejemplo, C:/file.bak
).
Supongo que esto es un problema con la autenticación de Windows y la seguridad integrada. SQL Server a veces suplanta al usuario que inicia sesión. Intente agregar permisos de Windows ACL para el usuario de Windows con el que está iniciando sesión.
db_backupoperator es una función de base de datos, no una función de servidor o un permiso de Windows. Solo concede al usuario el acceso necesario a la base de datos para realizar una copia de seguridad. No otorga ningún derecho sobre la estructura de archivos del servidor, que son necesarios para crear realmente el archivo de respaldo.
IIRC, para acceder a la estructura de archivos para hacer una copia de seguridad, el usuario ya debe tener derechos de Windows / dominio para acceder a ella, o pedirle a la función sysadmin del servidor que recoja los derechos de acceso de Windows del SQL Server.
Además, para restaurar una base de datos, el usuario necesitará el Servidor dbcreator .
Estoy ejecutando Windows 10 (x64), SQL Server Express 2014, tratando de restaurar una copia de seguridad en una base de datos x86 SQL Server 2005 para poder utilizar los datos y ayudar a resolver un error en nuestra aplicación. Me encontré con el mismo escenario con permisos al hacer una copia de seguridad y restaurar un archivo .bak.
Lo mismo aquí, soy un administrador en mi PC, asumí (mi error) que el servicio de SQL Server se ejecutaba en mi cuenta de Windows (porque iniciaría sesión en SQL Management con mis credenciales de Windows).
Lo que hice fue ir a Servicios en Windows, encontrar SQL Server, hacer clic derecho en Propiedades, detener el servicio, luego ir a la pestaña LogOn y cambiar "Iniciar sesión como" a "Cuenta del sistema local" y marcar la casilla que dice "Permitir que el servicio interactúe con el escritorio". Comencé el servicio y estaba en camino.
Como mi entorno está cerrado, solo para el desarrollo, esta fue una solución rápida para mí. Debo advertirte, ¡esta no es una mejor práctica para los usuarios finales! Solo para nosotros desarrolladores.