Error del sistema operativo SQL Server 5: "5 (acceso denegado)"

153

Estoy empezando a aprender SQL y tengo un libro que proporciona una base de datos para trabajar. Estos archivos a continuación están en el directorio pero el problema es que cuando ejecuto la consulta, me da este error:

Msg 5120, Nivel 16, Estado 101, Línea 1 No se puede abrir el archivo físico "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf". Error del sistema operativo 5: "5 (acceso denegado)".

   CREATE DATABASE AP
      ON PRIMARY (FILENAME = 'C:\Murach\SQL Server 2008\Databases\AP.mdf')
      LOG ON (FILENAME =     'C:\Murach\SQL Server 2008\Databases\AP_log.ldf')
      FOR ATTACH
    GO

En el libro, el autor dice que debería funcionar, pero no está funcionando en mi caso. Busqué pero no sé exactamente cuál es el problema, así que publiqué esta pregunta.

dijai jijfs
fuente
Si el archivo de copia de seguridad ya existe, asegúrese de que no tenga el atributo "solo lectura", además de asegurarse de que el servicio tenga permiso de escritura.
jumxozizi

Respuestas:

133

La cuenta de servicio del motor de base de datos de SQL Server debe tener permisos para leer / escribir en la nueva carpeta.

Mira esto

Para solucionarlo, hice lo siguiente:

Se agregó el grupo de administradores a los permisos de seguridad de archivos con control total para el archivo de datos (S :) y el archivo de registro (T :).

Adjunto la base de datos y funciona bien.

ingrese la descripción de la imagen aquí

ingrese la descripción de la imagen aquí

Rahul Tripathi
fuente
44
A veces, el servidor SQL se ejecutará en un grupo de usuarios diferente que no seaAdministrators Group
JDandChips
57
Además, puede ayudar iniciar SQL Server Management Studio como administrador, no solo el servicio del servidor.
david.barkhuizen
1
Para mí, la solución en el siguiente enlace funcionó: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Para mí, el cambio de la cuenta del Servicio del Agente SQL Server a Sistema local funcionó.
singhm0077
22
Si su instancia de SQL Server se ejecuta con una cuenta de servicio (por ejemplo, la mía MSSQL$SQLEXPRESS), puede que no sea obvio que necesite agregar la cuenta a la lista de permisos de la carpeta como:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Una publicación anterior, pero aquí hay un paso a paso que funcionó para SQL Server 2014 que se ejecuta en Windows 7:

  • Panel de control ->
  • Sistema y seguridad ->
  • Herramientas administrativas ->
  • Servicios ->
  • Haga doble clic en SQL Server (SQLEXPRESS) -> clic derecho, Propiedades
  • Seleccione la pestaña Iniciar sesión
  • Seleccione "Cuenta del sistema local" (el valor predeterminado era una cuenta obtusa del sistema de Windows)
  • -> OK
  • clic derecho, detener
  • clic derecho, Inicio

Voilá!

Creo que la configuración de la cuenta de inicio de sesión puede haber sido una opción en la instalación, pero de ser así, no era la opción predeterminada y era fácil pasarla por alto si aún no estaba al tanto de este problema.

MickeyfAgain_BeforeExitOfSO
fuente
55
He probado muchas opciones pero tu respuesta está funcionando bien. Gracias mickeyf.
vicky
2
Funciona para SQL Server 2014 en Win 10 también. Gracias.
Johan Foley
77
-1 Hacer esto va en contra de la idea de configurar este usuario en primer lugar. Es una característica de seguridad, y hacer esto lo evita.
NullUserException
2
WOW ... No puedo creer que la gente haya saltado a esta "respuesta" ... Esto podría crear un gran problema de seguridad ... De lo contrario, no habría una razón para establecer ese usuario al principio, ¿verdad? De todos modos, es una "solución" para las personas que no consideran esto como un problema de seguridad en sus casos.
curiousBoy
2
¡Cualquiera que piense que la seguridad es más importante que hacer algo de trabajo puede simplemente apagar su servidor SQL!
Ivan
44

Para evitar el problema de acceso denegado, inicié SSMS como administrador y eso me permitió adjuntar una base de datos desde mi disco local. La base de datos se creó en otra instancia de SQL y Windows.

JayKayOf4
fuente
3
esto fue para mí ... Solo estoy mirando una configuración totalmente local y obtuve este problema, en Windows 10 Home, y anteriormente había hecho el "propietario" de mdf y ldf por otra razón, tal vez relevante
Mike M
3
Esto también funciona para mí. Estoy usando Windows 10 y Microsoft SQL Server 2012. Ejecuté SQL Management Studio como administrador y luego pude adjuntar la base de datos Adventure Work Sample.
arsho
1
Esto también resolvió el problema con Windows 10 Pro cuando se ejecuta en un entorno de dominio de trabajo.
PerPlexSystem
Mismo: Domain Env, SSMS 2017.x, Win10 Pro. Separado de otra máquina y conectado a una máquina nueva.
TravisWhidden
44

Este es un problema relacionado con Windows en el que SQL Server no tiene el permiso apropiado para la carpeta que contiene el archivo .bak y, por lo tanto, este error.

La solución más sencilla es copiar su archivo .bak a la ubicación de copia de seguridad SQL predeterminada que tiene todos los permisos necesarios. No necesita jugar con nada más. En SQL SERVER 2012 , esta ubicación es

D:\Program Files\Microsoft SQL Server\MSSQL11.MSSQLSERVER\MSSQL\Backup (SQL 2012)
C:\Program Files\Microsoft SQL Server\MSSQL12.MSSQLSERVER\MSSQL\Backup (SQL 2014)
C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Backup (SQL 2016)
Hammad Khan
fuente
@AdamLevitt ¿tiene varias versiones de SQL instaladas o instaladas previamente? ¿Estás seguro de que lo estás colocando en la ubicación correcta?
Hammad Khan
1
@hmd, gracias. La solución fue exportar al directorio de copias de seguridad de 2012.
Adam Levitt
1
Esta solución también funciona en SQL Server 2014. La ruta es C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
¡Esta debería ser la respuesta!
Axel
Tuve un problema similar con MS SQL Express 2016, la solución fue poner mi archivo .mdf en la carpeta: C: \ Archivos de programa \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
14

Tuve este problema Simplemente ejecute SQL Server como administrador

Aref Bozorgmehr
fuente
1
'Ejecutar como administrador' como en UAC funcionó para mí. No necesitaba iniciar sesión como administrador de la cuenta (sin embargo, estoy en el grupo de administradores).
Mike Cheel
1
Sí, hice lo mismo, corrí como administrador y todo salió bien.
Clyde
12

Sí, es correcto. Primero debe averiguar su cuenta de servicio de sqlserver, puede verla en el Administrador de tareas cuando presiona ctrl + alt + eliminar al mismo tiempo; Luego, debe otorgar el privilegio de lectura / escritura de "C : \ Murach \ SQL Server 2008 \ Bases de datos "a la cuenta de servicio.

Tim
fuente
10

El problema se debe a la falta de permisos para que SQL Server acceda a los archivos mdf y ldf. Todos estos procedimientos funcionarán:

  1. puede cambiar directamente la cuenta de usuario de inicio del servicio MSSQLSERVER, con la cuenta de usuario que tiene mejores privilegios en los archivos. Luego intente adjuntar la base de datos.
  2. O puede asignar al usuario al archivo en la pestaña de seguridad de las propiedades de los archivos mdf y ldf con los privilegios de lectura y escritura marcados.
  3. Inicie con la cuenta de administrador de Windows, abra SQL Server con la opción Ejecutar como administrador e intente iniciar sesión con la autenticación de Windows y ahora intente adjuntar la base de datos.
Chandra Sekhar
fuente
9

Resuelvo este problema agregando Full controlpermiso para ambos .mdfy .ldfarchivos para el Usersgrupo.

Sayed Abolfazl Fatemi
fuente
5

Para mí, se resolvió de la siguiente manera con el estudio de administración de SQL Server: inicie sesión como administrador (inicié sesión como autenticación de Windows), adjunte el archivo mdf (haga clic con el botón derecho en Base de datos | adjuntar | Agregar). usuario normal

Rueda giratoria
fuente
4

Los permisos reales del servidor no serán importantes en este momento; todo se ve bien. SQL Server en sí mismo necesita permisos de carpeta.
dependiendo de su versión, puede agregar permisos SERVERNAME $ MSSQLSERVER para tocar su carpeta. De lo contrario, debe estar en el directorio predeterminado de BACKUP (ya sea donde lo instaló o predeterminado en c: \ programfiles (x) \ MSSQL \ BACKUP.

Claudia
fuente
2

Incluso si sigue los siguientes pasos, PODRÍA recibir el mismo mensaje de error.

1. login as SA user (SSMS)
2. Edit the file permissions to say "everyone" full access (windows folder)
3. Delete the Log file (Windows Exploring  (this was what I had done per advise from some msdn forum) 

Todavía tengo el error de permiso, pero luego noté que en la pantalla Adjuntar, la sección inferior TODAVÍA mostraba el archivo LOG, y el mensaje de error seguía siendo el mismo.

Espero que esto ayude a alguien que hizo lo mismo.

Tom Stickel
fuente
0

Solución muy simple.

  1. Inicie sesión con el administrador del sistema
  2. copie sus archivos mdf y ldf en "C: \ Archivos de programa (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" donde se encuentran todos los demás archivos de datos.
  3. Ahora adjunte desde allí funcionará
AmitykSharma
fuente
1
No debe almacenar datos en el directorio de archivos del programa. La ubicación predeterminada debe cambiarse cuando instala SQl Server
OrangeKing89
0

Utilicé Entity Framework en mi aplicación y tuve este problema, configuré cualquier permiso en carpetas y servicios de Windows y no funcionó, después de eso, inicio mi aplicación como administrador (haga clic derecho en el archivo exe y seleccione "ejecutar como administrador") y eso funciona multa.

Ali Yousefi
fuente
0

Si obtiene este error en un .MDFarchivo en la APP_DATAcarpeta (o donde sea que lo coloque) para un proyecto de Visual Studio, la forma en que lo hice fue simplemente copiar los permisos de la DATAcarpeta existente aquí (estoy usando SQL Express 2014 para admitir una aplicación anterior):

C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS2014\MSSQL\DATA

(nota: su ruta de instalación real puede variar, especialmente si el nombre de su instancia es diferente)

Haga doble clic en la DATAcarpeta primero como administrador para asegurarse de que tiene acceso, luego abra las propiedades en la carpeta e imite lo mismo para la APP_DATAcarpeta. En mi caso, el usuario que faltaba era MSSQL$SQLEXPRESS2014(porque nombré la instancia SQLEXPRESS2014, el tuyo puede ser diferente). Ese también es el nombre de usuario del servicio SQL Server.

James Wilkins
fuente
0

Por alguna razón, establecer todos los permisos correctos no ayudó en mi caso. Tenía un archivo db.bakque no pude restaurar debido al 5(Access is denied.)error. El archivo se colocó en la misma carpeta que otros archivos de copia de seguridad y todos los permisos eran idénticos a otros archivos. Pude restaurar todos los otros archivos excepto este db.bakarchivo. Incluso intenté cambiar el usuario de inicio de sesión del servicio de SQL Server, sigue siendo el mismo resultado. He intentado copiar el archivo sin efecto.

Luego intenté crear un archivo idéntico ejecutando

type db.bak > db2.bak

en lugar de copiar el archivo Y voila funcionó! db2.bakrestaurado con éxito

Sospecho que 5(Access is denied.)MS SQL puede informar erróneamente de otros problemas al leer el archivo de copia de seguridad .

ps_ttf
fuente
0

En Linux, fui a la /var/opt/mssql/data/carpeta y abrí una terminal con sudo, luego, cambié mis permisos de archivo * .mdf y * .ldf como se muestra a continuación en el que reemplaza yourDBcon el nombre del archivo de la base de datos y el nombre myUserde usuario actualmente registrado:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Después de eso, se volvió a conectar sin ningún problema.

muhammad tayyab
fuente
0

Significa que el usuario de inicio de sesión SSMS no tiene permiso en el archivo .mdf. Así es como me ha funcionado:

Abrí el SSMS (Ejecutar como administrador) e inicie sesión como usuario administrador, haga clic con el botón secundario en la base de datos, haga clic en Agregar, seleccione el archivo .mdf, haga clic en Aceptar. Hecho.

Pez de colores
fuente