Estoy usando la edición de desarrollador de SQL Server 2008. Estaba tratando de adjuntar la base de datos AdventureWorks2008.
Cuando intenté adjuntar, recibí un error de "acceso denegado". Según el registro de eventos, provenía de la 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 de NTFS", pero el Sistema (y yo) tenemos acceso de modificación a ambos archivos.
Descubrí que puedo conectar con éxito la base de datos si inicio sesión como sa, pero mi cuenta de usuario no funcionará.
Soy miembro del grupo de administradores locales en mi máquina y estoy en el rol de administrador de sistemas en la instancia de SQL Server.
¿Alguna idea de por qué tuve que iniciar sesión como sa?
fuente
Respuestas:
Ejecute SQL Server Management Studio como administrador. (clic derecho-> ejecutar como administrador) que se ocupó de todas las rarezas en mi caso.
SQL SRV EXPRESS 2008 R2. Windows 7
fuente
Gracias por todos los comentarios. Algunos de ustedes ayudaron a llevarme a la respuesta. Esto es lo que encontré:
Fue un problema de permiso NTFS, y no un problema de SQL. Además, se ve un poco como un error (y es repetible).
El problema: la cuenta que estaba usando tenía permisos NTFS de control total para los archivos mdf y ldf. Sin embargo, tenía esos permisos a través de la membresía del grupo (el grupo de Administradores locales tenía permisos, y mi cuenta es miembro de administradores locales). (Verifiqué los permisos)
Si trato de adjuntar, me conecto a SQL Server como yo (donde estoy en el grupo de administradores), falla con el problema NTFS.
Sin embargo, si otorgo 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í, verifiqué los grupos locales en esta máquina, y verifiqué que mi cuenta de dominio es realmente 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) verifica 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 parece extraño, pero puedo reproducirlo una y otra vez, así que he concluido que es la respuesta.
Actualización: informé esto como un error: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited
fuente
Me gustaría agregar información adicional a las respuestas que se publicaron.
¡Tenga cuidado al separar la base de datos porque el usuario de Windows en el 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 al usuario
SQLServerMSSQLUser$<computer_name>$<instance_name>
y la cuenta de Administradores se sobrescriben por el usuario de Windows en el que haya iniciado sesión (no el usuario del servidor SQL). Boom, todos los permisos desaparecieron así como así. Haga lo que otros han dicho y haga clic derecho en su archivo .mdf y verifique 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 hacer eso, mi usuario de Windows era el único que tenía permisos para el archivo .mdf. Más tarde, cuando intenté adjuntar el db usando la cuenta sa, arrojó el error "acceso denegado".
Para mantener intactos los permisos originales, debe desconectar la base de datos, luego separarla y luego adjuntarla en ese orden de la siguiente manera:
fuente
Agregue permiso a la carpeta donde está su
.mdf
archivo.Mira este nombre:
NT Service\MSSQLSERVER
Y cambie el
Location
nombre de su servidor.fuente
SELECT servicename, service_account FROM sys.dm_server_services
.Este problema es causado por UAC (Control de cuentas de usuario), ¿no? Aunque su cuenta de usuario es miembro del grupo Administradores, el UAC en Windows 7 no le permite hacer tareas de administrador a menos que ejecute programas "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 quejarse del "error 5").
fuente
Ejecute SQL Server Management Studio como administrador. (clic derecho-> ejecutar como administrador) funcionó para mí con Windows 7 - SQL server 2008 R2
fuente
Una base de datos SQL2005 se puede adjuntar de esta manera en Windows 7:
Y luego la base de datos adjunta se completó con éxito.
fuente
Cuando inicia sesión como
sa
(o cualquier cuenta de SQL Server), está funcionando como la cuenta de servicio de SQL Server, cuando inicia sesión como usted, tiene los permisos de su cuenta. Por alguna razón, no tiene el acceso a archivos adecuado, pero la cuenta de servicio sí.fuente
SELECT servicename, service_account FROM sys.dm_server_services
Encontré esta solución: haga clic 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 total. ¡Espero que esto ayude!
fuente
El
sa
usuario usa cuentas NTFSSQLServerMSSQLUser$<computer_name>$<instance_name>
ySQLServerSQLAgentUser$<computer_name>$<instance_name>
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 su problema, ya que dice que no tiene problemas con el
sa
usuario, pero espero que ayude.fuente
Conmigo - Ejecutando en la ventana 8 - Haga clic derecho en SQL Server Manager Studio -> Ejecutar con administrador. -> adjuntar sin problemas
fuente
se puede arreglar fácilmente pero radicalmente, solo vaya a la carpeta donde ha almacenado el archivo mdf . seleccione archivo-> haga clic con el botón derecho -> haga clic en propiedades y otorgue permisos completos al archivo para la seguridad del usuario conectado .
fuente
Cada vez que me he encontrado con este problema fue al intentar adjuntar una base de datos que se encuentra en un directorio diferente del directorio predeterminado de la base de datos que está configurado en el servidor SQL.
Recomiendo encarecidamente que, en lugar de realizar jacks con permisos en varios directorios y cuentas, simplemente mueva su archivo de datos al directorio que el servidor sql espera encontrar.
fuente
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 realizaron las operaciones de desconexión y conexión. Entonces, los archivos, cuando se separaron, pertenecían al 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 realizó el comando de desconexión, por lo que para resolver el problema, debemos cambiar o agregar el otro inicio de sesión como propietario de los archivos mdf y ldf.
Haga clic derecho en el archivo "filename.mdf" y seleccione las propiedades para verificar los permisos del archivo mdf. Aquí podemos ver que solo una cuenta tiene permiso para el archivo "filename.mdf" porque esa fue 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 otorgar el control total de inicio de sesión. 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 esto primero y luego verá la opción Agregar ...).
fuente
Por lo que vale para cualquiera que tenga la variación particular de este problema que tuve:
A través del menú contextual de la carpeta App_data, había creado una base de datos SQL Express para fines de depuración. La cadena de conexión (utilizada por NHibernate) fue la siguiente:
Esto me dio el mismo error de "Acceso denegado" en el archivo de base de datos. Traté de dar a varios usuarios Control total de la carpeta y los archivos, en un punto incluso a "Todos". Nada ayudó, así que eliminé los permisos agregados nuevamente.
Lo que finalmente resolvió fue abrir el Explorador de servidores en Visual Studio, luego conectarse al MDF y desconectarlo nuevamente. Después de hacer eso, 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é al buscar en Google este problema en particular, lo que desencadenó la idea de adjuntar / separar la base de datos para resolver el problema.
fuente
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 configurar la base de datos nuevamente 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 ese SERVICIO NT) y se adjuntó muy bien.
Parece que la carpeta de datos original tiene estos permisos y los archivos la heredan. Mueva los archivos y los saltos de herencia, por supuesto.
Revisé el archivo mdf de otro proyecto que creé directamente en su carpeta app_data. no tiene permisos MSSQL $ SQLEXPRESS. Hmmm Me pregunto por qué a SQL Express le gusta uno pero no el otro.
fuente
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á seguro de que no cambió los permisos de la carpeta entre iniciar sesión como usted mismo e iniciar sesión como sa? Si se desconecta e intenta nuevamente, ¿sigue teniendo el mismo problema?
fuente
Windows authenticated user
que nos ayudará a superar el permiso en los archivos de la base de datos. (Este caso, MS SQLServer instancia en el disco que tiene el sistema operativo Windows).Tuve el mismo problema al adjuntar una base de datos. No fue un problema de SQL, fue un problema de cuenta. Vaya al panel de control / Configuración de control de cuenta de usuario / Configure a "nunca notificar" Finalmente, reinicie la computadora y funcionó para mí.
fuente
Adjunté el archivo mdf haciendo clic 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
El método anterior me ayudó a resolver el problema.
fuente
Estaba leyendo esta página y tienen una frase interesante allí:
Por supuesto, también tienen esto:
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 vistazo rápido a estas dos páginas:
Enlace a los requisitos previos de la base de datos
Enlace a la instalación de bases de datos
Estás siendo travieso e intentas adjuntarlos manualmente :) En serio, ¿tienes todos los requisitos previos para la base de datos AdventureWorks2008?
Sospecho que este es solo otro caso extraño de Microsoft, pero podría estar equivocado.
fuente
cambie a FOR ATTACH -> FOR ATTACH_FORCE_REBUILD_LOG
fuente
Obtuve este error como sa. En mi caso, la seguridad de la base de datos no importó. Agregué a todos el control total a los archivos mdf y ldf, y el adjunto salió bien.
fuente
Estaba enfrentando el mismo problema en VS 2019. si alguien todavía enfrenta el mismo problema, asegúrese de tener / hacer lo siguiente:
fuente
De hecho, son permisos NTFS y un error extraño en SQL Server. No estoy seguro de que el informe de error anterior sea correcto o que pueda referirse 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, usé la interfaz de usuario en lugar de pegar en la ruta. Me di cuenta de 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 mis propias carpetas de usuario).
Pegar la ruta y continuar da como resultado el error anterior. Entonces, le di al usuario de MS SQL Server permisos para leer a partir del primer directorio desde el que se le negó (mi carpeta de usuario). Luego cancelé inmediatamente la operación de propagación porque puede llevar una eternidad, y nuevamente apliqué permisos de lectura a la siguiente subcarpeta necesaria, y dejé que se propagara por completo.
Finalmente, le di al usuario de MS SQL Server permisos de modificación para los archivos .mdf y .ldf para la base de datos.
Ahora puedo adjuntar a los archivos de la base de datos.
fuente
Si ejecuta sql server 2012, puede obtener este error al intentar adjuntar una versión anterior de un archivo mdf. ex un archivo mdf del servidor sql 2008.
fuente
He resuelto el problema simplemente moviendo el archivo .mdf que desea adjuntar a la carpeta pública, en mi caso lo moví a la carpeta public / users. Luego lo adjunto desde allí sin ningún problema. Espero que esto ayude.
fuente
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 su instalación de SQL Server, haga clic 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 solucionó una instalación de SQL 2008 R2 para mí).
Alguna información adicional: Este problema apareció para mí 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 en el nuevo disco duro. Sin embargo, los permisos de seguridad no se copiaron. Creo que la próxima vez usaré un mejor método para copiar datos.
fuente
En mi caso, lo que resolvió el problema fue lo siguiente:
fuente
Copie la base de datos a otra carpeta y adjunte o inicie sesión en SQLServer con "Autenticación de Windows"
fuente
Tuve el mismo problema al volver a conectar la base de datos después de separarla y mover archivos ldf y mdf de la unidad C a F.
Para solucionarlo, tuve que agregar el principal DERECHOS DEL PROPIETARIO a ambos archivos y le di el control total sobre ellos en la pestaña Seguridad del cuadro de diálogo Propiedades.
fuente