Saya menggunakan edisi pengembang SQL Server 2008. Saya mencoba untuk melampirkan database AdventureWorks2008.
Ketika saya mencoba melampirkan, saya menerima kesalahan "akses ditolak". Menurut log peristiwa, itu berasal dari O / S:
Buka gagal: Tidak dapat membuka file D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf untuk nomor file 0. Kesalahan OS: 5 (Akses ditolak.).
Saya pikir "masalah NTFS", tetapi Sistem (dan saya) telah memodifikasi akses ke kedua file.
Saya menemukan bahwa saya dapat dengan sukses melampirkan database jika saya masuk sebagai sa, tetapi akun pengguna saya tidak akan berfungsi.
Saya adalah anggota grup administrator lokal di mesin saya, dan saya dalam peran sysadmin dalam contoh SQL Server.
Tahu mengapa saya harus masuk sebagai sa?
sumber
Jawaban:
Jalankan SQL Server Management Studio sebagai Administrator. (klik kanan-> jalankan sebagai administrator) yang menangani semua keanehan dalam kasus saya.
SQL SRV EXPRESS 2008 R2. Windows 7
sumber
Terima kasih atas semua komentarnya. Beberapa dari Anda membantu mengarahkan saya ke jawabannya. Inilah yang saya temukan:
Itu masalah izin NTFS, dan bukan masalah SQL. Lebih lanjut, ini terlihat seperti bug (dan itu bisa diulang).
Masalahnya: Akun yang saya gunakan memiliki izin kontrol penuh NTFS untuk file mdf dan ldf. Namun, ia memiliki izin tersebut melalui keanggotaan grup (grup Administrator Lokal memiliki izin, dan akun saya adalah anggota admin lokal). (Saya memverifikasi izin)
Jika saya mencoba melampirkan, sambungkan ke SQL Server seperti saya (di mana saya berada di grup admin), gagal dengan masalah NTFS.
Namun, jika saya memberikan izin file yang sama dengan yang dimiliki grup admin lokal langsung ke Akun Domain saya, maka saya dapat melampirkan tanpa masalah.
(oh, dan ya, saya memeriksa grup lokal di mesin ini, dan saya memverifikasi bahwa akun domain saya memang anggota grup admin lokal).
Jadi, tampaknya seolah-olah kesalahan terjadi karena beberapa kode (baik dalam SQL Server atau Management Studio) memeriksa izin yang dimiliki akun pengguna, tetapi tidak sejauh memeriksa izin grup yang diwarisi akun pengguna.
Kedengarannya aneh bagi saya, tetapi saya dapat mereproduksinya berulang-ulang, jadi saya telah menyimpulkan bahwa itu adalah jawabannya.
Pembaruan: Saya melaporkan ini sebagai bug: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited
sumber
Saya ingin menambahkan info tambahan ke jawaban yang diposting.
Berhati-hatilah saat melepaskan basis data karena pengguna windows yang Anda masuki sebagai satu-satunya pengguna dengan izin ke file .mdf! Izin asli yang dimiliki file .mdf yang mencakup pengguna
SQLServerMSSQLUser$<computer_name>$<instance_name>
dan akun Administrator ditimpa oleh pengguna windows mana pun yang Anda masuki (bukan pengguna server sql). Boom, semua izin hilang begitu saja. Jadi lakukan seperti yang orang lain katakan dan klik kanan file .mdf Anda dan periksa izinnya.Saya mengalami masalah ini karena saya menggunakan SSMS untuk terhubung ke database (tidak masalah akun server sql) dan memisahkan database. Setelah melakukan itu, pengguna windows saya adalah satu-satunya yang memiliki izin untuk file .mdf. Jadi nanti ketika saya mencoba melampirkan db menggunakan akun sa, itu melemparkan kesalahan "akses ditolak".
Untuk menjaga izin asli tetap berlaku, Anda harus membuat database offline, lalu lepaskan, lalu lampirkan dalam urutan seperti:
sumber
Tambahkan izin ke folder tempat
.mdf
file Anda berada.Periksa nama ini:
NT Service\MSSQLSERVER
Dan ubah
Location
ke nama server Anda.sumber
SELECT servicename, service_account FROM sys.dm_server_services
.Masalah ini disebabkan oleh UAC (Kontrol Akun Pengguna), bukan? Meskipun akun pengguna Anda adalah anggota grup Administrators, UAC di Windows 7 tidak memungkinkan Anda melakukan hal-hal administrator kecuali jika Anda menjalankan program "sebagai administrator". Ini bukan bug nyata di SQL Server atau Management Studio atau apa pun. (Meskipun mungkin bisa mengetahui masalahnya dan meminta Anda untuk izin yang lebih tinggi daripada hanya mengeluh "kesalahan 5".)
sumber
Jalankan SQL Server Management Studio sebagai Administrator. (klik kanan -> jalankan sebagai administrator) bekerja untuk saya dengan Windows 7 - SQL server 2008 R2
sumber
Basis data SQL2005 dapat dilampirkan dengan cara ini di Windows 7:
Dan kemudian database terlampir berhasil diselesaikan.
sumber
Ketika Anda login sebagai
sa
(atau akun Sql Server), Anda berfungsi sebagai akun layanan SQL Server, ketika Anda masuk saat Anda, Anda memiliki izin akun Anda. Untuk beberapa alasan Anda tidak memiliki akses file yang sesuai tetapi akun layanan tidak.sumber
SELECT servicename, service_account FROM sys.dm_server_services
Saya menemukan solusi ini: Klik kanan pada folder tempat Anda menyimpan file .mdf Anda -> klik Properties -> pilih tab Security, klik Edit ... dan berikan kontrol penuh. Semoga ini membantu!
sumber
The
sa
pengguna menggunakan account NTFSSQLServerMSSQLUser$<computer_name>$<instance_name>
danSQLServerSQLAgentUser$<computer_name>$<instance_name>
untuk mengakses file database. Anda mungkin ingin mencoba menambahkan izin untuk satu atau kedua pengguna ini.Saya tidak tahu apakah memecahkan masalah Anda karena Anda mengatakan Anda tidak memiliki masalah dengan
sa
pengguna, tapi saya harap ini membantu.sumber
Dengan saya - Berjalan di jendela 8 - Boleh klik SQL Server Manager Studio -> Jalankan dengan admin. -> lampirkan tidak ada masalah
sumber
itu bisa diperbaiki dengan mudah tetapi radikal, cukup buka folder tempat Anda menyimpan file mdf . pilih file-> Klik kanan -> klik pada properti dan berikan izin penuh ke file untuk keamanan pengguna yang masuk .
sumber
Setiap kali saya mengalami masalah ini adalah ketika mencoba untuk melampirkan database yang ada di direktori yang berbeda dari direktori database default yang diatur di SQL server.
Saya akan sangat menyarankan bahwa alih-alih mendongkrak dengan izin pada berbagai direktori dan akun Anda cukup memindahkan file data Anda ke direktori yang diharapkan sql server menemukannya.
sumber
Saya hanya ingin menambahkan informasi ini juga.
http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/
Larutan
Anda mendapatkan kesalahan ini karena dua login berbeda melakukan operasi lepas dan lampirkan. Jadi file-file itu, ketika terlepas, dimiliki oleh login pertama, tetapi lampiran gagal karena login yang digunakan bukan pemilik file mdf dan ldf.
Ketika kita melepaskan file database, pemilik menjadi orang yang melakukan perintah detach, jadi untuk mengatasi masalah ini kita perlu mengubah atau menambahkan login lain sebagai pemilik file mdf dan ldf.
Klik kanan pada file "filename.mdf" dan pilih properti untuk memeriksa izin file mdf. Di sini kita dapat melihat bahwa hanya satu akun yang memiliki izin untuk file "filename.mdf" karena itu adalah akun yang digunakan untuk melepaskan basis data.
Untuk mengatasi masalah ini, klik tombol Tambah ... untuk menambahkan login lain atau login lain yang diperlukan dan berikan login Kontrol Penuh. Anda harus melakukan ini untuk file "ldf" juga. Setelah Anda menyelesaikan tugas ini klik tombol OK. (Catatan untuk versi OS lain Anda mungkin memiliki opsi Edit, klik ini terlebih dahulu dan kemudian Anda akan melihat opsi Tambah ...)
sumber
Untuk apa ada baiknya bagi siapa pun yang memiliki variasi khusus dari masalah ini yang saya miliki:
Melalui menu konteks folder App_data saya telah membuat database SQL Express untuk keperluan debugging. String koneksi (digunakan oleh NHibernate) adalah sebagai berikut:
Ini memberi saya kesalahan "Akses ditolak" yang sama pada file database. Saya mencoba memberikan berbagai pengguna Kontrol Penuh ke folder dan file, pada satu titik bahkan ke "Semua Orang". Tidak ada yang membantu, jadi saya menghapus izin yang ditambahkan lagi.
Apa yang akhirnya dipecahkan adalah membuka Server Explorer di Visual Studio, kemudian terhubung ke MDF, dan lepaskan lagi. Setelah saya selesai melakukannya, aplikasi web saya bisa mengakses basis data dengan baik.
PS. Kredit pergi ke posting blog ini yang saya temukan saat mencari masalah khusus ini di Google, memicu ide untuk melampirkan / melepaskan basis data untuk menyelesaikan masalah.
sumber
Saya memindahkan database mdf dari folder Data default ke folder app_data asp.net saya dan mengalami masalah ini mencoba mengatur database kembali online.
Saya membandingkan pengaturan keamanan database file lain di lokasi asli dengan file yang dipindahkan dan memperhatikan bahwa MSSQL $ SQLEXPRESS tidak diberi izin untuk file di lokasi baru mereka. Saya menambahkan kontrol penuh untuk "NT SERVICE \ MSSQL $ SQLEXPRESS" (harus menyertakan SERVICE NT) dan terpasang dengan baik.
Tampaknya folder Data asli memiliki izin ini dan file mewarisinya. Pindahkan file dan istirahat warisan tentu saja.
Saya memeriksa file mdf proyek lain yang saya buat langsung ke folder app_data-nya. tidak memiliki izin $ SQLEXPRESS MSSQL. Hmmm. Saya bertanya-tanya mengapa SQL Express menyukai satu tetapi tidak yang lain?
sumber
Ini terdengar seperti izin NTFS. Biasanya itu berarti akun layanan SQL Server Anda hanya membaca akses ke file (perhatikan bahwa SQL Server menggunakan akun layanan yang sama untuk mengakses file database terlepas dari bagaimana Anda login). Apakah Anda yakin tidak mengubah izin folder di antara masuk sebagai diri sendiri dan masuk sebagai sa? Jika Anda melepaskan dan mencoba lagi, apakah masih memiliki masalah yang sama?
sumber
Windows authenticated user
akan membantu kami mengatasi izin pada file database. (Kasus ini, contoh MS SQLServer dalam disk yang memiliki OS Windows).Saya memiliki masalah yang sama ketika melampirkan database. Itu bukan masalah SQL itu masalah akun. Buka kontrol panel / Pengaturan Kontrol Akun Pengguna / Setel ke "tidak pernah memberi tahu". Akhirnya, nyalakan kembali komputer dan itu berhasil untuk saya.
sumber
Saya melampirkan file mdf dengan mengklik kanan database dan menghapus file log AdventureWorks2012_Data_log.ldf di wisaya. File mdf ditempatkan di lokasi berikut
Metode di atas membantu saya untuk menyelesaikan masalah.
sumber
Saya membaca halaman ini dan mereka memiliki kalimat yang menarik di sana:
Tentu saja, mereka juga memiliki ini:
Jadi, jika Anda seorang admin domain dan dalam grup SQL 'sysadmin', dunia haruslah krustasea Anda.
Tentu saja, menurut Microsoft, Anda harus melihat dua halaman ini dengan cepat:
Tautan ke Prasyarat Basis Data
Tautan ke Menginstal Database
Anda nakal dan mencoba melampirkannya secara manual :) Serius, apakah Anda memiliki semua prasyarat untuk database AdventureWorks2008?
Saya menduga ini hanyalah kasus keanehan / tepi Microsoft, tapi saya bisa saja salah.
sumber
ubah menjadi UNTUK ATTACH -> UNTUK ATTACH_FORCE_REBUILD_LOG
sumber
Saya mendapat kesalahan ini sebagai sa. Dalam kasus saya, keamanan basis data tidak masalah. Saya menambahkan semua orang kontrol penuh ke file mdf dan ldf, dan melampirkan baik-baik saja.
sumber
Saya menghadapi masalah yang sama di VS 2019. jika ada yang masih menghadapi masalah yang sama maka pastikan Anda memiliki / melakukan hal-hal berikut:
sumber
Itu sebenarnya izin NTFS, dan bug aneh di SQL Server. Saya tidak yakin laporan bug di atas akurat, atau mungkin merujuk ke bug tambahan.
Untuk mengatasi ini pada Windows 7, saya menjalankan SQL Server Management Studio secara normal (bukan sebagai Administrator). Saya kemudian mencoba untuk melampirkan file MDF. Dalam prosesnya, saya menggunakan UI daripada menempel di jalan. Saya perhatikan bahwa jalan terputus dari saya. Ini karena pengguna MS SQL Server (SQLServerMSSQLUser $ machinename $ SQLEXPRESS) yang ditambahkan oleh perangkat lunak untuk Anda tidak memiliki izin untuk mengakses folder (dalam hal ini folder jauh di folder pengguna saya sendiri).
Menempelkan path dan melanjutkan hasil dalam kesalahan di atas. Jadi - saya memberikan izin pengguna MS SQL Server untuk membaca mulai dari direktori pertama ditolak (folder pengguna saya). Saya kemudian segera membatalkan operasi propagasi karena dapat memakan waktu selamanya, dan sekali lagi menerapkan izin baca ke subfolder berikutnya yang diperlukan, dan membiarkannya menyebar sepenuhnya.
Akhirnya, saya memberi pengguna MS SQL Server Memodifikasi izin untuk file .mdf dan .ldf untuk db.
Saya sekarang dapat melampirkan ke file database.
sumber
Jika Anda menjalankan sql server 2012 Anda bisa mendapatkan kesalahan ini dengan mencoba melampirkan versi file mdf yang lebih lama. ex file mdf dari sql server 2008.
sumber
Saya telah memecahkan masalah dengan hanya memindahkan file .mdf yang ingin Anda lampirkan ke folder publik, dalam kasus saya, saya memindahkannya ke folder pengguna / publik. Lalu saya pasang dari sana tanpa masalah. Semoga ini membantu.
sumber
Bagi mereka yang tidak dapat memperbaiki masalah dengan solusi lain di sini, perbaikan berikut ini berfungsi untuk saya:
Buka folder "DATA" di instalasi SQL Server, klik kanan, properti, tab keamanan, dan tambahkan izin kontrol penuh untuk pengguna "LAYANAN JARINGAN".
http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/
(Tautan di atas adalah untuk SQL 2005, tetapi ini memperbaiki instalasi SQL 2008 R2 untuk saya).
Beberapa info tambahan: Masalah ini muncul untuk saya setelah mengganti hard drive sekunder (yang instalasi SQL aktif). Saya menyalin semua file, dan mengembalikan huruf drive asli ke hard disk baru. Namun, izin keamanan tidak disalin. Saya pikir lain kali saya akan menggunakan metode yang lebih baik untuk menyalin data.
sumber
Dalam kasus saya yang menyelesaikan masalah adalah sebagai berikut:
sumber
Salin Database ke folder lain dan lampirkan atau Masuk SQLServer dengan "Otentikasi Windows"
sumber
Saya pernah mengalami masalah yang sama ketika melampirkan kembali basis data setelah melepaskannya dan memindahkan file ldf dan mdf dari drive C ke F.
Untuk memperbaikinya saya harus menambahkan prinsip HAK PEMILIK untuk kedua file dan memberikannya kontrol penuh atas mereka di tab Keamanan dari dialog Properties.
sumber