Acceso denegado al adjuntar una base de datos

Estoy usando la edición para desarrolladores de SQL Server 2008. Estaba intentando adjuntar la base de datos AdventureWorks2008.

Cuando intenté adjuntar, recibí un error de “acceso denegado”. De acuerdo con el registro de eventos, vino del O / S:

Error al abrir: no se pudo abrir el archivo D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf para el número de archivo 0. Error del sistema operativo: 5 (Acceso denegado).

Pensé “problema NTFS”, pero el sistema (y yo) hemos modificado el acceso a ambos archivos.

Descubrí que puedo adjuntar correctamente la base de datos si inicio sesión como sa, pero mi cuenta de usuario no funcionará.

Soy un miembro del grupo de administradores locales en mi máquina, y estoy en la función sysadmins en la instancia de SQL Server.

¿Alguna idea de por qué tuve que iniciar sesión como sa?

Ejecute SQL Server Management Studio como administrador. (clic derecho-> ejecutar como administrador) que se encargó de todas las rarezas en mi caso.

SQL SRV EXPRESS 2008 R2. Windows 7

Gracias por todos los comentarios. Algunos de ustedes me ayudaron a llevarme a la respuesta. Esto es lo que encontré:

Era un problema de permisos NTFS, y no un problema de SQL. Además, parece una especie de error (y es repetible).

El problema: la cuenta que estaba usando tenía un control total de los permisos NTFS para los archivos mdf y ldf. Sin embargo, tenía esos permisos a través de la membresía grupal (el grupo de administradores locales tenía permisos y mi cuenta es miembro de administradores locales). (Verifiqué los permisos)

Si trato de hacer la conexión, me conecto a SQL Server como yo (donde estoy en el grupo de administradores), falla con el problema NTFS.

Sin embargo, si concedo los mismos permisos de archivo que el grupo de administración local tiene directamente a mi cuenta de dominio, entonces puedo adjuntar sin problemas.

(Ah, y sí, revisé los grupos locales en esta máquina y verifiqué que mi cuenta de dominio es efectivamente un miembro del grupo de administradores locales).

Por lo tanto, parece que el error ocurre porque algún código (ya sea en SQL Server o Management Studio) comprueba los permisos que posee la cuenta de usuario, pero no llega a verificar los permisos de grupo que hereda la cuenta de usuario.

Eso me suena raro, pero puedo reproducirlo una y otra vez, así que he llegado a la conclusión de que es la respuesta.

Actualización: informé de esto como un error: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited

Me gustaría agregar información adicional a las respuestas que se publicaron.

Tenga cuidado al desconectar la base de datos porque el usuario de Windows que ha iniciado sesión se convierte en el único usuario con permisos para el archivo .mdf. Los permisos originales que tenía el archivo .mdf que incluía el usuario SQLServerMSSQLUser$$ y la cuenta de Administradores se sobrescribía con el usuario de Windows en el que estaba conectado (no el usuario del servidor sql). Boom, todos los permisos han desaparecido así. Haga lo que otros han dicho y haga clic derecho en su archivo .mdf y vuelva a verificar los permisos.

Me encontré con este problema porque utilicé SSMS para conectarme a la base de datos (no importa qué cuenta de servidor SQL) y desconecté la base de datos. Después de hacerlo, mi usuario de Windows era el único que tenía permisos para el archivo .mdf. Luego, cuando intenté adjuntar el archivo db utilizando la cuenta sa, arrojó el error “acceso denegado”.

Para mantener intactos los permisos originales, debe desconectar la base de datos, luego desconectarla y, a continuación, adjuntarla en ese orden de la siguiente manera:

 USE [master] GO -- kick all users out of the db ALTER DATABASE mydb SET SINGLE_USER WITH ROLLBACK IMMEDIATE GO -- Take the Database Offline ALTER DATABASE mydb SET OFFLINE WITH ROLLBACK IMMEDIATE GO -- detach the db EXEC master.dbo.sp_detach_db @dbname = N'mydb' GO 

Agregue permisos a la carpeta donde está su archivo .mdf .

Verifique este nombre: NT Service\MSSQLSERVER

Y cambie la Location a su nombre de servidor.

Este problema es causado por UAC (Control de cuentas de usuario), ¿no es así? Aunque su cuenta de usuario es miembro del grupo Administradores, el UAC en Windows 7 no le permite hacer cosas de administrador a menos que ejecute progtwigs “como administrador”. No es un error real en SQL Server o Management Studio o lo que sea. (Aunque posiblemente podría conocer el problema y pedirle permisos elevados en lugar de solo quejarse del “error 5”).

Ejecute SQL Server Management Studio como administrador. (clic derecho-> ejecutar como administrador) funcionó para mí con Windows 7 – SQL server 2008 R2

Una base de datos SQL2005 se puede adjuntar de esta manera en Windows 7:

 start menu > all program > Microsoft sql server 2005 > sql server management studio > right click > run as administrator > click ok 

Y luego la base de datos adjunta se completó con éxito.

Cuando inicia sesión como sa (o cualquier cuenta de servidor Sql), está funcionando como la cuenta de servicio de SQL Server, cuando inicia sesión como usted, tiene los permisos de su cuenta. Por algún motivo, no tiene el acceso adecuado a los archivos, pero sí la cuenta de servicio.

El usuario sa utiliza las cuentas NTFS SQLServerMSSQLUser$$ y SQLServerSQLAgentUser$$ para acceder a los archivos de la base de datos. Es posible que desee intentar agregar permisos para uno o ambos usuarios.

No sé si resuelve tu problema ya que dices que no tienes problemas con el usuario sa , pero espero que ayude.

Conmigo – Ejecutando en la ventana 8 – Haga clic derecho en SQL Server Manager Studio -> Ejecutar con administrador. -> adjuntar ningún problema

se puede arreglar fácil pero radicalmente, solo vaya a la carpeta donde ha guardado el archivo mdf . seleccione el archivo-> haga clic derecho-> haga clic en las propiedades y otorgue permisos completos al archivo para la seguridad del usuario conectado .

Encontré esta solución: haga clic con el botón derecho en la carpeta donde almacena su archivo .mdf -> haga clic en Propiedades -> elija la pestaña Seguridad, haga clic en Editar … y dele el control completo. ¡Espero que esto ayude!

Cada vez que me he encontrado con este problema fue al intentar adjuntar una base de datos que está en un directorio diferente del directorio de base de datos predeterminado que está configurado en el servidor SQL.

Recomiendo encarecidamente que, en lugar de utilizar permisos en varios directorios y cuentas, simplemente mueva su archivo de datos al directorio que el servidor SQL espera encontrar.

Solo quería agregar esta información también.

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

Solución

Obtiene este error porque dos inicios de sesión diferentes desconectaron y conectaron las operaciones. Por lo tanto, los archivos, cuando se separaron, eran propiedad del primer inicio de sesión, pero el archivo adjunto falló porque el inicio de sesión que se utilizó no era el propietario de los archivos mdf y ldf.

Cuando separamos los archivos de la base de datos, el propietario se convierte en la persona que hizo el comando de separación, por lo que para resolver el problema debemos cambiar o agregar el otro inicio de sesión como propietario de los archivos mdf e ldf.

Haga clic derecho en el archivo “filename.mdf” y seleccione propiedades para verificar los permisos del archivo mdf. Aquí podemos ver que solo una cuenta tiene permiso para el archivo “filename.mdf” porque esa era la cuenta que se utilizó para separar la base de datos.

Para resolver este problema, haga clic en el botón Agregar … para agregar el otro inicio de sesión o cualquier otro inicio de sesión necesario y otorgue al inicio de sesión control total. También debe hacer esto para el archivo “ldf”. Una vez que haya completado esta tarea, haga clic en el botón Aceptar. (Tenga en cuenta que para otras versiones del sistema operativo puede tener una opción Editar, haga clic en este primero y luego verá la opción Agregar …).

Por lo que vale para cualquiera que tenga la variación particular de este problema que tuve:

  • SQL Express 2008
  • Visual Studio 2010 Premium

A través del menú de contexto de la carpeta App_data, había creado una base de datos SQL Express para depuración. La cadena de conexión (utilizada por NHibernate) fue la siguiente:

 Server=.\SQLExpress; AttachDbFilename=|DataDirectory|DebugDatabase.mdf; Database=DebugDatabase; Trusted_Connection=Yes; 

Esto me dio el mismo error de “Acceso denegado” en el archivo de la base de datos. Traté de dar a varios usuarios Control total para la carpeta y los archivos, en un punto incluso para “Todos”. Nada ayudó, así que eliminé los permisos agregados nuevamente.

Lo que finalmente resolvió fue abrir el Explorador de Servidor en Visual Studio, luego conectarse al MDF y separarlo nuevamente. Después de hacerlo, mi aplicación web podía acceder a la base de datos sin problemas.

PD. Los créditos van a esta publicación de blog que encontré mientras buscaba en Google este problema en particular, lo que desencadenó la idea de adjuntar / separar la base de datos para resolver el problema.

Esto suena como permisos NTFS. Por lo general, significa que su cuenta de servicio de SQL Server tiene acceso de solo lectura al archivo (tenga en cuenta que SQL Server usa la misma cuenta de servicio para acceder a los archivos de la base de datos, independientemente de cómo inicie sesión). ¿Estás seguro de que no cambiaste los permisos de la carpeta entre iniciar sesión como tú e iniciar sesión como sa? Si te desconectas e intentas de nuevo, ¿sigue teniendo el mismo problema?

Tuve el mismo problema al adjuntar una base de datos. No era un problema de SQL, era un problema de cuenta. Vaya al control del panel / Configuraciones de control de cuentas de usuario / Establecer a “nunca notificar”. Finalmente, reinicie la computadora y funcionó para mí.

Adjunté el archivo mdf haciendo clic con el botón derecho en la base de datos y eliminando el archivo de registro AdventureWorks2012_Data_log.ldf en el asistente. El archivo mdf se colocó en la siguiente ubicación

  C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA 

El método anterior me ayudó a resolver el problema.

Estaba leyendo esta página y tienen una frase interesante allí:

Precaución: Sea muy selectivo al agregar usuarios a estos roles. Por ejemplo, sysadmin se asigna a dbo en cada base de datos y es el equivalente de iniciar sesión utilizando la cuenta sa.

Por supuesto, también tienen esto:

Permisos que se otorgan a usuarios y roles y son específicos de la base de datos. Todos los permisos son acumulativos, con la excepción de un DENY. Un permiso denegado en un nivel de usuario o en un nivel de función anula el mismo permiso otorgado a través de otras pertenencias de funciones, con la excepción de la función de servidor fijo sysadmin. (Un administrador del sistema conserva todos los permisos, incluso si un rol del que es miembro tiene un permiso de DENEGACIÓN).

Entonces, si usted es un administrador de dominio y en el grupo sysadmin ‘de SQL, el mundo debería ser su crustáceo.

Por supuesto, según Microsoft, debería echar un rápido vistazo a estas dos páginas:
Enlace a los prerrequisitos de la base de datos

Enlace a instalar bases de datos

Estás siendo malo e intentas conectarlos manualmente 🙂 En serio, ¿tienes todos los requisitos previos para la base de datos AdventureWorks2008?
Sospecho que este es solo otro caso de rareza / borde de Microsoft, pero podría estar equivocado.

Moví una base de datos mdf de la carpeta de datos predeterminada a mi carpeta asp.net app_data y me encontré con este problema al intentar volver a poner la base de datos en línea.

Comparé la configuración de seguridad de las otras bases de datos de archivos en la ubicación original con los archivos movidos y noté que MSSQL $ SQLEXPRESS no tenía permisos asignados a los archivos en su nueva ubicación. Agregué control total para “NT SERVICE \ MSSQL $ SQLEXPRESS” (debe incluir NT SERVICE) y se adjuntó muy bien.

Parece que la carpeta de datos original tiene estos permisos y los archivos lo heredan. Mueva los archivos y la herencia se rompe, por supuesto.

Revisé el archivo mdf de otro proyecto que creé directamente en su carpeta app_data. no tiene permisos de MSSQL $ SQLEXPRESS. Hmmm. Me pregunto por qué a SQL Express le gusta uno pero no el otro.

enter image description here

 USE [master] GO CREATE DATABASE [DataBasename] ON ( FILENAME = N'C:\data\DataBasename.mdf' ) FOR ATTACH GO 

cambiar a PARA ADJUNTAR -> PARA ATTACH_FORCE_REBUILD_LOG

 USE [master] GO CREATE DATABASE [DataBasename] ON ( FILENAME = N'C:\data\DataBasename.mdf' ) FOR ATTACH_FORCE_REBUILD_LOG GO 

De hecho, se trata de permisos NTFS y un error extraño en SQL Server. No estoy seguro de que el informe de fallas anterior sea exacto, o puede referirme a un error adicional.

Para resolver esto en Windows 7, ejecuté SQL Server Management Studio normalmente (no como administrador). Luego intenté Adjuntar el archivo MDF. En el proceso, utilicé la UI en lugar de pegar en el camino. Noté que el camino estaba separado de mí. Esto se debe a que el usuario de MS SQL Server (SQLServerMSSQLUser $ machinename $ SQLEXPRESS) que el software agrega para usted no tiene permisos para acceder a la carpeta (en este caso, una carpeta en las profundidades de mis propias carpetas de usuario).

Al pegar el camino y proceder se obtiene el error anterior. Entonces, di los permisos de usuario de MS SQL Server para que comenzaran desde el primer directorio desde el que se denegó (mi carpeta de usuario). Inmediatamente cancelé la operación de propagación porque puede llevar una eternidad, y de nuevo solicité permisos de lectura para la siguiente subcarpeta necesaria, y dejo que eso se propague por completo.

Finalmente, di al usuario de MS SQL Server permisos de modificación a los archivos .mdf y .ldf para el db.

Ahora puedo adjuntar a los archivos de la base de datos.

Recibí este error como sa. En mi caso, la seguridad no importaba. Agregué todo el control total a los archivos mdf y ldf, y adjunté todo salió bien.

Si ejecuta el servidor sql 2012, puede obtener este error al intentar adjuntar una versión anterior de un archivo mdf. ex un archivo mdf del servidor sql 2008.

He resuelto el problema simplemente con mover el archivo .mdf que desea adjuntar a la carpeta pública, en mi caso lo moví a la carpeta users / public. Luego lo adjunto desde allí sin ningún problema. Espero que esto ayude.

Para aquellos que no pudieron solucionar el problema con las otras soluciones aquí, la siguiente solución funcionó para mí:

Vaya a su carpeta “DATOS” en la instalación de su servidor SQL, haga clic con el botón derecho, propiedades, pestaña de seguridad y agregue permisos de control total para el usuario “SERVICIO DE RED”.

http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/

(El enlace anterior es para SQL 2005, pero esto me solucionó una instalación de SQL 2008 R2).

Alguna información adicional: este problema apareció después de reemplazar un disco duro secundario (en el que estaba la instalación de SQL). Copié todos los archivos y restauré la letra de la unidad original al nuevo disco duro. Sin embargo, los permisos de seguridad no se copiaron. Creo que la próxima vez usaré un método mejor para copiar datos.

En mi caso, lo que resolvió el problema fue el siguiente:

 USE [master] GO CREATE DATABASE [AdventureWorks2008R2] ON ( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf') FOR ATTACH_REBUILD_LOG 

Copie la base de datos en otra carpeta y adjunte o inicie sesión SQLServer con “Autenticación de Windows”

enter image description here

Tuve el mismo problema cuando volví a conectar la base de datos después de separarla y mover archivos ldf y mdf de la unidad C a la F.

Para solucionarlo, tuve que agregar el DERECHO DE PROPIETARIO a ambos archivos y le di el control total sobre ellos en la pestaña Seguridad del cuadro de diálogo Propiedades.

Luché con SSMS (2016) para adjuntar la base de datos AdventureWorks2012. Pero tuvo éxito con este código, tomado de un artículo de CodeProject por Mohammad Elsheimy :

 CREATE DATABASE AdventureWorks2012 ON PRIMARY (FILENAME='D:\Dev\SQL Server\AdventureWorks2012.mdf') FOR ATTACH; 
    Intereting Posts