Erreur 5 du système d'exploitation SQL Server: «5 (Accès refusé)»

153

Je commence à apprendre SQL et j'ai un livre qui fournit une base de données sur laquelle travailler. Ces fichiers ci-dessous sont dans le répertoire mais le problème est que lorsque j'exécute la requête, cela me donne cette erreur:

Msg 5120, niveau 16, état 101, ligne 1 Impossible d'ouvrir le fichier physique "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf". Erreur du système d'exploitation 5: "5 (accès refusé.)".

   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

Dans le livre, l'auteur dit que cela devrait fonctionner, mais cela ne fonctionne pas dans mon cas. J'ai cherché mais je ne sais pas exactement quel est le problème, j'ai donc posté cette question.

dijai jijfs
la source
Si le fichier de sauvegarde existe déjà, assurez-vous qu'il ne possède pas l'attribut «lecture seule», en plus de vous assurer que le service dispose de l'autorisation d'écriture.
jumxozizi

Réponses:

133

Le compte de service du moteur de base de données SQL Server doit disposer des autorisations de lecture / écriture dans le nouveau dossier.

Regardez ceci

Pour réparer, j'ai fait ce qui suit:

Ajout du groupe Administrateurs aux autorisations de sécurité des fichiers avec un contrôle total pour le fichier de données (S :) et le fichier journal (T :).

Attaché la base de données et cela fonctionne très bien.

entrez la description de l'image ici

entrez la description de l'image ici

Rahul Tripathi
la source
4
Parfois, le serveur SQL fonctionnera sous un groupe d'utilisateurs différent autre queAdministrators Group
JDandChips
57
En outre, il peut être utile de démarrer SQL Server Management Studio en tant qu'administrateur, pas seulement le service serveur.
david.barkhuizen
1
Pour moi, la solution dans le lien suivant a fonctionné: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Pour moi, la modification du compte de service de l'agent SQL Server en système local a fonctionné.
singhm0077
22
Si votre instance SQL Server s'exécute sous un compte de service (par exemple, le mien MSSQL$SQLEXPRESS), il n'est peut-être pas évident que vous deviez ajouter le compte à la liste des autorisations de dossier en tant que:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Un ancien post, mais voici une étape par étape qui a fonctionné pour SQL Server 2014 sous Windows 7:

  • Panneau de configuration ->
  • Système et sécurité ->
  • Outils administratifs ->
  • Services ->
  • Double-cliquez sur SQL Server (SQLEXPRESS) -> clic droit, Propriétés
  • Sélectionnez l'onglet Connexion
  • Sélectionnez "Compte système local" (la valeur par défaut était un compte système Windows obtus)
  • -> OK
  • clic droit, Arrêter
  • clic droit, Démarrer

Voilá!

Je pense que la configuration du compte de connexion peut avoir été une option dans l'installation, mais si tel était le cas, ce n'était pas la valeur par défaut et était facile à manquer si vous n'étiez pas déjà au courant de ce problème.

MickeyfAgain_BeforeExitOfSO
la source
5
J'ai essayé beaucoup d'options mais votre réponse fonctionne bien. Merci mickeyf.
vicky
2
Fonctionne également pour SQL Server 2014 sous Win 10. Merci.
Johan Foley
7
-1 Faire cela va à l'encontre de l'idée générale de configurer cet utilisateur en premier lieu. C'est une fonctionnalité de sécurité, et faire cela le contourne.
NullUserException
2
WOW ... Je ne peux pas croire que les gens se sont lancés dans cette "réponse" ... Cela pourrait créer un gros problème de sécurité ... Sinon, il n'y aurait pas de raison de définir cet utilisateur au début, non? Quoi qu'il en soit, c'est une «solution» pour les personnes qui ne considèrent pas cela comme un problème de sécurité dans leur cas.
curiousBoy
2
Quiconque pense que la sécurité est plus importante que de travailler peut simplement désactiver son serveur SQL!
Ivan le
44

Pour contourner le problème d'accès refusé, j'ai démarré SSMS en tant qu'administrateur et cela m'a permis de joindre une base de données à partir de mon lecteur local. La base de données a été créée dans une autre instance SQL et Windows.

JayKayOf4
la source
3
c'était tout pour moi ... Je suis juste en train de regarder une configuration totalement locale et j'ai ce problème, sur Windows 10 Home, et auparavant j'avais fait moi-même le "propriétaire" mdf & ldf pour une autre raison - peut-être pertinente
Mike M
3
Cela fonctionne aussi pour moi. J'utilise Windows 10 et Microsoft SQL Server 2012. J'ai exécuté SQL Management Studio en tant qu'administrateur et j'ai ensuite pu attacher la base de données Adventure Work Sample.
arsho
1
Cela a également résolu le problème avec Windows 10 Professionnel lors de l'exécution dans un environnement de domaine de travail.
PerPlexSystem
Idem - Domain Env, SSMS 2017.x, Win10 Pro. Détaché d'une autre machine et attaché sur une nouvelle machine.
TravisWhidden le
44

Il s'agit d'un problème lié à Windows où SQL Server ne dispose pas de l'autorisation appropriée sur le dossier qui contient le fichier .bak et par conséquent cette erreur.

La solution la plus simple consiste à copier votre fichier .bak dans l'emplacement de sauvegarde SQL par défaut qui dispose de toutes les autorisations nécessaires. Vous n'avez pas besoin de jouer avec autre chose. Dans SQL SERVER 2012 , cet emplacement est

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
la source
@AdamLevitt avez-vous plusieurs versions de SQL installées ou précédemment installées? Êtes-vous sûr de le mettre au bon endroit?
Hammad Khan
1
@hmd, merci. Le correctif consistait à exporter dans le répertoire des sauvegardes 2012.
Adam Levitt
1
Cette solution fonctionne également dans SQL Server 2014. Le chemin est C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
Cela devrait être la réponse !!
Axel
J'ai eu un problème similaire avec MS SQL Express 2016, la solution était de mettre mon fichier .mdf dans le dossier: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
14

J'ai eu ce problème. Exécutez simplement SQL Server en tant qu'administrateur

Aref Bozorgmehr
la source
1
«Exécuter en tant qu'administrateur» comme dans UAC a fonctionné pour moi. Je n'ai pas eu besoin de me connecter en tant qu'administrateur du compte (je suis cependant dans le groupe des administrateurs).
Mike Cheel
1
Oui, j'ai fait la même chose, exécuté en tant qu'administrateur et tout s'est bien passé.
Clyde
12

Oui, c'est vrai. Vous devez d'abord connaître votre compte de service de sqlserver, vous pouvez le voir dans le Gestionnaire des tâches lorsque vous appuyez sur ctrl + alt + supprimer en même temps; Ensuite, vous devez donner le privilège de lecture / écriture de "C : \ Murach \ SQL Server 2008 \ Databases "au compte de service.

Tim
la source
10

Le problème est dû au manque d'autorisations permettant à SQL Server d'accéder aux fichiers mdf et ldf. Toutes ces procédures fonctionneront:

  1. vous pouvez modifier directement le compte utilisateur de démarrage du service MSSQLSERVER, avec le compte utilisateur qui dispose de meilleurs privilèges sur les fichiers. Essayez ensuite de joindre la base de données.
  2. Ou vous pouvez affecter l'utilisateur au fichier dans l'onglet de sécurité des propriétés des fichiers mdf et ldf avec les privilèges de lecture et d'écriture cochés.
  3. Démarrez avec un compte administrateur Windows et ouvrez SQL Server avec l'option Exécuter en tant qu'administrateur et essayez de vous connecter avec l'authentification Windows et essayez maintenant de joindre la base de données.
Chandra Sekhar
la source
9

Je résous ce problème en ajoutant une Full controlautorisation pour les deux fichiers .mdfet .ldfpour le Usersgroupe.

Sayed Abolfazl Fatemi
la source
5

Pour moi, cela a été résolu de la manière suivante avec SQL Server Management Studio -Connectez-vous en tant qu'administrateur (je me suis connecté en tant qu'authentification Windows) -Attachez le fichier mdf (clic droit sur la base de données | attacher | Ajouter) -Déconnectez-vous en tant qu'administrateur -Connectez-vous en tant que utilisateur normal

Roue rotative
la source
4

Les autorisations réelles du serveur n'auront pas d'importance à ce stade; tout semble ok. SQL Server lui-même a besoin d'autorisations de dossier.
selon votre version, vous pouvez ajouter des autorisations SERVERNAME $ MSSQLSERVER pour toucher votre dossier. Sinon, il doit être dans le répertoire BACKUP par défaut (où vous l'avez installé ou par défaut dans c: \ programfiles (x) \ MSSQL \ BACKUP.

Claudia
la source
2

Même si vous effectuez les étapes suivantes, vous POURRIEZ obtenir le même message d'erreur.

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) 

J'ai toujours eu l'erreur d'autorisation, mais j'ai ensuite remarqué que dans l'écran Joindre, la section inférieure affiche TOUJOURS le fichier LOG et le message d'erreur est resté le même.

J'espère que cela aide quelqu'un qui a fait la même chose.

Tom Stickel
la source
0

Solution très simple.

  1. Connectez-vous avec l'administrateur système
  2. copiez vos fichiers mdf et ldf dans "C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" où tous les autres fichiers de données se trouvent.
  3. Maintenant attachez à partir de là, cela fonctionnera
AmitykSharma
la source
1
Vous ne devez pas stocker de données dans le répertoire des fichiers programme. L'emplacement par défaut doit être modifié lorsque vous installez SQl Server
OrangeKing89
0

J'ai utilisé le framework Entity dans mon application et j'ai eu ce problème, j'ai défini une autorisation dans les dossiers et les services Windows et je ne travaille pas, après cela je démarre mon application en tant qu'administrateur (clic droit dans le fichier exe et sélectionnez "exécuter en tant qu'administrateur") et cela fonctionne bien.

Ali Yousefi
la source
0

Si vous obtenez cette erreur sur un .MDFfichier dans le APP_DATAdossier (ou où que vous soyez) pour un projet Visual Studio, la façon dont je l'ai fait était de simplement copier les autorisations du DATAdossier existant ici (j'utilise SQL Express 2014 pour prendre en charge une ancienne application):

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

(Remarque: votre chemin d'installation réel peut varier - surtout si le nom de votre instance est différent)

Double-cliquez d'abord sur le DATAdossier en tant qu'administrateur pour vous assurer que vous avez accès, puis ouvrez les propriétés du dossier et imitez la même chose pour le APP_DATAdossier. Dans mon cas, l'utilisateur manquant l'était MSSQL$SQLEXPRESS2014(car j'ai nommé l'instance SQLEXPRESS2014- la vôtre peut être différente). Il s'agit également du nom d'utilisateur du service SQL Server.

James Wilkins
la source
0

Pour une raison quelconque, définir toutes les autorisations correctes n'a pas aidé dans mon cas. J'avais un fichier db.bakque je n'ai pas pu restaurer en raison de l' 5(Access is denied.)erreur. Le fichier était placé dans le même dossier que plusieurs autres fichiers de sauvegarde et toutes les autorisations étaient identiques aux autres fichiers. J'ai pu restaurer tous les autres fichiers à l'exception de ce db.bakfichier. J'ai même essayé de changer le journal du service SQL Server sur l'utilisateur - toujours le même résultat. J'ai essayé de copier le fichier sans effet.

Ensuite, j'ai essayé de créer simplement un fichier identique en exécutant

type db.bak > db2.bak

au lieu de copier le fichier. Et voila ça a marché! db2.bakrestauré avec succès.

Je soupçonne que certains autres problèmes de lecture du fichier de sauvegarde peuvent être signalés 5(Access is denied.)par erreur comme par MS SQL.

ps_ttf
la source
0

Sous Linux, je suis allé dans un /var/opt/mssql/data/dossier et j'ai ouvert un terminal avec sudoensuite, j'ai changé mes autorisations de fichier * .mdf et * .ldf comme ci-dessous dans lesquelles vous remplacez yourDBpar le nom de votre fichier de base de données et par le nom myUserd'utilisateur actuellement connecté:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Après cela, il a été reconnecté sans aucun problème.

Muhammad tayyab
la source
0

Cela signifie que l'utilisateur de connexion SSMS n'a pas l'autorisation sur le fichier .mdf. Voici comment cela a fonctionné pour moi:

J'avais ouvert le SSMS (Exécuter en tant qu'administrateur) et me connecter en tant qu'utilisateur administrateur, cliquez avec le bouton droit sur la base de données, cliquez sur Ajouter, sélectionnez le fichier .mdf, cliquez sur OK. Terminé.

Poisson rouge
la source