2012-04-28 30 views
22

Creé un nuevo usuario en el servidor que accederá a ciertas bases de datos.Permisos de copia de seguridad

Pero cuando voy a la copia de seguridad o restaurar la base de datos me sale el error:

C:\Program Files\Microsoft SQL Server\MSSQL10.MSSQLSERVER\MSSQL\Backup
Cannot access the specified path or file on the server. Verify that you have the necessary security privileges and that the path or file exists.....................

El error de muestra para cualquier otro camino 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: Ya agregué el usuario al rol db_backoperator.

¿Qué permisos son requeridos?

Respuesta

13

¿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, era capaz de copia de seguridad de una base de datos mediante la adición de un usuario peón con ningún otro permiso en absoluto y sólo añadir a la db_backupoperator papel:

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 

lo tanto, me gustaría comprobar que la cuenta de servicio de SQL Server tiene privilegios suficientes para escribe en el camino en cuestión. Sé que dijiste que este era el caso, pero como he demostrado, esto no parece ser un problema con el usuario peon, sino más bien la capacidad del motor subyacente para escribir en el sistema de archivos.Si intenta el comando backup anterior sin añadir peon al papel db_backupoperator, se obtiene este error (que no le permite llegar a ninguna parte cerca del comando real de copia de seguridad o verificar los permisos del 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 este es un inicio de sesión de Windows, luego valide que el usuario, de hecho, tenga permisos de escritura para 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).

+1

Ok. Déjenme explicar mejor: Creé un inicio de sesión, que es el control de autenticación de SQL Server, y otorgo los permisos de db_backupoperator y demás. El punto es: Puede escribir la copia de seguridad en el disco, pero no puede mostrar la estructura de archivos (la vista de árbol en el cuadro de diálogo) para el sistema, incluso las rutas que el usuario tiene permisos (el usuario de Windows conectado y la cuenta de servicio). Voy a probar su procedimiento y ver lo que obtengo ..... Gracias por el manera ... –

+0

Compruebe si su usuario puede ejecutar xp_fixeddrives, xp_dirtree y xp_fileexist; esto es lo que el diálogo hace detrás de las escenas. Personalmente, crearía un procedimiento almacenado que tomara la base de datos para hacer una copia de seguridad como argumento, y controlara la ubicación de salida en lugar de permitir que el usuario escoja el destino desde un diálogo (o use la IU en absoluto). Al cuadro de diálogo de ubicación le falta alguna funcionalidad bastante básica (como crear una carpeta) y ha sido así durante años ... –

1

Supongo que este 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.

+0

Eso sucede también cuando estoy conectado como administrador de Windows pero usando el inicio de sesión Sql de "usuario" (no el de Sa). ¿Esto tiene que ver con seguridad integrada o roles/permisos? Ese es mi problema actual en este momento, no sé dónde está el problema =/ –

12

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 debe o bien ya tienen ventanas/derechos de dominio para acceder a ella, o que tienen la función de servidor administrador de sistemas para recoger propios derechos de acceso de Windows del SQL Server.

Además, para restaurar realmente una base de datos, el usuario necesitará la función de servidor dbcreator.

+0

Agregué el diskadmin, dbcreator y serveradmin pero no funcionó. Con sysadmin funciona bien, pero no puedo permitir que ese usuario sea un administrador de sistemas. –

+0

Bueno, diskadmin y serveradmin no estaba seguro. Ver si sysadmin funciona. – RBarryYoung

1

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 ocurre 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 verificar el cuadro 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.

Cuestiones relacionadas