Errore del sistema operativo SQL Server 5: "5 (accesso negato.)"


153

Sto iniziando a imparare SQL e ho un libro che fornisce un database su cui lavorare. Questi file di seguito si trovano nella directory ma il problema è che quando eseguo la query, mi dà questo errore:

Messaggio 5120, livello 16, stato 101, riga 1 Impossibile aprire il file fisico "C: \ Murach \ SQL Server 2008 \ Database \ AP.mdf". Errore del sistema operativo 5: "5 (Accesso negato.)".

   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

Nel libro l'autore afferma che dovrebbe funzionare, ma nel mio caso non funziona. Ho cercato ma non so esattamente quale sia il problema, quindi ho pubblicato questa domanda.


Se il file di backup esiste già, assicurarsi che non abbia l'attributo "sola lettura", oltre a assicurarsi che il servizio disponga dell'autorizzazione di scrittura.
jumxozizi,

Risposte:


133

L'account del servizio motore di database di SQL Server deve disporre delle autorizzazioni per leggere / scrivere nella nuova cartella.

Dai un'occhiata a questo

Per risolvere, ho fatto quanto segue:

Aggiunto il gruppo di amministratori alle autorizzazioni di sicurezza dei file con il pieno controllo del file di dati (S :) e del file di registro (T :).

In allegato il database e funziona benissimo.

inserisci qui la descrizione dell'immagine

inserisci qui la descrizione dell'immagine


4
A volte il server SQL verrà eseguito in un gruppo di utenti diverso daAdministrators Group
JDandChips

57
Inoltre, può essere utile avviare SQL Server Management Studio come amministratore, non solo il servizio server.
david.barkhuizen,

1
Per me la soluzione al seguente link lavorato: stackoverflow.com/a/19061137/365188
Ozair Kafray

3
Per me ha cambiato l'account del servizio Agente SQL Server in sistema locale ha funzionato.
singhm0077,

22
Se l'istanza di SQL Server è in esecuzione con un account di servizio (ad esempio, il mio è MSSQL$SQLEXPRESS), potrebbe non essere ovvio che è necessario aggiungere l'account all'elenco delle autorizzazioni delle cartelle come:NT Service\MSSQL$SQLEXPRESS
Brian Lacy,

109

Un vecchio post, ma ecco un passaggio che ha funzionato per SQL Server 2014 in esecuzione su Windows 7:

  • Pannello di controllo ->
  • Sistema e sicurezza ->
  • Strumenti di amministrazione ->
  • Servizi ->
  • Fare doppio clic su SQL Server (SQLEXPRESS) -> tasto destro, Proprietà
  • Seleziona la scheda Accedi
  • Seleziona "Account di sistema locale" (il valore predefinito era un account di sistema Windows ottuso)
  • -> OK
  • tasto destro, Stop
  • tasto destro del mouse, Start

Ecco !

Penso che l'impostazione dell'account di accesso possa essere stata un'opzione nell'installazione, ma in tal caso non era l'impostazione predefinita ed era facile perdere se non si fosse già a conoscenza di questo problema.


5
Ho provato molte opzioni, ma la tua risposta funziona bene. Grazie mickeyf.
vicky

2
Funziona anche con SQL Server 2014 con Win 10. Grazie.
Johan Foley,

7
-1 In questo modo si va contro l'idea di configurare questo utente in primo luogo. È una funzione di sicurezza e ciò lo aggira.
NullUserException,

2
WOW .. Non riesco a credere che le persone siano appena saltate in questa "risposta" .. Questo potrebbe creare un grosso problema di sicurezza .. Altrimenti, non ci sarebbe un motivo per impostare quell'utente all'inizio, giusto? Comunque, è una "soluzione" per le persone che non lo considerano come un problema di sicurezza nei loro casi.
curiousBoy

2
Chiunque ritenga che la sicurezza sia più importante del lavoro svolto può semplicemente spegnere il proprio server SQL!
Ivan,

44

Per aggirare il problema di accesso negato, ho avviato SSMS come amministratore e ciò mi ha permesso di collegare un database dal mio disco locale. Il database è stato creato in un'altra istanza di SQL e Windows.


3
questo è stato per me ... Sto solo guardando una configurazione totalmente locale e ho riscontrato questo problema, su Windows 10 Home, e in precedenza avevo creato il "proprietario" mdf & ldf per un altro motivo - forse rilevante
Mike M

3
Questo funziona anche per me. Sto utilizzando Windows 10 e Microsoft SQL Server 2012. Ho eseguito SQL Management Studio come amministratore e quindi in grado di collegare il database di esempio Adventure Work.
Arsho,

1
Ciò ha anche risolto il problema con Windows 10 Pro durante l'esecuzione in un ambiente di dominio di lavoro.
PerPlexSystem l'

Lo stesso - Domain Env, SSMS 2017.x, Win10 Pro. Staccato da un'altra macchina e allegato su una nuova macchina.
TravisWhidden

44

Questo è un problema relativo a Windows in cui SQL Server non dispone dell'autorizzazione appropriata per la cartella che contiene il file .bak e quindi questo errore.

Il modo più semplice per aggirare è copiare il file .bak nella posizione di backup SQL predefinita che dispone di tutte le autorizzazioni necessarie. Non è necessario giocherellare con nient'altro. In SQL SERVER 2012 , questa posizione è

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)

@AdamLevitt hai più versioni di SQL installate o precedentemente installate? Sei sicuro di metterlo nella posizione corretta?
Hammad Khan,

1
@hmd, grazie. La correzione consisteva nell'esportare nella directory dei backup del 2012.
Adam Levitt,

1
Questa soluzione funziona anche in SQL Server 2014. Il percorso è C: \ Programmi \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King

Questa dovrebbe essere la risposta !!
Axel,

Ho avuto un problema simile con MS SQL Express 2016, la soluzione era quella di mettere il mio file .mdf nella cartella: C: \ Programmi \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2

14

Ho avuto questo problema Basta eseguire SQL Server come amministratore


1
"Esegui come amministratore" come in UAC ha funzionato per me. Non ho avuto bisogno di accedere come amministratore dell'account (sono comunque nel gruppo amministratori).
Mike Cheel,

1
Sì, ha fatto la stessa cosa, eseguito come amministratore e tutto è andato bene.
Clyde,

12

Sì, è giusto. Per prima cosa dovresti scoprire il tuo account di servizio di sqlserver, puoi vederlo in Task Manager quando premi ctrl + alt + cancella allo stesso tempo; Quindi, devi dare il privilegio di lettura / scrittura di "C : \ Murach \ SQL Server 2008 \ Database "all'account del servizio.


10

Il problema è dovuto alla mancanza di autorizzazioni per SQL Server per accedere ai file mdf e ldf. Tutte queste procedure funzioneranno:

  1. è possibile modificare direttamente l'account utente di avvio del servizio MSSQLSERVER, con l'account utente che dispone di privilegi migliori sui file. Quindi provare a collegare il database.
  2. Oppure puoi assegnare l'utente al file nella scheda di sicurezza delle proprietà dei file mdf e ldf con i privilegi di lettura e scrittura selezionati.
  3. Avvia con l'account amministratore di Windows, apri SQL Server con l'opzione Esegui come amministratore e prova ad accedere con l'autenticazione di Windows e ora prova a collegare il database.

9

Risolvo questo problema aggiungendo Full controlil permesso per entrambi .mdfe .ldffile per il Usersgruppo.


5

Per me è stato risolto nel modo seguente con SQL Server Management studio -Accedere come admin (ho effettuato l'accesso come autenticazione di Windows) -Collegare il file mdf (tasto destro del mouse Database | allegare | Aggiungi) -Accedere come admin -Accedere come utente normale


4

Le autorizzazioni effettive del server non avranno importanza a questo punto; sembra tutto a posto. Lo stesso SQL Server necessita delle autorizzazioni per le cartelle.
a seconda della versione, è possibile aggiungere le autorizzazioni SERVERNAME $ MSSQLSERVER per toccare la cartella. Altrimenti, deve trovarsi nella directory BACKUP predefinita (dove è stata installata o predefinita in c: \ programfiles (x) \ MSSQL \ BACKUP.


2

Anche se si eseguono le seguenti operazioni, si potrebbe ottenere lo stesso messaggio di errore.

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) 

Ho ancora ottenuto l'errore di autorizzazione, ma poi ho notato che nella schermata Allega, la parte inferiore STILL mostrava il file LOG e il messaggio di errore è rimasto lo stesso.

Spero che questo aiuti qualcuno che ha fatto la stessa cosa.


0

Soluzione molto semplice.

  1. Accedi con l'amministratore di sistema
  2. copia i tuoi file mdf e ldf in "C: \ Programmi (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" Dove si trovano tutti gli altri file di dati.
  3. Ora attacca da lì funzionerà

1
Non è necessario archiviare i dati nella directory dei file di programma. Il percorso predefinito deve essere modificato quando si installa SQl Server
OrangeKing89

0

Ho usato Entity framework nella mia applicazione e ho avuto questo problema, ho impostato qualsiasi autorizzazione in cartelle e servizi Windows e non funziona, dopo di che ho avviato la mia applicazione come amministratore (fare clic destro nel file exe e selezionare "Esegui come amministratore") e che funziona bene.


0

Se ricevi questo errore su un .MDFfile nella APP_DATAcartella (o ovunque tu lo abbia inserito) per un progetto Visual Studio, il modo in cui l'ho fatto è stato semplicemente copiare le autorizzazioni dalla DATAcartella esistente qui (sto usando SQL Express 2014 per supportare un'app precedente):

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

(nota: il tuo percorso di installazione effettivo può variare, specialmente se il nome dell'istanza è diverso)

DATAFai doppio clic sulla cartella prima come amministratore per assicurarti di avere accesso, quindi apri le proprietà sulla cartella e imita la stessa per la APP_DATAcartella. Nel mio caso l'utente mancante era MSSQL$SQLEXPRESS2014(perché ho chiamato l'istanza SQLEXPRESS2014- la tua potrebbe essere diversa). Questo è anche il nome utente del servizio SQL Server.


0

Per qualche motivo, l'impostazione di tutte le autorizzazioni corrette non ha aiutato nel mio caso. Avevo un file db.bakche non ero in grado di ripristinare a causa 5(Access is denied.)dell'errore. Il file è stato inserito nella stessa cartella di molti altri file di backup e tutte le autorizzazioni erano identiche ad altri file. Sono stato in grado di ripristinare tutti gli altri file tranne questo db.bakfile. Ho anche provato a modificare l'utente di accesso al servizio SQL Server, sempre con lo stesso risultato. Ho provato a copiare il file senza alcun effetto.

Quindi ho provato a creare un file identico eseguendo

type db.bak > db2.bak

invece di copiare il file. E voilà ha funzionato! db2.bakripristinato con successo.

Sospetto che alcuni altri problemi con la lettura del file di backup possano essere erroneamente segnalati 5(Access is denied.)da MS SQL.


0

In linux, sono andato alla /var/opt/mssql/data/cartella e ho aperto un terminale con sudoallora, ho cambiato le mie autorizzazioni per i file * .mdf e * .ldf come sotto in cui si sostituisce yourDBcon il nome del file del database e il nome myUserutente attualmente registrato:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Successivamente, è stato ricollegato senza problemi.


0

Significa che l'utente di accesso SSMS non dispone dell'autorizzazione per il file .mdf. Ecco come ha funzionato per me:

Avevo aperto SSMS (Esegui come amministratore) e ho effettuato l'accesso come utente amministratore, fare clic con il pulsante destro del mouse sul collegamento, fare clic su Aggiungi, selezionare il file .mdf, fare clic su OK. Fatto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.