Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Ayrıntılar
| Özellik | Değer |
|---|---|
| Ürün Adı | SQL Server |
| Olay Kimliği | 4064 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | DB_UFAIL_FATAL |
| İleti Metni | Kullanıcının varsayılan veritabanı açılamıyor. Oturum açılamadı. |
Explanation
SQL Server oturum açma bilgileri, varsayılan veritabanındaki oturum açma işlemiyle ilişkili bir veritabanı kullanıcısıyla ilgili izin sorunları veya varsayılan veritabanıyla ilgili bir sorun nedeniyle SQL Server'a bağlanamadı.
İzin sorunları aşağıdakilerden biri veya daha fazlası olabilir:
- Oturum açma işleminin varsayılan veritabanında karşılık gelen eşlenmiş bir kullanıcı yok.
- Oturum açma bilgilerine varsayılan bir veritabanı atadınız ancak belirtilen veritabanında kullanıcı eşlemesi oluşturmadınız.
- Oturum açma için eşlenen kullanıcının erişimi reddedildi. (Örneğin, kullanıcı yanlışlıkla db_denydatareader bir sabit veritabanı rolüne eklenirse bu durum oluşabilir.)
Varsayılan veritabanı, bağlantı sırasında aşağıdaki nedenlerle kullanılamıyor olabilir:
- Varsayılan veritabanı şüpheli modundadır.
- Varsayılan veritabanı artık yok.
- Varsayılan veritabanı adı doğru değil.
- Varsayılan veritabanı tek kullanıcı modundadır ve tek kullanılabilir bağlantı zaten birisi veya başka bir şey tarafından kullanılır.
- Varsayılan veritabanı ayrılmıştır.
- Varsayılan veritabanı RESTRICTED_USER durumuna ayarlanır.
- Varsayılan veritabanı çevrimdışıdır.
- Varsayılan veritabanı ACIL DURUM durumuna ayarlanır.
- Varsayılan veritabanı, veritabanı yansıtmasının bir parçasıdır.
Buna ek olarak, oturum açma hesabı birden çok grubun üyesi olabilir ve bu gruplardan birinin varsayılan veritabanı bağlantı sırasında kullanılamaz.
SQL Server'daki veritabanı kullanıcıları hakkında daha fazla bilgi için bkz. Veritabanı Kullanıcısı Oluşturma.
Kullanıcı eylemi
Aşağıdaki eylemlerden birini gerçekleştirebilirsiniz:
Sorunu geçici olarak çözme
Şu anda yapılandırılmış olan varsayılan veritabanına erişmeniz gerekmiyorsa ve SQL Server Management Studio (SSMS) kullanarak diğer işlemler için SQL Server örneğine bağlanmanız gerekiyorsa şu adımları izleyin:
SQL Server Management Studio'yu (SSMS) açın.
Nesne Gezgini'ndaVeritabanı AltyapısınıBağla'yı> seçin.
Sunucuya Bağlan iletişim kutusunu doldurun.
Seçenekseçin.
Bağlantı Özellikleri'nin altında, aşağıdaki seçeneklerden birini kullanarak Veritabanına bağlan değerini değiştirin:
Oturum açma bilgisi sysadmin rolünün bir üyesiyse, girin
masterve BAĞLAN'ı seçerek SQL Server'a bağlantı kurun. SQL Server'a başarıyla bağlandıktan sonra, varsayılan veritabanınızı şu anda SSMS'deki oturum açma özelliklerinin Genel sayfasında bulunan farklı bir veritabanıyla değiştirebilirsiniz. Daha fazla bilgi için Giriş Oluştur sayfasına bakınız.Oturum açma bilgisi sysadmin rolünün üyesi değilse, sunucuya erişiminiz olduğunu bildiğiniz bir veritabanı adı girin. Alternatif olarak, gibi
masterbir sistem veritabanı adı girmeyi deneyebilir ve ardından Bağlan'ı seçebilirsiniz. Sistem yöneticiniz veritabanındaki konuk kullanıcıyamasteryönelik izinleri açıkça reddettiyse bu adım çalışmayabilir. Bu senaryoda, sorunu çözmek için sistem yöneticinizle birlikte çalışmanız gerekir.
Sorunu düzeltme
Sistem yöneticisi, aşağıdaki sorguyu kullanarak kullanıcının geçerli varsayılan veritabanının ne olduğunu denetleyebilir:
SELECT name, default_database_name
FROM sys.server_principals
WHERE type = 'S' AND name = '<sql-login>';
İlişkili nedenlerle ilgili sorunu düzeltmek için uygun eylemi belirlemek için aşağıdaki tabloyu kullanın:
| Nedeni | Çözünürlük |
|---|---|
| Oturum açma bilgilerinin varsayılan veritabanında kullanıcı eşlemesi yok veya kullanıcının erişimi reddedildi. | Bu veritabanı kullanıcıları yalnız bırakılmış kullanıcılar olarak da adlandırılır. Bu sorun genellikle veritabanları iki sunucu örneği arasında taşındığında oluşur ve 4064 hatasının yaygın nedenlerinden biridir. Yalnız bırakılmış kullanıcıları algılamak ve sorunu çözmek için bkz . Yalnız bırakılmış kullanıcıların (SQL Server) sorunlarını giderme. |
| Oturum açma için veritabanı kullanıcısı yok | Veritabanı kullanıcısı oluşturun ve veritabanına erişmek için ilgili izinleri atayın. |
| Veritabanı kullanıcı hesabı veritabanına erişim izinlerini reddetti | Veritabanındaki kullanıcı özelliklerine gidin (Veritabanı düğümünü > genişlet Güvenlik>Kullanıcıları) ve kullanıcının Üyelik sayfasındaki db_denydatareader rolün parçası olup olmadığını denetleyin. Ayrıca sys.fn_my_permissions kullanarak kullanıcının etkin izinlerini de de de kontrol edebilirsiniz. |
| Varsayılan veritabanı şüpheli modundadır. | Bir veritabanı birkaç nedenle şüpheli hale gelebilir. Olası nedenler arasında işletim sistemi tarafından bir veritabanı kaynağına erişim reddi ve bir veya daha fazla veritabanı dosyasının kullanılamama veya bozulması sayılabilir. Veritabanının durumunu denetlemek için şu sorguyu kullanabilirsiniz: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';. SSMS'de şüpheli veritabanlarının durumu (Kurtarma Bekleniyor) olarak gösterilir. Bu durumu çözmek için veritabanını yedekten kurtarmanız gerekebilir. |
| Bağlantı dizesinde yanlış veritabanı adı | Var olmayan bir veritabanına bağlanmaya çalıştığınızda aşağıdaki hata iletisini görebilirsiniz:Cannot open database "AdventureWorks" requested by the login. The login failed.Veritabanı yönetim sistemi (DBMS) hata iletisini de gösterebilir Login failed for user CONTOSO\user1 . Daha fazla bilgi için bkz . MSSQLSERVER_18456.SQL Server hata günlüğü aşağıdaki iletiyi içerir: "'CONTOSO\User1' kullanıcısı için oturum açılamadı. Neden: Açıkça belirtilen 'AdventureWorks' veritabanı açılamadı." Bu hatayı çözmek için hem hata iletisinde hem de hata günlüğü girdisinde veritabanı adının aynı olduğundan emin olun. Yanlışsa bağlantı dizesini değiştirin veya kullanıcıya gerekli izinleri verin. |
| Varsayılan veritabanı artık yok. | Veritabanını kasıtlı olarak sunucudan kaldırdıysanız, SSMS veya ALTER LOGIN (Transact-SQL) deyimini kullanarak oturum açma için varsayılan veritabanını sunucuda var olan başka bir veritabanıyla değiştirin. İsteğe bağlı olarak, şu sorguyu kullanarak sunucuda varsayılan veritabanı bu var olmayan veritabanına ayarlanmış başka oturum açma işlemleri olup olmadığını denetlemek isteyebilirsiniz: SELECT name AS Login_Name FROM sys.server_principals where default_database_name = '<removed-dbname>';. |
| Varsayılan veritabanı tek kullanıcı modundadır ve tek bağlantı yönetici veya başka biri tarafından kullanılır. | Veritabanı bakım amacıyla tek kullanıcı moduna ayarlandıysa, bakım etkinliği tamamlandıktan sonra şu sorguyu kullanarak veritabanını yeniden çok kullanıcılı moda ayarlamanız gerekir: ALTER DATABASE <dbname> SET MULTI_USER;.Daha fazla bilgi için bkz. Veritabanını tek kullanıcı moduna ayarlama. Not: Veritabanının tek kullanıcı modunda olup olmadığını denetlemek için şu sorguyu kullanabilirsiniz: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';.Veritabanına erişimi kısıtlamanız gerekiyor ancak etkilenen oturum açma işlemleri için bağlantıyı etkinleştirmek istiyorsanız, varsayılan veritabanını sunucuda farklı bir veritabanıyla değiştirin. |
| Varsayılan veritabanı ayrılmıştır. | Veritabanını ayırmak, veritabanını SQL Server örneğinden kaldırır ve artık erişilebilir değildir. Oturum açma işlemleri için kullanılabilir hale getirmek için SSMS veya sp_attach_db saklı yordamı kullanarak veritabanını ekleyin. Daha fazla bilgi için bkz. Veritabanı Ayırma ve Ekleme (SQL Server). |
| Varsayılan veritabanı RESTRICTED_USER durumuna ayarlanmıştır. | Veritabanı RESTRICTED_USER durumuna ayarlandığında, veritabanına yalnızca db_owner sabit veritabanı rolünün ve dbcreator ve sysadmin sabit sunucu rollerinin üyeleri bağlanabilir. Artık ilgili veritabanına erişimi kısıtlamanız gerekmiyorsa, şu sorguyu kullanarak veritabanını çok kullanıcılı moda ayarlayın: ALTER DATABASE <dbname> SET MULTI_USER;.Not: Veritabanının kısıtlı kullanıcı durumunda olup olmadığını denetlemek için şu sorguyu kullanabilirsiniz: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>';.Veritabanına erişimi kısıtlamanız gerekiyor ancak etkilenen oturum açma işlemleri için bağlantıyı etkinleştirmek istiyorsanız, varsayılan veritabanını sunucuda farklı bir veritabanıyla değiştirin. |
| Varsayılan veritabanı çevrimdışıdır. | Çevrimdışı durumdaki bir veritabanı değiştirilemez. Şu sorguyu kullanarak veritabanınızı çevrimiçi yapabilirsiniz: ALTER database <dnname> SET ONLINE;.Veritabanının ÇEVRIMDıŞı olup olmadığını SSMS kullanarak veya şu sorguyu kullanarak devrebilirsiniz: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';.Daha fazla bilgi için bkz . Veritabanı Durumları ve ALTER DATABASE SET Seçenekleri (Transact-SQL) - SQL Server. Veritabanını hala çevrimdışı durumda tutmanız gerekiyorsa ancak etkilenen oturum açma işlemleri için bağlantıyı etkinleştirmek istiyorsanız, varsayılan veritabanını sunucuda farklı bir veritabanıyla değiştirin. |
| Varsayılan veritabanı ACIL DURUM durumuna ayarlanır. | Sistem yöneticisi tarafından sorun giderme için bir veritabanı ACIL DURUM durumuna geçirilmiş olabilir. Yalnızca sysadmin rolünün kullanıcıları, ACIL DURUM durumuna ayarlanmış veritabanlarına erişebilir. Şu sorguyu kullanarak veritabanınızı çevrimiçi yapabilirsiniz: ALTER database <dnname> SET ONLINE;.Veritabanının ACIL DURUMDA olup olmadığını SSMS kullanarak veya şu sorguyu kullanarak de kontrol edebilirsiniz: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status';.Daha fazla bilgi için bkz . Veritabanı Durumları ve ALTER DATABASE SET Seçenekleri (Transact-SQL). Veritabanını yine de ACİl DURUMDA tutmanız gerekiyorsa, ancak etkilenen oturum açma işlemleri için bağlantıyı etkinleştirmek istiyorsanız, varsayılan veritabanını sunucuda farklı bir veritabanıyla değiştirin. |
| Varsayılan veritabanı, veritabanı yansıtmasının bir parçasıdır. | Yansıtma sunucusundaki bir yansıtma veritabanına bağlanamazsınız ve bu davranış tasarım gereğidir. Veritabanının şu anda yansıtma rolünde olup olmadığını denetlemek için bu sorguyu SELECT DB_NAME(database_id) as database_name, mirroring_role_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = '<dbname>';kullanın. Veritabanı yansıtma hakkında daha fazla bilgi için bkz. Veritabanı Yansıtması (SQL Server). |
| Oturum açma hesabı birden çok grubun üyesi olabilir ve gruplardan birinin varsayılan veritabanı bağlantı sırasında kullanılamaz. | PowerShell kullanarak belirli bir kullanıcıya sahip grupları listelemek için bkz. Get-ADPrincipalGroupMembership (ActiveDirectory). |
Belirli bir kullanıcı için varsayılan veritabanını değiştirme
Kullanıcının varsayılan veritabanında değişiklik yapmak için ALTER ANY LOGIN iznine sahip olmanız gerekir. Değiştirilen oturum açma bilgisi sysadmin sabit sunucu rolünün bir üyesi veya CONTROL SERVER iznine sahipse, aşağıdaki değişiklikleri yaparken CONTROL SERVER iznini de gerektirir. Sysadmin rolünün üyeleri varsayılan olarak bu izinlere sahiptir. Daha fazla bilgi için bkz. ALTER LOGIN (Transact-SQL).
- SQL Server Management Studio
- sqlcmd yardımcı programı
- PowerShell
SSMS kullanarak varsayılan veritabanını değiştirme
SQL Server Management Studio (SSMS) kullanarak SQL Server örneğine bağlanın.
Kullanıcıyı bulmak ve kullanıcının varsayılan veritabanını SSMS'deki oturum açma özelliklerinin Genel sayfasında bulunan farklı bir veritabanıyla değiştirmek için Güvenlik>Oturum Açma Bilgileri'ni seçin. Daha fazla bilgi için Giriş Oluştur sayfasına bakınız.
SQL Server örneğine bağlandıktan sonra aşağıdaki örnekler gibi bir
ALTER LOGINdeyim yürütebilirsiniz:ALTER LOGIN <LoginName> WITH DEFAULT_DATABASE = <AvailableDatabaseName>;<AvailableDatabaseName>, örnekteki SQL Server oturum açma bilgileri tarafından erişilebilen mevcut veritabanının adı için bir yer tutucudur.<LoginName>, gerekliALTER LOGINizinlere sahip SQL Server oturum açma bilgileri için bir yer tutucudur.Örneğin:
ALTER LOGIN [SQLLogin] WITH DEFAULT_DATABASE = master; ALTER LOGIN [Constoso\Windowslogin] WITH DEFAULT_DATABASE = [AdventureWorks];
Hata 18456, hata 4064 ile birlikte görüntülenir
Kullanıcıya 4064 hatasını alan SSMS gibi uygulamaları kullandığınızda, SQL Server hata günlüğüne aşağıdaki ileti kaydedilir. Bu davranış tasarım gereğidir. Bu makalede belgelenen yordamları kullanarak başarısız oturum açma için varsayılan veritabanının düzeltilmesi 18456 hatasını otomatik olarak giderir.
2023-02-06 18:17:02.56 Logon Error: 18456, Severity: 14, State: 40.
2023-02-06 18:17:02.56 Logon Login failed for user '<user name>. Reason: Failed to open the database '<db_name>' specified in the login properties. [CLIENT: <hostname >]