Akses ditolak saat melampirkan database

146

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?

JMarsch
sumber
Apakah file MDF dienkripsi secara kebetulan?
Brettski
Tidak - rasa ingin tahu yang sebenarnya bagi saya adalah berfungsi dengan baik jika saya masuk sebagai sa (menggunakan Management Studio), tetapi tidak berfungsi jika saya menggunakan akun admin lokal saya. Akun saya adalah admin, admin domain, dan itu adalah akun yang saya masuki ketika saya menginstal SQL Server (selama pengaturan ada opsi untuk membuat akun saya saat ini sysadmin, dan saya melakukannya).
JMarsch
1
Inilah cara kerja UAC di W7, tidak mengejutkan.
Al Kepp
@AlKepp Tidak - bukan hal UAC. Hanya masuk sebagai sa mengoreksi (akun SQL server, tidak ada hubungannya dengan UAC) masalahnya. Selain itu, hanya dengan menjadi anggota grup admin lokal, saya mendapatkan izin - saya tidak perlu menaikkan agar kredensial AD saya berfungsi.
JMarsch

Jawaban:

162

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

MandoMando
sumber
5
Menjalankan Management Studio sebagai administrator TIDAK bekerja untuk saya. Kesalahan ini terjadi ketika mencoba untuk memulai layanan windows.
nuzzolilo
9
Berjalan sebagai Administrator adalah langkah pertama. Langkah kedua adalah masuk ke SQL Server dengan Windows Authentication. (Metode ini berhasil bagi saya!)
Furkan Ekinci
3
Bekerja untuk saya juga. Tidak dapat mengungkapkan dengan kata-kata betapa melelahkan & membuat frustrasi izin yang diminta dan kesalahan ada di Windows. AKU AD ADMINISTRATOR!
David Masters
Bekerja untuk saya juga. Pada awalnya saya tidak berpikir itu akan berhasil karena SSMS hanyalah klien UI. Saya pikir perlu layanan untuk dijalankan sebagai Admin. Tetapi menjalankan SSMS sebagai Admin sudah cukup.
Luke Vo
2
Bekerja untuk saya juga. SQL Server 2019, SSMS 18.4
Ryan Thomas
104

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

JMarsch
sumber
104
Jika, seperti saya, Anda menggunakan Windows 7, Anda harus menjalankan SQL Server Management Studio sebagai Administrator untuk menghindari kesalahan ini.
Antony
4
Direproduksi pada Win7 Pro menggunakan SS2008 Express. Masalah yang sama untuk sqlcmd dan SSMS. == Meldung '5120', Ebene '16', Status '101', Server 'DAGO \ SQLEXPRESS', Zeile 1 - 'Die physische Datei' D: \ data \ mssql \ drei.mdf 'kann nicht geöffnet werden. Betriebssystemfehler 5: '5 (Zugriff verweigert) == Memberikan akses penuh kepada pengguna (yang merupakan anggota grup admin lokal, yang memiliki akses) memperbaiki masalah. Juga, menjalankan sqlcmd (atau SSMS, saya kira) karena Administrator tidak menghasilkan kesalahan ini.
Lumi
1
Anthony Highsky punya jawabannya. Hanya perlu memastikan untuk menjalankan Management Studio sebagai Administrator.
James
Masalah yang sama, dan solusinya, bagi saya. 2008R2, Win 7, dll. Hanya menambahkan diri saya secara eksplisit ke daftar keamanan, dan itu berhasil. Saya kira SQL Server dapat membacanya, setelah dilampirkan, tetapi tidak di bawah kredensial saya ketika melampirkan?
Andrew Backer
4
Menjalankan Management Studio sebagai administrator TIDAK bekerja untuk saya. Kesalahan ini terjadi ketika mencoba untuk memulai layanan windows.
nuzzolilo
20

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:

USE [master]
GO
-- kick all users out of the db
ALTER DATABASE mydb
SET SINGLE_USER WITH ROLLBACK IMMEDIATE 
GO

-- Take the Database Offline
ALTER DATABASE mydb SET OFFLINE WITH
ROLLBACK IMMEDIATE
GO

-- detach the db
EXEC master.dbo.sp_detach_db @dbname = N'mydb'
GO
goku_da_master
sumber
1
Terima kasih untuk ini! Saya pikir ini jauh lebih mudah untuk memperbaikinya jika Anda juga masuk menggunakan akun SQL Server Authenticated dengan hak serveradmin.
William Rose
Sayangnya, ini tidak membantu saya jika saya awalnya membuat database sebagai 'sa' daripada sebagai pengguna Windows
David Gardiner
"Hati-hati saat melepaskan basis data". Katakan pada SSMS untuk berhati-hati. Masalah saya terjadi karena menggunakan SSMS, perintah Copy Database gagal meninggalkan saya di kota poros tanpa penjelasan
Alan Macdonald
18

Tambahkan izin ke folder tempat .mdffile Anda berada.

Periksa nama ini: NT Service\MSSQLSERVER

Dan ubah Locationke nama server Anda.

Leonardo
sumber
5
Untuk menemukan nama akun yang tepat, karena dapat bervariasi dari contoh ke contoh, jalankan ini: SELECT servicename, service_account FROM sys.dm_server_services.
Arve Systad
13

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".)

Kepp Al
sumber
11

Jalankan SQL Server Management Studio sebagai Administrator. (klik kanan -> jalankan sebagai administrator) bekerja untuk saya dengan Windows 7 - SQL server 2008 R2

Rolwin Crasta
sumber
1
Jawaban ini harus ditingkatkan. Menjalankan SSMS sebagai Administrator adalah pekerjaan yang mereplikasi jawaban ini. Microsoft melaporkan ini sebagai "perilaku yang diharapkan" di sini: tautan
FreeText
Bukankah ini sama dengan jawaban MandoMando?
mortb
10

Basis data SQL2005 dapat dilampirkan dengan cara ini di Windows 7:

start menu >
 all program >
  Microsoft sql server 2005 >
   sql server management studio >
    right click >
     run as administrator >
      click ok

Dan kemudian database terlampir berhasil diselesaikan.

Rahul garg aggarwal
sumber
Ini bekerja dengan SQL Server 2016 dengan Management Studio 2008 R2 pada Windows 10 :)
par
9

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.

Nick Craver
sumber
Masalah NTFS adalah hal pertama yang saya pikirkan juga, tetapi sepertinya itu bukan masalah: Saya anggota grup admin lokal, dan saya memverifikasi bahwa admin memiliki izin "kontrol penuh" pada file mdf dan ldf . Juga, saya adalah pemilik file - saya baru saja membuat direktori dan menyalin file mdf / ldf ke lokasi mereka sendiri.
JMarsch
@JMarsch: @Nick mengatakan bahwa 'sa' memiliki seperangkat HAK SQLSERVER - bukan hak NTFS - yang tidak dimiliki akun Anda.
Trevoke
@Trevoke: Aku bersamamu. Jika itu masalahnya, maka hak apa yang harus saya tetapkan untuk akun pengguna saya? (Saya sudah ditugaskan untuk peran sysadmin)
JMarsch
1
Jawaban lama, ini, tetapi untuk orang-orang seperti saya lima menit yang lalu: Anda dapat menemukan nama pengguna layanan yang tepat dengan menjalankanSELECT servicename, service_account FROM sys.dm_server_services
Arve Systad
6

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!

quokka
sumber
5

The sapengguna menggunakan account NTFS SQLServerMSSQLUser$<computer_name>$<instance_name>dan SQLServerSQLAgentUser$<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 sapengguna, tapi saya harap ini membantu.

djeidot
sumber
5

Dengan saya - Berjalan di jendela 8 - Boleh klik SQL Server Manager Studio -> Jalankan dengan admin. -> lampirkan tidak ada masalah

Serigala abu-abu
sumber
5

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 .

Ema.H
sumber
3

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.

Bukan saya
sumber
Dalam banyak situasi, saya akan setuju dengan poin Anda, tetapi dengan SQL server, Anda sering ingin dapat menemukan database Anda pada spindle atau volume yang berbeda untuk skalabilitas. Bahkan, itu adalah praktik umum untuk menempatkan log transaksi pada spindle terpisah dari database untuk meningkatkan throughput transaksi.
JMarsch
@JMarsch: Ya .. direktori sebenarnya dapat dikonfigurasi melalui Server Properties> tab Database Settings untuk data default dan lokasi log ...
NotMe
Itu mencakup default, tapi itu hanya default. Benar-benar dapat diterima untuk menempatkan dbs di tempat lain, dan benar-benar bahkan tidak jarang jika Anda memiliki server Anda mengelola lebih dari 1 database yang digunakan secara aktif.
JMarsch
Saya memiliki masalah yang sama bahkan dengan direktori sql server default: c: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SPATIAL_IM \ MSSQL \ DATA \ mydb.mdf pada win7.
goku_da_master
3

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 ...)

stormwild
sumber
Saya mengubah koneksi saya di SSMS agar cocok dengan pengguna yang melakukan detach, dan saya bisa melakukan lampiran.
glitzsfa
2

Untuk apa ada baiknya bagi siapa pun yang memiliki variasi khusus dari masalah ini yang saya miliki:

  • SQL Express 2008
  • Visual Studio 2010 Premium

Melalui menu konteks folder App_data saya telah membuat database SQL Express untuk keperluan debugging. String koneksi (digunakan oleh NHibernate) adalah sebagai berikut:

Server=.\SQLExpress;
AttachDbFilename=|DataDirectory|DebugDatabase.mdf;
Database=DebugDatabase;
Trusted_Connection=Yes;

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.

Jeroen
sumber
2

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?

Brad Mathews
sumber
Solusi ini bekerja untuk saya di Windows 10 dan SQL Server 2017 ketika memindahkan file log ke disk terpisah. Dalam kasus saya, nama pengguna adalah "NT SERVICE \ MSSQLSERVER"
John Hanley
1

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?

Adrian O'Connor
sumber
Dalam kasus saya, tidak - saya kembali melakukannya kali serveral untuk memastikan. Masalahnya adalah bahwa akun saya hanya memiliki akses ke file melalui tingkat tipuan - saya adalah anggota grup Domain Admin. Domain Admin adalah anggota grup Administrator Lokal pada mesin, dan Admin Lokal (dan sistem) memiliki kontrol penuh ke folder. (jadi ada 2 level tipuan kelompok). Jika saya memberikan izin kepada saya secara langsung, itu berhasil, jika saya menghapusnya, saya masih bisa menyalin / menghapus file dari Explorere, dll, tetapi SQL Server tidak dapat memuatnya.
JMarsch
Ketika mencoba melampirkan basis data. Masuk sebagai Windows authenticated userakan membantu kami mengatasi izin pada file database. (Kasus ini, contoh MS SQLServer dalam disk yang memiliki OS Windows).
Do Nhu Vy
1

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.

Paola
sumber
1

Saya melampirkan file mdf dengan mengklik kanan database dan menghapus file log AdventureWorks2012_Data_log.ldf di wisaya. File mdf ditempatkan di lokasi berikut

    C:\Program Files\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\DATA

Metode di atas membantu saya untuk menyelesaikan masalah.

Praveen
sumber
1

Saya membaca halaman ini dan mereka memiliki kalimat yang menarik di sana:

Perhatian: Sangat selektif saat menambahkan pengguna ke peran ini. Sebagai contoh, sysadmin memetakan ke dbo di setiap basis data dan setara dengan masuk menggunakan akun sa.

Tentu saja, mereka juga memiliki ini:

Izin yang diberikan kepada pengguna dan peran dan khusus untuk basis data. Semua izin bersifat kumulatif dengan pengecualian DENY. Izin yang ditolak pada tingkat pengguna atau pada tingkat peran menimpa izin yang sama yang diberikan melalui keanggotaan peran lainnya dengan pengecualian peran server tetap sysadmin. (A sysadmin mempertahankan semua izin, bahkan jika peran mereka adalah anggota memiliki izin DENY.)

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.

Trevoke
sumber
+1 karena komentar Anda membantu saya menemukan jawabannya. Saya akan memposting temuan saya ke utas ini. BTW (saya menjadi "nakal" karena kebijakan yang sangat aneh di mana saya bekerja - database petualangan didistribusikan sebagai exe. Saya tidak dapat mengunduh exe. (Saya dapat mengunduh file zip dan file MSI, jadi saya tidak melihat bagaimana exe filtering benar-benar melakukan anythign selain menghalangi, tetapi itulah aturannya). Lagi pula, saya bisa mendapatkan file mdf mentah sebagai ritsleting dari codeplex, dan saat itulah saya berlari ke keingintahuan kecil ini.
JMarsch
1

masukkan deskripsi gambar di sini

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH
GO

ubah menjadi UNTUK ATTACH -> UNTUK ATTACH_FORCE_REBUILD_LOG

USE [master]
GO
CREATE DATABASE [DataBasename] ON 
( FILENAME = N'C:\data\DataBasename.mdf' )
 FOR ATTACH_FORCE_REBUILD_LOG
GO
Valentin Petkov
sumber
Terima kasih, Anda menyelamatkan hari saya
Shahrokhian
1

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.

toddmo
sumber
1

Saya menghadapi masalah yang sama di VS 2019. jika ada yang masih menghadapi masalah yang sama maka pastikan Anda memiliki / melakukan hal-hal berikut:

  1. Anda harus menginstal SQL Express di m / c Anda
  2. Seharusnya SSDT diinstal di VS (dalam VS 2019- pastikan untuk memeriksa komponen ini saat menginstal) untuk versi sebelumnya - Anda harus menambahkan komponen ini secara eksternal
  3. Tambahkan 'User Instance = True' ke string koneksi Anda
  4. Saya pikir ini opsional - buka VS dan SQL Express dalam mode administratif dan login sebagai admin ke SQL Express
Ashu_90
sumber
0

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.

Chris Moschini
sumber
0

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.

Erik Forsmyr
sumber
Saya pikir bagian itu cukup jelas. akan lebih baik untuk mengetahui bagaimana cara mengatasinya.
dansan
0

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.

basis data Pengguna
sumber
0

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.

nuzzolilo
sumber
0

Dalam kasus saya yang menyelesaikan masalah adalah sebagai berikut:

USE [master]
GO
CREATE DATABASE [AdventureWorks2008R2] ON
( FILENAME = 'C:\Program Files\Microsfot SQL Server\MSSQL10_50.SQLEXPRESS\MSSQL\DATA\AdventureWors2008R2_Data.mdf')
FOR ATTACH_REBUILD_LOG
Nick_
sumber
0

Salin Database ke folder lain dan lampirkan atau Masuk SQLServer dengan "Otentikasi Windows"

masukkan deskripsi gambar di sini

Chưa biết
sumber
0

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.

Seni
sumber