Kesalahan sistem operasi SQL Server 5: "5 (Akses ditolak.)"

153

Saya mulai belajar SQL dan saya punya buku yang menyediakan database untuk dikerjakan. File-file di bawah ini ada di direktori tetapi masalahnya adalah ketika saya menjalankan query, ini memberi saya kesalahan ini:

Msg 5120, Level 16, State 101, Line 1 Tidak dapat membuka file fisik "C: \ Murach \ SQL Server 2008 \ Databases \ AP.mdf". Kesalahan sistem operasi 5: "5 (Akses ditolak.)".

   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

Dalam buku itu penulis mengatakan itu harus berhasil, tetapi tidak berfungsi dalam kasus saya. Saya mencari tetapi saya tidak tahu persis apa masalahnya, jadi saya memposting pertanyaan ini.

jijf dijai
sumber
Jika file cadangan sudah ada, pastikan tidak memiliki atribut "hanya baca", selain memastikan bahwa layanan memiliki izin menulis.
jumxozizi

Jawaban:

133

Akun layanan mesin database SQL Server harus memiliki izin untuk membaca / menulis di folder baru.

Lihat ini

Untuk memperbaikinya, saya melakukan hal berikut:

Menambahkan Grup Administrator ke izin keamanan file dengan kontrol penuh untuk file Data (S :) dan File Log (T :).

Melampirkan basis data dan berfungsi dengan baik.

masukkan deskripsi gambar di sini

masukkan deskripsi gambar di sini

Rahul Tripathi
sumber
4
Terkadang SQL server akan berjalan di bawah grup pengguna yang berbeda selainAdministrators Group
JDandChips
57
Juga, mungkin membantu untuk memulai SQL Server Management Studio sebagai Admin, bukan hanya layanan server.
david.barkhuizen
1
Bagi saya solusi dalam tautan berikut ini berfungsi: stackoverflow.com/a/19061137/365188
Ozair Kafray
3
Bagi saya mengubah akun Layanan Agen SQL Server ke Sistem Lokal bekerja.
singhm0077
22
Jika instance SQL Server Anda berjalan di bawah akun layanan (misalnya, milik saya MSSQL$SQLEXPRESS), mungkin tidak jelas bahwa Anda perlu menambahkan akun ke daftar izin folder sebagai:NT Service\MSSQL$SQLEXPRESS
Brian Lacy
109

Posting lama, tapi di sini adalah langkah demi langkah yang berfungsi untuk SQL Server 2014 berjalan di bawah windows 7:

  • Panel Kontrol ->
  • Sistem dan Keamanan ->
  • Alat Administrasi ->
  • Layanan ->
  • Klik dua kali SQL Server (SQLEXPRESS) -> klik kanan, Properties
  • Pilih Log On Tab
  • Pilih "Akun Sistem Lokal" (standarnya adalah beberapa akun Sistem Windows tumpul)
  • -> OK
  • klik kanan, Stop
  • klik kanan, Mulai

Voa!

Saya pikir pengaturan akun masuk mungkin menjadi opsi dalam instalasi, tetapi jika demikian itu bukan default, dan mudah untuk dilewatkan jika Anda belum mengetahui masalah ini.

MickeyfAgain_BeforeExitOfSO
sumber
5
Saya telah mencoba banyak opsi tetapi jawaban Anda bekerja dengan baik. Terima kasih mickeyf.
vicky
2
Bekerja untuk SQL Server 2014 di bawah Win 10 juga. Terima kasih.
Johan Foley
7
-1 Melakukan ini bertentangan dengan ide pengaturan pengguna ini di tempat pertama. Ini fitur keamanan, dan melakukan ini mengelak.
NullUserException
2
WOW .. Tidak percaya orang baru saja melompat ke "jawaban" ini .. Ini mungkin menciptakan masalah keamanan besar .. Jika tidak, tidak akan ada alasan untuk mengatur pengguna itu pada awalnya, kan? Bagaimanapun, ini adalah "solusi" untuk orang-orang yang tidak menganggap ini sebagai masalah keamanan dalam kasus mereka.
curiousBoy
2
Siapa pun yang berpikir bahwa keamanan lebih penting daripada menyelesaikan beberapa pekerjaan bisa mematikan server SQL mereka!
Ivan
44

Untuk mengatasi masalah akses ditolak, saya mulai SSMS sebagai administrator dan yang memungkinkan saya untuk melampirkan database dari drive lokal saya. Basis data dibuat dalam contoh SQL dan windows lainnya.

JayKayOf4
sumber
3
ini untuk saya ... Saya hanya melihat pengaturan yang benar-benar lokal dan mendapatkan masalah ini, pada Windows 10 Home, dan sebelumnya saya telah membuat "pemilik" mdf & ldf untuk alasan lain - mungkin relevan
Mike M
3
Ini juga berfungsi untuk saya. Saya menggunakan Windows 10 dan Microsoft SQL Server 2012. Saya telah menjalankan SQL Management Studio sebagai Administrator dan kemudian dapat melampirkan database Adventure Work Sample.
arsho
1
Ini juga memecahkan masalah dengan Windows 10 Pro ketika berjalan di lingkungan domain kerja.
PerPlexSystem
Sama - Domain Env, SSMS 2017.x, Win10 Pro. Terpisah dari mesin lain dan Terlampir pada mesin baru.
TravisWhidden
44

Ini adalah masalah terkait Windows di mana SQL Server tidak memiliki izin yang sesuai untuk folder yang berisi file .bak dan karenanya kesalahan ini.

Cara termudah adalah menyalin file .bak Anda ke lokasi cadangan SQL default yang memiliki semua izin yang diperlukan. Anda tidak perlu bermain-main dengan hal lain. Di SQL SERVER 2012 , lokasi ini adalah

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
sumber
@AdamLevitt apakah Anda memiliki beberapa versi SQL yang diinstal atau sebelumnya diinstal? Apakah Anda yakin meletakkannya di lokasi yang benar?
Hammad Khan
1
@ hmd, Terima kasih. Cara mengatasinya adalah mengekspor ke dir cadangan 2012.
Adam Levitt
1
Solusi ini berfungsi di SQL Server 2014 juga. Jalannya adalah C: \ Program Files \ Microsoft SQL Server \ MSSQL12.MSSQLSERVER \ MSSQL \ Backup
Nick King
Ini seharusnya jawabannya !!
Axel
Saya punya masalah yang sama dengan MS SQL Express 2016, solusinya adalah meletakkan file .mdf saya di folder: C: \ Program Files \ Microsoft SQL Server \ MSSQL13.SQLEXPRESS \ MSSQL \ Backup
jirikadlec2
14

Saya punya masalah ini. Jalankan SQL Server sebagai administrator

Aref Bozorgmehr
sumber
1
'Jalankan sebagai Administrator' seperti di UAC bekerja untuk saya. Saya tidak perlu masuk sebagai Administrator akun (namun saya berada di grup administrator).
Mike Cheel
1
Ya, lakukan hal yang sama, jalankan sebagai administrator dan semua berjalan dengan baik.
Clyde
12

Ya, Benar. Pertama Anda harus mengetahui akun layanan dari sqlserver, Anda dapat melihatnya di Task Manager ketika Anda menekan ctrl + alt + delete secara bersamaan; Kemudian, Anda harus memberikan hak baca / tulis dari "C : \ Murach \ SQL Server 2008 \ Databases "ke akun layanan.

Tim
sumber
10

Masalahnya adalah karena kurangnya izin untuk SQL Server untuk mengakses file mdf & ldf. Semua prosedur ini akan berfungsi:

  1. Anda dapat langsung mengubah akun pengguna startup layanan MSSQLSERVER, dengan akun pengguna yang memiliki hak istimewa yang lebih baik pada file. Kemudian coba lampirkan database.
  2. Atau Anda dapat menetapkan pengguna ke file di tab keamanan properti file mdf & ldf dengan hak baca dan tulis dicentang.
  3. Mulai dengan akun administrator windows, dan buka SQL Server dengan opsi run as administrator dan coba masuk dengan otentikasi windows dan sekarang coba lampirkan database.
Chandra Sekhar
sumber
9

Saya mengatasi masalah ini dengan menambahkan Full controlizin untuk keduanya .mdfdan .ldffile untuk Usersgrup.

Sayed Abolfazl Fatemi
sumber
5

Bagi saya itu diselesaikan dengan cara berikut dengan SQL Server Management studio -Log in as admin (Saya login sebagai otentikasi windows) -Masukkan file mdf (klik kanan Database | attach | Add) -Log out as admin -Log in as pengguna normal

Putar Roda
sumber
4

Izin server yang sebenarnya tidak akan menjadi masalah pada saat ini; semua terlihat ok. SQL Server sendiri membutuhkan izin folder.
tergantung pada versi Anda, Anda dapat menambahkan izin SERVERNAME $ MSSQLSERVER untuk menyentuh folder Anda. Selain itu, ia harus berada di direktori BACKUP default (baik di mana Anda menginstalnya atau default ke c: \ programfiles (x) \ MSSQL \ BACKUP.

Claudia
sumber
2

Bahkan jika Anda melakukan langkah-langkah berikut ini Anda BISA mendapatkan pesan kesalahan yang sama.

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) 

Saya masih MEMILIKI kesalahan izin, tetapi kemudian saya perhatikan bahwa di layar Lampirkan, bagian bawah MASIH memperlihatkan file LOG, dan pesan kesalahan tetap sama.

Semoga ini bisa membantu seseorang yang melakukan hal yang sama.

Tom Stickel
sumber
0

Solusi yang Sangat Sederhana.

  1. Masuk dengan System admin
  2. salin file mdf dan ldf Anda di "C: \ Program Files (x86) \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA" Di mana semua file data lainnya bersandar.
  3. Sekarang pasang dari sana itu akan berfungsi
AmitykSharma
sumber
1
Anda tidak boleh menyimpan data dalam direktori file program. Lokasi default harus diubah ketika Anda menginstal SQl Server
OrangeKing89
0

Saya menggunakan kerangka kerja Entity dalam aplikasi saya dan mengalami masalah ini, saya menetapkan izin apa pun dalam folder dan layanan windows dan tidak berfungsi, setelah itu saya memulai aplikasi saya sebagai administrator (klik kanan pada file exe dan pilih "run as admin") dan berfungsi baik.

Ali Yousefi
sumber
0

Jika Anda mendapatkan kesalahan ini pada .MDFfile di APP_DATAfolder (atau di mana pun Anda meletakkannya) untuk proyek Visual Studio, cara saya melakukannya adalah dengan hanya menyalin izin dari DATAfolder yang ada di sini (saya menggunakan SQL Express 2014 untuk mendukung aplikasi yang lebih lama):

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

(catatan: jalur instal Anda yang sebenarnya bervariasi - terutama jika nama instance Anda berbeda)

Klik dua kali pada DATAfolder pertama sebagai administrator untuk memastikan Anda memiliki akses, lalu buka properti pada folder dan meniru yang sama untuk APP_DATAfolder. Dalam kasus saya, pengguna yang hilang adalah MSSQL$SQLEXPRESS2014(karena saya beri nama instance SQLEXPRESS2014- Anda mungkin berbeda). Itu juga kebetulan menjadi nama pengguna layanan SQL Server.

James Wilkins
sumber
0

Untuk beberapa alasan, mengatur semua izin yang benar tidak membantu dalam kasus saya. Saya memiliki file db.bakyang tidak dapat saya pulihkan karena 5(Access is denied.)kesalahan. File ditempatkan di folder yang sama dengan beberapa file cadangan lainnya dan semua izin identik dengan file lain. Saya dapat memulihkan semua file lain kecuali file ini db.bak. Saya bahkan mencoba mengubah log layanan SQL Server pada pengguna - masih hasilnya sama. Saya sudah mencoba menyalin file tanpa efek.

Kemudian saya mencoba membuat file yang identik dengan mengeksekusi

type db.bak > db2.bak

alih-alih menyalin file. Dan voila berhasil! db2.bakberhasil dipulihkan.

Saya menduga bahwa beberapa masalah lain dengan membaca file cadangan mungkin dilaporkan secara ilegal 5(Access is denied.)oleh MS SQL.

ps_ttf
sumber
0

Di linux, saya pergi ke /var/opt/mssql/data/folder dan membuka terminal dengan sudoitu, mengubah izin file * .mdf dan * .fif saya seperti di bawah ini di mana Anda mengganti yourDBdengan nama file Database Anda dan myUserke nama pengguna yang saat ini login:

chmod 755 yourDB.mdf
chown myUser yourDB.mdf

chmod 755 yourDB.ldf
chown myUser yourDB.ldf

Setelah itu, terhubung kembali tanpa masalah.

muhammad tayyab
sumber
0

Ini berarti pengguna login SSMS tidak memiliki izin pada file .mdf. Beginilah cara kerjanya bagi saya:

Saya telah membuka SSMS (Run as administrator) dan masuk sebagai pengguna administrator, database klik kanan lampiran, klik add, pilih file .mdf, klik Ok. Selesai

Ikan mas
sumber