CREAR ARCHIVO encontró el error 5 del sistema operativo (acceso denegado).

13

Estoy tratando de ejecutar el siguiente script en SQL Server Management Studio:

USE [master]
GO

CREATE DATABASE [test1] ON PRIMARY (
  NAME = N'test1', 
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1.mdf',
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB)
LOG ON (
  NAME = N'test1_log',
  FILENAME =
    N'C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA\test1_log.ldf',
  SIZE = 164672KB , MAXSIZE = 2048GB , FILEGROWTH = 10%)

Pero recibo el error:

El mensaje 5123, Nivel 16, Estado 1, Línea 2
CREAR ARCHIVO encontró el error 5 del sistema operativo (acceso denegado)
al intentar abrir o crear el archivo físico
'C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA \ test1.mdf '.

Msg 1802, Nivel 16, Estado 4, Línea 2
CREATE DATABASE falló. Algunos de los nombres de archivos en la lista no se pudieron crear. Verifique los errores relacionados.

Ya tengo todos los permisos de rol para mi usuario, ¿alguna idea sobre lo que está mal?

thiagocfb
fuente
1
¿"Su usuario" o el usuario con el que se ejecuta su servicio? El proceso del servidor intentará crear ese archivo, no su usuario.
1
¿Podría verificar si el archivo ya existe? (Quizás de intentos anteriores) Si existe y es abierto por SqlServer, se obtiene un error de acceso denegado
1
Servicios-> Servidor SQL-> Doble clic-> Segunda página de pestaña (¿Conexión?)
1
@thiagocfb Inicio-> Ejecutar-> services.msc Desplácese por la lista de servicios hasta que encuentre SQL Server. Haga
clic derecho-
1
Además, ¿has intentado simplemente ejecutar un plano CREATE DATABASE [test1]; GO?
swasheck el

Respuestas:

19

Recibes un error de permisos. La cuenta que ejecuta SQL Server no tiene los derechos necesarios sobre la carpeta que contendrá los archivos de la base de datos.

Debe dar a la cuenta que ejecuta SQL Server (no su cuenta) el control total de C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL10.SQLEXPRESS \ MSSQL \ DATA.

mrdenny
fuente
Sí, ¡el problema era el usuario que estaba ejecutando el servicio! :) Gracias !
thiagocfb
En general, el servicio de Windows SQL Server se ejecuta bajo Network Servicecuenta. Por lo tanto, los derechos apropiados tendrán que modificarse en los directorios respectivos para esta cuenta si ese es el caso también en su PC.
RBT
3
Al menos cuando se ejecuta la interfaz gráfica de usuario de SSMS como usuario no administrador, para la operación de conexión inicial , el ID de usuario que ejecuta SSMS TAMBIÉN debe tener permisos en esa carpeta. Ejecutar SSMS como administrador DURANTE EL ENLACE INICIAL resuelve esto, y luego puede ejecutarlo como no administrador más tarde sin problemas.
tbone
6

Según nuestro hilo de comentarios, parece que te has puesto un poco de lado durante la instalación. El instalador le permite elegir su directorio de datos predeterminado y ( supongo ) establece los permisos apropiados en ese directorio para la cuenta de servicio que especificó.

En su CREATE DATABASEdeclaración está especificando una ubicación, pero ¿fue esa ubicación la que se especificó en la configuración original? ¿Ha cambiado la cuenta de servicio?

Una forma de probar esto es simplemente ejecutar un genérico

CREATE DATABASE [test1]; 
GO

Si obtiene el mismo error, entonces tal vez la cuenta de servicio ha cambiado o algo sobre los permisos NTFS ha cambiado.

Una ruta de resolución (también basada en una cadena de comentarios) es para confirmar que el servicio que ejecuta SQL Server tiene permisos R / W en la ruta que está especificando. Para hacer esto:

Inicio-> Ejecutar-> services.msc-> desplácese por la lista de servicios hasta que encuentre SQL Server-> clic derecho-> propiedades-> pestaña Iniciar sesión

Ahora ve y asegúrate de que la cuenta tenga el permiso apropiado en ese directorio para hacer lo que necesita hacer.

swasheck
fuente
2

Parece que hay un número incorrecto de espacios en la ruta proporcionada, por lo que no coincide con el árbol de carpetas.
El servidor SQL no creará una ruta no existente.

Editar :
tu publicación original dice:

...\Microsoft SQL         Server\...
...\Microsoft SQL     Server\...

y supongo que estos no son caminos existentes, y como están rodeados de dos puntos, es relevante cuántos espacios hay.

Luis Siquot
fuente
número incorrecto de espacios? dónde ? si copio y pego esta ruta en mi explorador de archivos, alcanzará esta carpeta muy bien @ __ @
@thiagocfb así que cuando abres la ruta ¿ves esos archivos?
swasheck
en su "pegar" tiene 9 caracteres en un caso y 5 caracteres en el otro, entre Microsoft SQLy Server, y esto fue extraño para mí porque normalmente debería ser solo un carácter de espacio. No es visible ahora porque tu publicación fue editada por @marc_s
@swasheck Veo varios archivos .mdf, no test1.mdf, es el que estoy tratando de crear con esta consulta
@Luis Siquot oh ya veo, debe haber sido un error mío al configurar la consulta para que se muestre como código, ¡gracias por el aviso!
0

El script anterior que publica en su sección de preguntas es correcto. Es posible que la ruta del archivo que menciona en FILENAME sea incorrecta.

Por favor, use el script que se proporciona a continuación. Simplemente funciona, luego asegúrese de la ruta del archivo que utiliza en su secuencia de comandos.

Use Master
go

CREATE DATABASE test1 ON  PRIMARY 
( NAME = N'test1', 
  FILENAME = N'D:\test1.mdf', 
  SIZE = 70656KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1014KB)
 LOG ON 
( NAME = N'test1_log', 
  FILENAME = N'D:\test1_log.ldf', 
  SIZE = 164671KB , MAXSIZE = 1048GB , FILEGROWTH = 10%)
GO
JP Chauhan
fuente