L'accès est refusé lors de la fixation d'une base de données
Je suis à l'aide de SQL Server 2008 developer edition. J'ai essayé de joindre la base de données AdventureWorks2008.
Quand j'ai essayé de les joindre, j'ai reçu un "accès refusé" s'affiche. Selon le journal des événements, il est venu de l'O/S:
Open failed: ne Peut pas ouvrir le fichier D:\ProjectData\AdventureWorks\AdventureWorksLT2008_Data.mdf pour le numéro de dossier de 0. Erreur système: 5(Accès refusé.).
J'ai pensé "NTFS problème", mais le Système (I) l'accès en modification aux deux fichiers.
J'ai trouvé que je peux réussir à joindre la base de données si je me connecte en tant que sa, mais mon compte d'utilisateur ne fonctionne pas.
Je suis un membre du groupe administrateurs local sur ma machine, et je suis dans le les administrateurs système, le rôle de l'instance de SQL Server.
Aucune idée pourquoi j'ai dû être connecté en tant que sa?
- Est le fichier MDF chiffré par hasard?
- Nope-la véritable curiosité pour moi, c'est que cela fonctionne bien si je me connecte en tant que sa (à l'aide de Management Studio), mais il ne fonctionne pas si j'utilise mon compte admin local. Mon compte est un compte administrateur, un administrateur de domaine, et c'est le compte que j'étais connecté sous quand j'ai installé SQL Server (lors de l'installation il y a une option pour faire mon compte courant, un sysadmin, et je l'ai fait).
- C'est de cette façon UAC fonctionne dans W7, pas de surprise.
- Nope, pas UAC chose. Juste de la connexion comme sa corrige (SQL server compte, n'a rien à voir avec le contrôle de compte d'utilisateur) le problème. Aussi, tout en étant un membre du groupe administrateurs local, je reçois mes autorisations, je n'ai pas à élever dans l'ordre à mon AD informations d'identification pour travailler.
Vous devez vous connecter pour publier un commentaire.
Exécuter SQL Server Management Studio en tant qu'Administrateur. (clic droit-> exécuter en tant qu'administrateur) qui a pris soin de tous les étrangeté dans mon cas.
SQL SRV EXPRESS 2008 R2. Windows 7
Vous remercier pour tous les commentaires. Certains d'entre vous ont aidé à me conduire à la réponse. Voici ce que j'ai trouvé:
C'était une autorisation NTFS problème, et non pas un problème SQL. De plus, il semble que le type de bug-like (et c'est répétable).
Le problème:
Le compte que j'utilisais avait le plein contrôle des autorisations NTFS pour la mdf et ldf fichiers. Cependant, il avait de ces autorisations par le biais de l'appartenance à un groupe (le groupe Administrateurs Local dispose d'autorisations, et mon compte est un membre de la section locale admins). (J'ai vérifié les autorisations)
Si j'essaie de faire le joindre, connectez-vous à SQL Server comme moi (où je suis dans le groupe des administrateurs), il échoue avec le NTFS problème.
Cependant, si je vous l'accorde les mêmes autorisations de fichiers que le groupe admin local a directement à mon Compte de Domaine, alors je peux le joindre sans problèmes.
(oh, et oui, j'ai vérifié les groupes locaux sur cette machine, et j'ai vérifié que mon compte de domaine est en effet un membre du groupe administrateurs local).
Ainsi, il semble comme si l'erreur se produit car certains de code (dans SQL Server ou Management Studio) vérifie les autorisations que le compte d'utilisateur est titulaire, mais il ne veut pas aller aussi loin que de vérifier les autorisations de groupe que le compte d'utilisateur hérite.
Qui sonne bizarre pour moi, mais je peux le reproduire encore et encore, donc j'en ai conclu que c'est de la réponse.
Mise à jour: je l'ai signalé cela comme un bug: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited
Log On As
réglage sur Windows ServiceMSSQLSERVER
deNetwork Service
àLocal System Account
et redémarré le service. Et cela fonctionne maintenant.J'aimerais ajouter des informations supplémentaires pour les réponses qui ont été posté.
Être prudent lors de la déconnexion de la base de données parce que le utilisateur windows vous êtes connecté en tant que devient le seul utilisateur avec des autorisations pour la .fichier mdf! Les autorisations d'origine de l' .fichier mdf avait qui inclus l'utilisateur
SQLServerMSSQLUser$<computer_name>$<instance_name>
et les Administrateurs de compte être remplacées par n'importe quel utilisateur de windows, vous êtes connecté en tant qu' (pas d'utilisateur sql server). Boom, toutes les autorisations disparu comme ça. Donc, faire comme les autres ont dit et cliquez le bouton droit de votre .fichier mdf et vérifiez les autorisations.Je suis tombé sur ce problème parce que j'ai utilisé SSMS pour se connecter à la base de données (n'a pas d'importance ce qui compte sql server) et détaché de la base de données. Après avoir fait que mon windows de l'utilisateur est le seul qui a eu toutes les autorisations pour l' .fichier mdf. Donc plus tard, quand j'ai essayé de joindre la db en utilisant le compte administrateur, il a jeté l'erreur "accès refusé".
De conserver l'original des autorisations dans le tact, vous devriez prendre de la base de données en mode hors connexion, puis détacher, puis l'attacher dans l'ordre comme suit:
Ajouter une autorisation dans le dossier où votre
.mdf
fichier.Vérifiez ce nom:
NT Service\MSSQLSERVER
Et modifier le
Location
nom de votre serveur.SELECT servicename, service_account FROM sys.dm_server_services
.Ce problème est causé par l'UAC (Contrôle de Compte d'Utilisateur), n'est-ce pas? Bien que votre compte d'utilisateur est un membre du groupe Administrateurs, le contrôle de compte d'utilisateur dans Windows 7 ne permet pas de faire de l'administrateur de choses, sauf si vous exécutez les programmes "en tant qu'administrateur". Il n'est pas un vrai bug dans SQL Server ou Management Studio ou de quoi que ce soit. (Bien qu'il pourrait éventuellement connaître le problème et vous demander des autorisations élevées au lieu de simplement se plaindre "erreur 5".)
Exécuter SQL Server Management Studio en tant qu'Administrateur. (clic droit-> exécuter en tant qu'administrateur) a fonctionné pour moi avec Windows 7 SQL server 2008 R2
Un SQL2005 de base de données peuvent être fixés de cette manière dans Windows 7:
Puis attaché de base de données complétée avec succès.
Lorsque vous vous connectez en tant que
sa
(ou tout compte Sql Server), vous êtes à fonctionner en tant que le compte de service SQL Server, lorsque vous êtes connecté en tant que vous, vous avez les autorisations de votre compte. Pour une raison quelconque vous n'avez pas le approprié d'accès au fichier, mais le compte de service n'.SELECT servicename, service_account FROM sys.dm_server_services
Avec moi
- En cours d'exécution sur windows 8
- À droite, cliquez sur SQL Server management Studio -> Exécuter avec l'admin. -> joindre pas de problèmes
il peut être fixe facilement mais radicaly, il suffit d'aller dans le dossier où vous avez stocké les fichier mdf. sélectionnez fichier-> clic Droit ->cliquez sur propriétés et donner toutes les autorisations sur le fichier pour l'utilisateur connecté à la Sécurité.
J'ai trouvé cette solution: clic Droit sur le dossier dans lequel vous stocker vos .mdf fichier --> cliquez sur Propriétés --> choisissez l'onglet Sécurité, cliquez sur Modifier... et de lui donner le plein contrôle.
Espérons que cette aide!
La
sa
utilisateur utilise NTFS comptesSQLServerMSSQLUser$<computer_name>$<instance_name>
etSQLServerSQLAgentUser$<computer_name>$<instance_name>
pour accéder aux fichiers de base de données. Vous pouvez essayer d'ajouter des autorisations pour l'un ou les deux de ces utilisateurs.Je ne sais pas si résout votre problème puisque vous dites que vous n'avez pas de problèmes avec la
sa
de l'utilisateur, mais j'espère que cela aide.Chaque fois que j'ai rencontré ce problème a été lors de la tentative d'attacher une base de données qui se trouve dans un répertoire différent de la valeur par défaut de la base de données du répertoire de programme d'installation de SQL server.
Je recommande fortement que, au lieu de jacking avec les autorisations sur les différents répertoires et les comptes que vous déplacez simplement votre fichier de données dans le répertoire sql server s'attend à le trouver.
Je voulais juste apporter cette information ainsi.
http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/
Solution
Vous obtenez ce message d'erreur parce que deux connexions ne l'attacher et détacher des opérations. De sorte que les fichiers, une fois détachés, ont été détenus par la première connexion, mais l'attachement a échoué parce que la connexion a été utilisée n'était pas le propriétaire de la mdf et ldf fichiers.
Lorsque nous détacher des fichiers de base de données, le propriétaire devient la personne qui a fait la commande de détachement, afin de résoudre le problème, nous avons besoin de changer ou d'ajouter les autres de connexion en tant que propriétaire de la mdf et ldf fichiers.
Clic droit sur "nom de fichier.mdf" fichier et sélectionnez propriétés pour vérifier les autorisations du fichier mdf. Ici, nous pouvons voir qu'un seul compte est autorisé à le "nom de fichier.mdf fichier" parce que c'est le compte qui a été utilisé pour détacher la base de données.
Pour résoudre ce problème, cliquez sur le bouton Ajouter... pour ajouter l'autre connexion ou de toute autre connexion nécessaire et de donner le login le Plein Contrôle. Vous devez faire cela pour le "ldf" fichier ainsi. Une fois que vous avez terminé cette tâche, cliquez sur le bouton OK. (Note pour les autres versions de système d'exploitation vous pouvez avoir une option d'Édition , cliquez sur ce premier et ensuite vous pourrez voir les Ajouter... option.)
Pour ce que ça vaut pour toute personne ayant la variation particulière de ce problème que j'ai eu:
Via le menu contextuel du dossier App_data, j'avais créé une base de données SQL Express à des fins de débogage. La chaîne de connexion (utilisé par NHibernate) a été comme suit:
Cela m'a donné la même erreur "Accès refusé" sur le fichier de base de données. J'ai essayé de donner les différents utilisateurs de Contrôler le dossier et les fichiers, à un point même de "tout le monde". Rien n'y fait, j'ai donc retiré les autorisations de nouveau.
Ce que finalement résolu était d'ouvrir l'Explorateur de serveurs dans Visual Studio, puis connectez-vous à la MDF, et de le détacher de nouveau. Après j'ai fait que mon application web peut accéder à la base de l'amende juste.
PS. Les crédits vont à ce blog j'ai trouvé tout googler ce problème particulier, le déclenchement de l'idée d'attacher/détacher la base de données pour résoudre le problème.
J'ai déménagé d'une base de données mdf à partir du dossier de Données par défaut à mes asp.net dossier app_data et s'est heurtée à ce problème en essayant de définir la base de données en ligne.
J'ai comparé les paramètres de sécurité des fichiers de bases de données dans l'emplacement d'origine pour les fichiers qui ont été déplacés et remarqué que MSSQL$SQLEXPRESS n'a pas été attribué d'autorisations pour les fichiers dans leur nouvel emplacement. J'ai ajouté le Plein contrôle pour "NT SERVICE\MSSQL$SQLEXPRESS" (doit comprendre que SERVICE NT) et qu'il attachait de l'amende juste.
Il semble que le dossier de Données d'origine a ces autorisations et les fichiers d'en hériter. Déplacer les fichiers et l'héritage des pauses bien sûr.
J'ai vérifié sur un autre projet en mdf de fichier que j'ai créé directement dans son dossier app_data. il n'a pas MSSQL$SQLEXPRESS autorisations. Hmmm. Je me demande pourquoi SQL Express aime l'un mais pas l'autre?
Cela sonne comme les autorisations NTFS. Cela signifie généralement que votre compte de service SQL Server dispose d'un accès en lecture seule sur le fichier (notez que SQL Server utilise le même compte de service pour accéder à des fichiers de base de données, indépendamment de la façon dont vous vous connectez). Êtes-vous sûr de ne pas modifier les autorisations de dossier entre exploitation forestière en tant que vous-même et de se connecter en tant que sa? Si vous détacher et d'essayer encore, faut-il encore avoir le même problème?
Windows authenticated user
nous aide à surmonter la permission sur les fichiers de base de données. (Ce cas, MS SQLServer exemple, dans le disque qu'a Windows OS).J'ai eu le même problème lors de la fixation d'une base de données. Ce n'était pas un SQL question, il était un compte en question. Aller au panneau de contrôle/Contrôle de Compte d'Utilisateur Réglages/Mis à "ne jamais m'avertir". Enfin,redémarrez l'ordinateur et il a travaillé pour moi.
Je joint le fichier mdf en cliquant droit sur la base de données et en supprimant le fichier journal
AdventureWorks2012_Data_log.ldf dans l'assistant . Le fichier mdf a été placé dans l'emplacement suivant
La méthode ci-dessus m'a aidé à résoudre le problème .
Je lisais cette page et ils ont une phrase intéressante là:
Bien sûr, ils ont aussi ceci:
Donc, si vous êtes un administrateur de domaine et dans le SQL "sysadmin" le groupe, le monde devrait être votre crustacés.
Bien sûr, selon Microsoft, vous devez prendre un coup d'oeil rapide à ces deux pages:
Lien vers la Base de données Préalables
Lien pour l'Installation de Bases de données
Vous êtes méchant, et d'essayer de fixer manuellement 🙂 Sérieusement, vous avez toutes les conditions requises pour la base de données AdventureWorks2008?
Je suppose que c'est juste un autre Microsoft bizarrerie/edge cas, mais je peux me tromper.
modifier
POUR JOINDRE -- > POUR ATTACH_FORCE_REBUILD_LOG
J'ai eu cette erreur comme sa.
Dans mon cas, la sécurité de la base n'a pas d'importance.
J'ai ajouté tout le monde pour la mdf et ldf fichiers,
et fixez s'est bien passé.
Il est en fait autorisations NTFS, et un bug étrange dans SQL Server. Je ne suis pas sûr de la au-dessus de rapport de bug est exacte, ou peut se référer à un supplément de bug.
Pour résoudre ce sur Windows 7, j'ai couru SQL Server Management Studio normalement (pas en tant qu'Administrateur). J'ai alors tenté de Joindre le fichier MDF. Dans le processus, j'ai utilisé l'INTERFACE utilisateur au lieu de la coller dans le chemin d'accès. J'ai remarqué que le chemin d'accès a été coupé de moi. C'est parce que le Serveur MS SQL (SQLServerMSSQLUser$machinename$SQLEXPRESS) de l'utilisateur que le logiciel ajoute pour vous ne disposez pas des autorisations d'accès au dossier (dans ce cas, un dossier de profondeur dans mes propres dossiers de l'utilisateur).
Coller le chemin d'accès et de procéder à des résultats dans l'erreur ci-dessus. Donc - j'ai donné le MS SQL Server de l'utilisateur des permissions de lecture à partir de la première répertoire, il a refusé de (mon dossier utilisateur). J'ai alors immédiatement annulé la propagation de l'opération, car il peut prendre une éternité, et une fois de plus les autorisations de lecture à la prochaine sous-dossier nécessaire, et de laisser se propager entièrement.
Enfin, j'ai donné le MS SQL Server de l'utilisateur de Modifier les autorisations à l' .mdf et .fichiers ldf pour la db.
Je pouvez désormais Joindre les fichiers de base de données.
Si vous exécutez sql server 2012, vous pouvez obtenir cette erreur en essayant de joindre une version antérieure d'un mdf-fichier. ex un fichier mdf à partir de sql server 2008.
J'ai résolu le problème il suffit de déplacer l' .mdf fichier que vous voulez joindre au dossier public, dans mon cas, je l'ai déplacé de la part des utilisateurs/dossier public. Puis je me joindre à partir de là sans problème. Espérons que cette aide.
Pour ceux qui ne peuvent pas résoudre le problème avec les autres solutions ici, le correctif suivant a fonctionné pour moi:
Allez dans votre dossier "DATA" de votre installation de SQL Server, clic droit, propriétés, onglet sécurité, et d'ajouter des autorisations full control pour le "SERVICE RÉSEAU" de l'utilisateur.
http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/
(Le lien ci-dessus est pour SQL 2005, mais cette correction d'un SQL 2008 R2 installation pour moi).
Quelques informations supplémentaires: Ce problème s'est présenté pour moi après le remplacement d'un disque dur secondaire (qui pour l'installation de SQL est sur). J'ai copié tous les fichiers, et restauré à l'original de la lettre de lecteur pour le nouveau disque dur. Toutefois, les autorisations de sécurité n'ont pas été copiées. Je pense que la prochaine fois je vais utiliser une meilleure méthode de copie de données.
Dans mon cas, ce qui a résolu le problème était le suivant:
Copie de Base de données dans un autre dossier et joindre ou de se Connecter à sql server avec "l'Authentification Windows"
J'ai eu le même problème lors de la re-connexion de la base de données après l'avoir détaché et le déplacement de ldf et mdf fichiers à partir du lecteur de C à F.
Afin de corriger j'ai dû ajouter de DROITS de PROPRIÉTAIRE principal pour les deux fichiers, et lui a donné le plein contrôle sur eux dans l'onglet Sécurité de la boîte de dialogue Propriétés.
J'ai du mal avec SSMS (2016) pour attacher la base de données AdventureWorks2012. Mais eu du succès avec ce code, pris de un CodeProject article par
Mohammad Elsheimy: