Bir veritabanı eklenirken erişim reddedildi


148

SQL Server 2008 geliştirici sürümünü kullanıyorum. AdventureWorks2008 veritabanını eklemeye çalışıyordum.

Eklemeye çalıştığımda bir "erişim reddedildi" hatası aldım. Olay günlüğüne göre, O / S'den geldi:

Açılamadı: 0 numaralı dosya için D: \ ProjectData \ AdventureWorks \ AdventureWorksLT2008_Data.mdf dosyası açılamadı. İşletim sistemi hatası: 5 (Erişim reddedildi.).

"NTFS sorunu" diye düşündüm, ancak Sistem (ve ben) her iki dosyaya da değişiklik erişimine sahip.

Sa olarak oturum açarsam veritabanını başarıyla ekleyebileceğimi öğrendim, ancak kullanıcı hesabım çalışmıyor.

Makinemdeki yerel yöneticiler grubunun bir üyesiyim ve SQL Server örneğinde sysadmins rolündeyim.

Neden sa olarak giriş yapmam gerektiğine dair bir fikrin var mı?


MDF dosyası herhangi bir şans eseri şifrelenmiş mi?
Brettski

Hayır - benim için asıl merak edilen şey, sa olarak (Management Studio kullanarak) giriş yaparsam iyi çalışması, ancak yerel yönetici hesabımı kullanırsam çalışmıyor olmasıdır. Hesabım bir yönetici, bir etki alanı yöneticisi ve SQL Server'ı kurduğumda oturum açtığım hesap (kurulum sırasında mevcut hesabımı bir sistem yöneticisi yapma seçeneği vardı ve bunu yaptım).
JMarsch

1
UAC'nin W7'de nasıl çalıştığı budur, sürpriz değil.
Al Kepp

@AlKepp Nope - bir UAC şey değil. Sadece sa düzeltmesi olarak oturum açmak (SQL sunucu hesabı, UAC ile ilgisi yoktur) sorunu giderir. Ayrıca, yalnızca yerel yöneticiler grubunun bir üyesi olarak izinlerimi alıyorum - AD kimlik bilgilerimin çalışması için yükseltme yapmam gerekmiyor.
JMarsch

Yanıtlar:


164

Yönetici olarak SQL Server Management Studio'yu çalıştırın. (sağ tıklama-> yönetici olarak çalıştır) benim durumumdaki tüm tuhaflıkları halletti.

SQL SRV EXPRESS 2008 R2. Windows 7


5
Management Studio'yu yönetici olarak çalıştırmak benim için ÇALIŞMADI. Bu hata, Windows hizmetini başlatmaya çalışırken ortaya çıkar.
nuzzolilo

9
Yönetici olarak çalıştırmak ilk adımdır. İkinci adım, Windows Kimlik Doğrulaması ile SQL Server'da oturum açmaktır. (Bu yöntem benim için çalıştı!)
Furkan Ekinci

3
Benim için de çalıştı. Windows'taki izin istemlerinin ve hataların ne kadar yorucu ve sinir bozucu olduğunu kelimelerle ifade edemez. BEN BİR YÖNETİCİYİM!
David Ustalar

Benim için de çalıştı. İlk başta işe yarayacağını düşünmemiştim çünkü SSMS sadece bir UI istemcisi. Hizmetin Yönetici olarak çalıştırılması gerektiğini düşündüm. Ancak SSMS'yi Yönetici olarak çalıştırmak yeterlidir.
Luke Vo

2
Benim için de çalıştı. SQL Server 2019, SSMS 18.4
Ryan Thomas

106

Tüm yorumlar için teşekkür ederim. Bazılarınız beni cevaba yönlendirmeye yardımcı oldu. İşte bulduğum şey:

Bu bir NTFS izin sorunuydu ve bir SQL sorunu değil. Dahası, bir çeşit böceğe benzer (ve tekrarlanabilir).

Sorun: Kullandığım hesap, mdf ve ldf dosyaları için tam denetim NTFS izinlerine sahipti. Ancak, grup üyeliği aracılığıyla bu izinlere sahipti (Yerel Yöneticiler grubunun izinleri vardı ve hesabım yerel yöneticilerin bir üyesidir). (İzinleri doğruladım)

Eklemeyi denersem, benim adıma SQL Server'a bağlanın (yöneticiler grubunda olduğum yer), NTFS sorunu ile başarısız oluyor.

Ancak, yerel yönetici grubunun sahip olduğu aynı dosya izinlerini doğrudan Etki Alanı Hesabıma verirsem, hiçbir sorun yaşamadan ekleyebilirim.

(oh, ve evet, bu makinedeki yerel grupları kontrol ettim ve etki alanı hesabımın gerçekten yerel yöneticiler grubunun bir üyesi olduğunu doğruladım).

Bu nedenle, hata, bazı kodların (SQL Server veya Management Studio'da) kullanıcı hesabının sahip olduğu izinleri kontrol etmesi, ancak kullanıcı hesabının devraldığı grup izinlerini kontrol edecek kadar ileri gitmemesi nedeniyle oluşuyor gibi görünüyor.

Bu bana garip geliyor, ama onu tekrar tekrar üretebilirim, bu yüzden cevabın bu olduğu sonucuna vardım.

Güncelleme: Bunu bir hata olarak bildirdim: https://connect.microsoft.com/SQLServer/feedback/details/539703/access-denied-attaching-a-database-when-permissions-are-inherited


104
Benim gibi Windows 7 kullanıyorsanız, bu hatayı almamak için SQL Server Management Studio'yu Yönetici olarak çalıştırmanız gerekecektir.
Antony

4
Win7 Pro'da SS2008 Express kullanılarak çoğaltılmıştır. Hem sqlcmd hem de SSMS için aynı sorun. == Meldung '5120', Ebene '16', Durum '101', Sunucu 'DAGO \ SQLEXPRESS', Zeile 1 - 'Kalıp physische Datei' D: \ data \ mssql \ drei.mdf 'kann nicht geöffnet werden. Betriebssystemfehler 5: '5 (Zugriff verweigert) == Kullanıcıya tam erişim (erişimi olan yerel yönetici grubunun bir üyesi olan) vermek sorunu çözer. Ayrıca yönetici olarak sqlcmd'yi (veya SSMS'yi) çalıştırmak bu hatayı oluşturmaz.
Lumi

1
Cevap Anthony Highsky'de. Management Studio'yu Yönetici olarak çalıştırdığınızdan emin olmanız yeterlidir.
James

Benim için aynı sorun ve çözüm. 2008R2, Win 7, vb. Kendimi açıkça güvenlik listesine ekledim ve işe yaradı. Sanırım SQL Server eklendikten sonra bunları okuyabilir, ancak eklerken kimlik bilgilerimin altında değil?
Andrew Backer

4
Management Studio'yu yönetici olarak çalıştırmak benim için ÇALIŞMADI. Bu hata, Windows hizmetini başlatmaya çalışırken ortaya çıkar.
nuzzolilo

20

Gönderilen cevaplara ek bilgi eklemek istiyorum.

Veritabanını çıkarırken dikkatli olun, çünkü oturum açtığınız Windows kullanıcısı .mdf dosyası için izinlere sahip tek kullanıcı olur! Kullanıcıyı SQLServerMSSQLUser$<computer_name>$<instance_name>ve Administrators hesabını içeren .mdf dosyasının orijinal izinleri, oturum açtığınız her Windows kullanıcısı tarafından (sql sunucu kullanıcısı değil) üzerine yazılır. Boom, tüm izinler aynen böyle gitti. Diğerlerinin söylediği gibi .mdf dosyanızı sağ tıklayın ve izinleri iki kez kontrol edin.

Veritabanına bağlanmak için SSMS kullandığım için (hangi sql sunucu hesabının önemi yok) ve veritabanını ayırdığım için bu problemle karşılaştım. Bunu yaptıktan sonra, Windows kullanıcım .mdf dosyası için herhangi bir izni olan tek kişiydi. Daha sonra sa hesabını kullanarak db'yi eklemeye çalıştığımda, "erişim reddedildi" hatası verdi.

Orijinal izinleri dokunmadan korumak için veritabanını çevrimdışına almalı, ardından ayırmalı ve şu sırayla eklemelisiniz:

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

1
Bunun için teşekkürler! Ayrıca serveradmin ayrıcalıklarına sahip bir SQL Server Authenticated hesabı kullanarak da oturum açtıysanız, bunu doğru yapmanın çok daha kolay olduğunu düşünüyorum.
William Rose

Ne yazık ki, veritabanını bir Windows kullanıcısı yerine 'sa' olarak oluşturmuşsam bu bana yardımcı olmuyor
David Gardiner

"Veritabanını çıkarırken dikkatli olun". SSMS'ye dikkatli olmasını söyle. Sorunlarım, SSMS'yi kullanarak Veritabanını Kopyala komutunun beni hiçbir açıklama yapmadan şaft şehrinde bırakması nedeniyle oluştu
Alan Macdonald

19

.mdfDosyanızın bulunduğu klasöre izin ekleyin .

Bu adı kontrol edin: NT Service\MSSQLSERVER

Ve Locationsunucunuzun adını değiştirin .


6
O örneğinden örneğine değişebilir çünkü tam hesap adını bulmak için, bu çalıştırın: SELECT servicename, service_account FROM sys.dm_server_services.
Arve Systad

13

Bu soruna UAC (Kullanıcı Hesabı Denetimi) neden oluyor, değil mi? Kullanıcı hesabınız Yöneticiler grubunun bir üyesi olmasına rağmen, Windows 7'deki UAC, programları "yönetici olarak" çalıştırmadığınız sürece yönetici işleri yapmanıza izin vermez. SQL Server veya Management Studio ya da her neyse, gerçek bir hata değildir. (Sorunu biliyor olabilir ve yalnızca "hata 5" ten şikayet etmek yerine sizden yükseltilmiş izinler isteyebilir.)


13

Yönetici olarak SQL Server Management Studio'yu çalıştırın. (sağ tıklama-> yönetici olarak çalıştır) benim için Windows 7 - SQL server 2008 R2 ile çalıştı


1
Bu cevap olumlu oylanmalıdır. SSMS'yi Yönetici olarak çalıştırmak, bu cevabı tekrarlayan bir çözümdür. Microsoft bunu burada "beklenen davranış" olarak bildiriyor: bağlantı
FreeText

Bu MandoMando'nun cevabı ile aynı değil mi?
mortb

10

Windows 7'de bir SQL2005 veritabanı şu şekilde eklenebilir:

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

Ve sonra eklenen veritabanı başarıyla tamamlandı.


Bu, Windows 10 üzerinde Management Studio 2008 R2 ile SQL Server 2016 ile çalıştı :)
par

9

Eğer olarak giriş yaparken sa(veya herhangi bir SQL Server hesabı) Eğer, hesabınızın izinlere sahip olarak oturum bittiğinde, sen SQL Server hizmet hesabı olarak işleyen ediyoruz. Bazı nedenlerden dolayı uygun dosya erişiminiz yok ama hizmet hesabı var.


NTFS sorunu da düşündüğüm ilk şeydi, ancak sorun bu gibi görünmüyor: Yerel yöneticiler grubunun bir üyesiyim ve yöneticilerin mdf ve ldf dosyalarında "tam denetim" izinlerine sahip olduğunu doğruladım . Ayrıca dosyaların sahibiyim - yeni bir dizin oluşturdum ve mdf / ldf dosyalarını kendi konumlarına kendim kopyalamıştım.
JMarsch

@JMarsch: @Nick, 'sa'nın hesabınızda bulunmayan bir dizi SQLSERVER HAKLARINA - NTFS haklarına değil - sahip olduğunu söylüyor.
Trevoke 01

@Trevoke: Seninleyim. Bu durumda, kullanıcı hesabıma hangi hakları atamam gerekir? (Ben zaten sysadmin rolüne
atandım

2
Eski cevap, bu, ancak benim gibi insanlar için beş dakika önce: hizmetin tam kullanıcı adını çalıştırarak bulabilirsinizSELECT servicename, service_account FROM sys.dm_server_services
Arve Systad

6

Bu çözümü buldum: .mdf dosyanızı sakladığınız klasöre sağ tıklayın -> Özellikler'e tıklayın -> Güvenlik sekmesini seçin, Düzenle'ye tıklayın ve tam kontrol verin. Bu yardımcı olur umarım!


5

saKullanıcı NTFS hesapları kullanır SQLServerMSSQLUser$<computer_name>$<instance_name>ve SQLServerSQLAgentUser$<computer_name>$<instance_name>veritabanı dosyaları erişim. Bu kullanıcılardan biri veya her ikisi için izin eklemeyi deneyebilirsiniz.

saKullanıcıyla hiçbir sorunun olmadığını söylediğiniz için sorununuzu çözer mi bilmiyorum ama umarım yardımcı olur.


5

Benimle - Pencere 8'de çalışıyor - Sağ tıklayın SQL Server Manager Studio -> Yönetici ile çalıştır. -> sorun eklemeyin


5

Kolayca ancak radikal bir şekilde düzeltilebilir , sadece mdf dosyasını sakladığınız klasöre gidin . dosya seçin-> Sağ tıklayın -> özellikleri tıklayın ve oturum açmış kullanıcı Güvenliği için dosyaya tam izin verin .


3

Bu sorunla her karşılaştığımda, SQL sunucusunda kurulan varsayılan veritabanı dizininden farklı bir dizinde bulunan bir veritabanını eklemeye çalışırken oldu.

Çeşitli dizinler ve hesaplar için izinlerle jacking yapmak yerine, veri dosyanızı sql sunucusunun bulmayı beklediği dizine taşımanızı şiddetle tavsiye ederim.


Pek çok durumda, amacınıza katılıyorum, ancak SQL sunucusuyla, ölçeklenebilirlik için veritabanlarınızı genellikle farklı iş millerinde veya hacimlerde konumlandırabilmek istersiniz. Aslında, işlem verimini artırmak için işlem günlüğünü veritabanından ayrı bir iş miline koymak yaygın bir uygulamadır.
JMarsch

@JMarsch: Evet .. dizinler, varsayılan veriler ve günlük konumları için Sunucu Özellikleri> Veritabanı Ayarları sekmesinden yapılandırılabilir ...
NotMe

Bu, varsayılanları kapsar, ancak bu yalnızca varsayılanlardır. Dbs'yi başka bir yere koymak tamamen kabul edilebilir bir durumdur ve sunucunuz aktif olarak kullanılan 1'den fazla veritabanını yönetiyorsa, bu kadar da nadir değildir.
JMarsch

Varsayılan sql sunucu dizininde bile aynı sorunu yaşıyorum: c: \ Program Files \ Microsoft SQL Server \ MSSQL10_50.SPATIAL_IM \ MSSQL \ DATA \ mydb.mdf on win7.
goku_da_master

3

Bu bilgiyi de eklemek istedim.

http://www.mssqltips.com/sqlservertip/2528/database-attach-failure-in-sql-server-2008-r2/

Çözüm

Bu hatayı, ayırma ve ekleme işlemlerini iki farklı giriş yaptığı için alırsınız. Dolayısıyla, dosyalar ayrıldığında ilk girişe aitti, ancak kullanılan giriş mdf ve ldf dosyalarının sahibi olmadığı için ek başarısız oldu.

Veritabanı dosyalarını ayırdığımızda, sahip, detach komutunu yapan kişi olur, bu nedenle sorunu çözmek için mdf ve ldf dosyalarının sahibi olarak diğer girişi değiştirmemiz veya eklememiz gerekir.

"Filename.mdf" dosyasına sağ tıklayın ve mdf dosyasının izinlerini kontrol etmek için özellikleri seçin. Burada sadece bir hesabın "dosyaadı.mdf" dosyası için izne sahip olduğunu görüyoruz, çünkü bu, veritabanını ayırmak için kullanılan hesaptı.

Bu sorunu çözmek için, diğer oturum açma bilgilerini veya gerekli diğer oturum açma bilgilerini eklemek ve oturum açma Tam Denetimini vermek için Ekle ... Bunu "ldf" dosyası için de yapmalısınız. Bu görevi tamamladığınızda Tamam düğmesine tıklayın. (Diğer işletim sistemi sürümleri için bir Düzenleme seçeneğiniz olabileceğini unutmayın, önce bunu tıklayın, ardından Ekle ... seçeneğini göreceksiniz.)


SSMS'deki bağlantımı ayırmayı gerçekleştiren kullanıcıyla eşleşecek şekilde değiştirdim ve eki gerçekleştirebildim.
glitzsfa

2

Sahip olduğum bu problemin belirli bir varyasyonuna sahip olan herkes için değeri ne ise:

  • SQL Express 2008
  • Visual Studio 2010 Premium

App_data klasörünün bağlam menüsü aracılığıyla, hata ayıklama amacıyla bir SQL Express veritabanı oluşturdum. Bağlantı dizesi (NHibernate tarafından kullanılan) aşağıdaki gibiydi:

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

Bu bana veritabanı dosyasında aynı "Erişim reddedildi" hatasını verdi. Çeşitli kullanıcılara klasör ve dosyalar için Tam Denetim vermeye çalıştım, bir noktada "Herkes" bile. Hiçbir şey yardımcı olmadı, bu yüzden eklenen izinleri tekrar kaldırdım.

Sonunda ne çözdü , Visual Studio'da Sunucu Gezgini'ni açmak, ardından MDF'ye bağlanmak ve onu yeniden ayırmaktı. Bunu yaptıktan sonra web uygulamam veritabanına sorunsuzca erişebildi.

PS. Krediler, bu sorunu araştırırken bulduğum bu blog gönderisine gidiyor ve sorunu çözmek için veritabanını ekleme / çıkarma fikrini tetikliyor.


2

Bir veritabanı mdf dosyasını varsayılan Veri klasöründen asp.net app_data klasörüme taşıdım ve veritabanını tekrar çevrimiçi yapmaya çalışırken bu sorunla karşılaştım.

Orijinal konumdaki diğer dosya veritabanlarının güvenlik ayarlarını taşınan dosyalarla karşılaştırdım ve MSSQL $ SQLEXPRESS'in yeni konumlarındaki dosyalara izin atanmadığını fark ettim. "NT SERVICE \ MSSQL $ SQLEXPRESS" için Tam denetim ekledim (bu NT HİZMETİNİ içermelidir) ve çok iyi eklendi.

Orijinal Veri klasörünün bu izinlere sahip olduğu ve dosyalar onu devraldığı görülüyor. Dosyaları ve miras kesintilerini elbette taşıyın.

Başka bir projenin doğrudan oluşturduğum mdf dosyasını app_data klasörüne kontrol ettim. MSSQL $ SQLEXPRESS izinlerine sahip değil. Hmmm. Merak ediyorum neden SQL Express birini seviyor ama diğerini sevmiyor?


Bu çözüm, bir günlük dosyasını ayrı bir diske taşırken Windows 10 ve SQL Server 2017'de benim için çalıştı. Benim durumumda kullanıcı adı "NT SERVICE \ MSSQLSERVER" idi
John Hanley

1

Bu, NTFS izinlerine benziyor. Bu genellikle SQL Server hizmet hesabınızın dosyaya salt okuma erişimine sahip olduğu anlamına gelir (SQL Server'ın nasıl oturum açtığınıza bakılmaksızın veritabanı dosyalarına erişmek için aynı hizmet hesabını kullandığını unutmayın). Kendiniz olarak oturum açmakla sa olarak oturum açmak arasında klasör izinlerini değiştirmediğinizden emin misiniz? Çıkarır ve tekrar denerseniz, hala aynı sorun mu yaşıyor?


Benim durumumda, hayır - emin olmak için birkaç kez yeniden yaptım. Sorun, hesabımın dosyalara yalnızca belirli bir düzeyde yönlendirme yoluyla erişebilmesiydi - Domain Admin grubunun bir üyesiydim. Etki Alanı Yöneticisi, makinedeki Yerel Yöneticiler grubunun bir üyesiydi ve Yerel Yöneticiler (ve sistem) klasör üzerinde tam denetime sahipti. (yani 2 seviyeli grup yönlendirmesi vardı). Doğrudan kendime izinler atadıysam işe yaradı, kaldırırsam, dosyaları Explorere'den vb. Kopyalayabilir / silebilirdim, ancak SQL Server bunları yükleyemedi.
JMarsch

Veritabanını eklemeye çalıştığınızda. Giriş olarak Windows authenticated userbize veritabanı dosyaları izni üstesinden yardımcı olacaktır. (Bu durumda, Windows işletim sistemi olan diskte MS SQLServer örneği).
Do Nhu Vy

1

Bir veritabanı eklerken de aynı sorunu yaşadım. Bu bir SQL sorunu değildi, bir hesap sorunuydu. Panel kontrolü / Kullanıcı Hesabı Kontrol Ayarları'na gidin / "asla bildirme" olarak ayarlayın. Sonunda bilgisayarı yeniden başlatın ve benim için çalıştı.


1

Veritabanına sağ tıklayıp sihirbazdaki AdventureWorks2012_Data_log.ldf günlük dosyasını kaldırarak mdf dosyasını ekledim. Mdf dosyası aşağıdaki konuma yerleştirildi

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

Yukarıdaki yöntem sorunu çözmeme yardımcı oldu.


1

Bu sayfayı okuyordum ve orada ilginç bir cümle var:

Dikkat: Kullanıcıları bu rollere eklerken çok seçici olun. Örneğin, sysadmin her veritabanında dbo ile eşleşir ve sa hesabını kullanarak oturum açmaya eşdeğerdir.

Elbette şuna da sahipler:

Kullanıcılara ve rollere verilen ve veritabanına özel izinler. REDDET hariç tüm izinler kümülatiftir. Kullanıcı düzeyinde veya rol düzeyinde reddedilen bir izin, sysadmin sabit sunucu rolü haricinde diğer rol üyelikleri aracılığıyla verilen aynı izni geçersiz kılar. (Bir sistem yöneticisi, üyesi olduğu bir rolün REDDET izni olsa bile tüm izinleri korur.)

Öyleyse, bir etki alanı yöneticisiyseniz ve SQL 'sysadmin' grubundaysanız, dünya sizin kabukluunuz olmalıdır.

Tabii ki, Microsoft'a göre, şu iki sayfaya hızlıca göz atmalısınız:
Veritabanı Ön Koşullarına Bağlantı

Veritabanlarını Kurma Bağlantısı

Yaramazlık yapıyorsun ve bunları manuel olarak eklemeye çalışıyorsun :) Cidden, AdventureWorks2008 veritabanı için tüm ön koşullara sahip misin?
Bunun başka bir Microsoft tuhaflığı / uç durumu olduğundan şüpheleniyorum, ancak yanılıyor olabilirim.


+1, çünkü yorumunuz cevabı bulmama yardımcı oldu. Bulgularımı bu konuya göndereceğim. BTW (Çalıştığım yerdeki çok garip politikalar nedeniyle "yaramazlık yapıyordum" - adventureworks veritabanı bir exe olarak dağıtıldı. Exe'yi indiremiyorum. (Zip dosyalarını ve MSI dosyalarını indirebiliyorum, bu yüzden göremiyorum exe filtrelemenin yoluna girmekten başka herhangi bir şeyi gerçekten nasıl yaptığını, ancak kurallar bunlar) Her neyse, ham mdf dosyalarını
codeplex'ten

1

görüntü açıklamasını buraya girin

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

FOR ATTACH olarak değiştirin -> FOR ATTACH_FORCE_REBUILD_LOG

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

Teşekkürler, günümü kurtardınız
Shahrokhian

1

Bu hatayı sa olarak aldım. Benim durumumda, veritabanı güvenliği önemli değildi. Herkesin tam denetimini mdf ve ldf dosyalarına ekledim ve eklenti iyi gitti.


0

Aslında NTFS izinleri ve SQL Server'da garip bir hatadır. Yukarıdaki hata raporunun doğru olduğundan emin değilim veya ek bir hataya işaret ediyor olabilir.

Bunu Windows 7'de çözmek için SQL Server Management Studio'yu normal olarak çalıştırdım (Yönetici olarak değil). Daha sonra MDF dosyasını eklemeye çalıştım. Bu süreçte yola yapıştırmak yerine kullanıcı arayüzünü kullandım. Yolun benden kesildiğini fark ettim. Bunun nedeni, yazılımın sizin için eklediği MS SQL Server (SQLServerMSSQLUser $ makineadı $ SQLEXPRESS) kullanıcısının klasöre erişim izni olmamasıdır (bu durumda, kendi kullanıcı klasörlerimin derinliklerinde bir klasör).

Yolu yapıştırmak ve ilerlemek yukarıdaki hataya neden olur. Bu yüzden - MS SQL Server kullanıcısına, reddedildiği ilk dizinden (kullanıcı klasörüm) başlayarak okuma izni verdim. Daha sonra yayılma işlemini derhal iptal ettim çünkü sonsuza kadar sürebilir ve gerekli olan sonraki alt klasöre okuma izinlerini tekrar uyguladım ve bunun tamamen yayılmasına izin verdim.

Son olarak, MS SQL Server kullanıcısına db için .mdf ve .ldf dosyalarına Değiştirme izinleri verdim.

Artık veritabanı dosyalarına ekleyebilirim.


0

Sql server 2012'yi çalıştırırsanız, bir mdf dosyasının eski bir sürümünü eklemeye çalışarak bu hatayı alabilirsiniz. Sql server 2008'den bir mdf dosyası.


Bence bu kısım nispeten açıklayıcıydı. nasıl çözüleceğini bilmek iyi olur.
dansan

0

Sorunu sadece ortak klasöre eklemek istediğiniz .mdf dosyasını taşıyarak çözdüm, benim durumumda onu users / public klasörüne taşıdım. Sonra oradan sorunsuz bir şekilde takıyorum. Bu yardımcı olur umarım.


0

Buradaki diğer çözümlerle sorunu çözemeyenler için aşağıdaki düzeltme benim için çalıştı:

SQL Server kurulumunuzda "DATA" klasörünüze gidin, sağ tıklayın, özellikler, güvenlik sekmesi ve "NETWORK SERVICE" kullanıcısı için tam kontrol izinlerini ekleyin.

http://decoding.wordpress.com/2008/08/25/sql-server-2005-expess-how-to-fix-error-3417/

(Yukarıdaki bağlantı SQL 2005 içindir, ancak bu benim için bir SQL 2008 R2 kurulumunu düzeltti).

Bazı ek bilgiler: Bu sorun, ikincil bir sabit sürücüyü (SQL kurulumunda olduğu) değiştirdikten sonra benim için ortaya çıktı. Tüm dosyaları kopyaladım ve orijinal sürücü harfini yeni sabit diske geri yükledim. Ancak, güvenlik izinleri kopyalanmadı. Sanırım bir dahaki sefere daha iyi bir veri kopyalama yöntemi kullanacağım.


0

Benim durumumda sorunu çözen şey şuydu:

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

0

Veritabanını başka bir klasöre kopyalayın ve SQLServer'da "Windows Kimlik Doğrulaması" ile oturum açın veya ekleyin

görüntü açıklamasını buraya girin


0

Veritabanını çıkardıktan ve ldf ve mdf dosyalarını C sürücüsünden F'ye taşıdıktan sonra yeniden eklerken aynı sorunu yaşadım.

Düzeltmek için her iki dosyaya da SAHİP HAKLARI sorumlusunu eklemem gerekiyordu ve Özellikler iletişim kutusunun Güvenlik sekmesinde dosyalar üzerinde tam kontrol verdim.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.