MSSQLSERVER_4064
Berlaku untuk: SQL Server
Detail
Atribut | Nilai |
---|---|
Nama Produk | SQL Server |
ID Peristiwa | 4064 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | DB_UFAIL_FATAL |
Teks Pesan | Tidak dapat membuka database default pengguna. Proses masuk gagal. |
Penjelasan
Login SQL Server tidak dapat tersambung ke SQL Server, baik karena masalah izin dengan pengguna database yang terkait dengan login di database default, atau masalah dengan database defaultnya.
Masalah izin bisa berupa satu atau beberapa hal berikut ini:
- Login tidak memiliki pengguna yang dipetakan yang sesuai dalam database defaultnya.
- Anda menetapkan database default ke login tetapi tidak membuat pemetaan pengguna dalam database yang ditentukan.
- Pengguna yang dipetakan untuk masuk telah ditolak aksesnya. (Misalnya, ini dapat terjadi jika pengguna secara tidak sengaja ditambahkan ke peran database tetap db_denydatareader .)
Database default mungkin tidak tersedia pada saat koneksi karena alasan berikut:
- Database default dalam mode tersangka.
- Database default tidak lagi ada.
- Nama database default tidak benar.
- Database default berada dalam mode pengguna tunggal, dan satu-satunya koneksi yang tersedia sudah digunakan oleh seseorang atau sesuatu yang lain.
- Database default telah dilepaskan.
- Database default diatur ke status RESTRICTED_USER.
- Database default offline.
- Database default diatur ke status DARURAT.
- Database default adalah bagian dari cermin database.
Selain itu, akun masuk mungkin merupakan anggota dari beberapa grup, dan database default untuk salah satu grup tersebut tidak tersedia pada saat koneksi.
Untuk informasi selengkapnya tentang pengguna database di SQL Server, lihat Membuat Pengguna Database.
Tindakan pengguna
Anda dapat mengambil salah satu tindakan berikut:
Mengatasi masalah ini
Jika Anda tidak perlu mengakses database default yang saat ini dikonfigurasi dan Anda hanya perlu menyambungkan ke instans SQL Server untuk operasi lain menggunakan SQL Server Management Studio (SSMS), ikuti langkah-langkah berikut:
Buka SQL Server Management Studio (SSMS).
Pada Object Explorer, pilih Sambungkan>Mesin Database.
Isi dialog Sambungkan ke Server.
Pilih Opsi.
Di bawah Properti Koneksi, ubah nilai Sambungkan ke database menggunakan salah satu opsi berikut:
Jika login adalah anggota peran sysadmin, masukkan
master
, dan pilih Sambungkan untuk membuat koneksi ke SQL Server. Setelah berhasil tersambung ke SQL Server, Anda dapat mengubah database default Anda ke database lain yang saat ini tersedia di halaman Umum properti login di SSMS. Untuk informasi selengkapnya, lihat Membuat Login.Jika login bukan anggota peran sysadmin, masukkan nama database di server yang Anda ketahui aksesnya. Atau, Anda dapat mencoba memasukkan nama database sistem seperti
master
lalu pilih Sambungkan. Langkah ini mungkin tidak berfungsi jika administrator sistem Anda secara eksplisit menolak izin kepada pengguna tamu dalammaster
database. Dalam skenario tersebut, Anda perlu bekerja sama dengan administrator sistem untuk mengatasi masalah tersebut.
Memperbaiki masalah
Administrator sistem dapat memeriksa apa database default pengguna saat ini, menggunakan kueri berikut:
SELECT name, default_database_name
FROM sys.server_principals
WHERE type = 'S' AND name = '<sql-login>';
Gunakan tabel berikut untuk menentukan tindakan yang sesuai untuk memperbaiki masalah untuk penyebab terkait:
Penyebab | Resolusi |
---|---|
Tidak ada pemetaan pengguna di database default login atau pengguna telah ditolak aksesnya. | Pengguna database ini juga disebut sebagai pengguna tanpa induk. Masalah ini biasanya terjadi ketika database dipindahkan di antara dua instans server, dan merupakan salah satu penyebab umum kesalahan 4064. Untuk mendeteksi pengguna tanpa infan dan mengatasi masalah, lihat Memecahkan masalah pengguna tanpa infan (SQL Server). |
Tidak ada pengguna database untuk masuk | Buat pengguna database dan tetapkan izin yang relevan untuk mengakses database. |
Izin akun pengguna database ditolak untuk mengakses database | Navigasikan ke properti pengguna dalam database (Perluas Pengguna Keamanan>simpul >database) dan periksa apakah pengguna adalah bagian dari peran db_denydatareader di halaman Keanggotaan. Anda juga dapat memeriksa izin efektif pengguna menggunakan sys.fn_my_permissions. |
Database default dalam mode tersangka. | Database dapat menjadi tersangka karena beberapa alasan. Kemungkinan penyebabnya termasuk penolakan akses ke sumber daya database oleh sistem operasi dan tidak tersedia atau rusaknya satu atau beberapa file database. Anda bisa memeriksa status database menggunakan kueri ini: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; . Dalam SQL Server Management Directory, status database tersangka ditampilkan sebagai (Pemulihan Tertunda). Anda mungkin harus memulihkan database dari cadangannya untuk mengatasi situasi ini. |
Nama database yang salah dalam string koneksi | Saat Anda mencoba menyambungkan ke database yang tidak ada, Anda mungkin melihat pesan kesalahan berikut:Cannot open database "AdventureWorks" requested by the login. The login failed. Sistem manajemen database (DBMS) mungkin juga menampilkan Login failed for user CONTOSO\user1 pesan kesalahan. Untuk informasi selengkapnya, lihat MSSQLSERVER_18456.Log kesalahan SQL Server akan memiliki pesan berikut: "Login gagal untuk pengguna 'CONTOSO\User1'. Alasan: Gagal membuka database 'AdventureWorks' yang ditentukan secara eksplisit." Untuk mengatasi kesalahan ini, pastikan bahwa nama database sama dalam pesan kesalahan dan entri log kesalahan. Ubah string koneksi jika salah, atau beri pengguna izin yang diperlukan. |
Database default tidak lagi ada. | Jika Anda sengaja menghapus database dari server, ubah database default untuk masuk ke database lain yang ada di server menggunakan SSMS atau pernyataan ALTER LOGIN (Transact-SQL). Secara opsional, Anda mungkin ingin memeriksa apakah ada login lain di server yang database defaultnya diatur ke database yang tidak ada ini dengan menggunakan kueri ini: SELECT name AS Login_Name FROM sys.server_principals where default_database_name = '<removed-dbname>'; . |
Database default berada dalam mode pengguna tunggal, dan satu-satunya koneksi sedang digunakan oleh administrator atau orang lain. | Jika database diatur ke mode pengguna tunggal untuk tujuan pemeliharaan, Anda harus mengaturnya kembali ke mode multi-pengguna setelah penyelesaian aktivitas pemeliharaan, menggunakan kueri ini: ALTER DATABASE <dbname> SET MULTI_USER; .Untuk informasi selengkapnya, lihat Mengatur database ke mode pengguna tunggal. Catatan: Untuk memeriksa apakah database berada dalam mode pengguna tunggal, Anda bisa menggunakan kueri ini: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>'; .Jika Anda masih perlu membatasi akses ke database tetapi ingin mengaktifkan konektivitas untuk login yang terpengaruh, ubah database default mereka ke database yang berbeda di server. |
Database default telah dilepaskan. | Melepaskan database akan menghapusnya dari instans SQL Server dan tidak lagi dapat diakses. Untuk membuatnya tersedia untuk masuk, lampirkan database menggunakan SSMS atau prosedur tersimpan sp_attach_db. Untuk informasi selengkapnya, lihat Melepas dan Melampirkan Database (SQL Server). |
Database default telah diatur ke status RESTRICTED_USER. | Saat database diatur ke status RESTRICTED_USER, hanya anggota peran database tetap db_owner dan peran server tetap dbcreator dan sysadmin yang dapat tersambung ke database. Jika Anda tidak perlu lagi membatasi akses ke database terkait, atur database ke mode multi-pengguna menggunakan kueri ini: ALTER DATABASE <dbname> SET MULTI_USER; .Catatan: Untuk memeriksa apakah database berada dalam status pengguna terbatas, Anda bisa menggunakan kueri ini: SELECT name, user_access_desc FROM sys.databases WHERE name = '<dbname>'; .Jika Anda masih perlu membatasi akses ke database tetapi ingin mengaktifkan konektivitas untuk login yang terpengaruh, ubah database default mereka ke database yang berbeda di server. |
Database default offline. | Database yang dalam status offline tidak dapat dimodifikasi. Anda bisa membuat database Anda online menggunakan kueri ini: ALTER database <dnname> SET ONLINE; .Anda dapat memeriksa apakah database OFFLINE menggunakan SSMS, atau menggunakan kueri ini: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; .Untuk informasi selengkapnya, lihat Status Database dan Opsi ALTER DATABASE SET (Transact-SQL) - SQL Server. Jika Anda masih perlu menyimpan database dalam status offline tetapi ingin mengaktifkan konektivitas untuk login yang terpengaruh, ubah database default mereka ke database yang berbeda di server. |
Database default diatur ke status DARURAT. | Database mungkin telah dimasukkan ke dalam status DARURAT untuk pemecahan masalah oleh administrator sistem. Hanya pengguna peran sysadmin yang dapat mengakses database yang diatur ke status DARURAT. Anda bisa membuat database Anda online menggunakan kueri ini: ALTER database <dnname> SET ONLINE; .Anda dapat memeriksa apakah database berada dalam status DARURAT baik menggunakan SSMS, atau kueri ini: SELECT DATABASEPROPERTYEX (N'<dbname>', N'STATUS') AS N'Database Status'; .Untuk informasi selengkapnya, lihat Status Database dan Opsi ALTER DATABASE SET (Transact-SQL). Jika Anda masih perlu menyimpan database dalam status DARURAT, tetapi ingin mengaktifkan konektivitas untuk login yang terpengaruh, ubah database default mereka ke database yang berbeda di server. |
Database default adalah bagian dari cermin database. | Anda tidak dapat tersambung ke database cermin di server cermin, dan perilaku ini dirancang. Untuk memeriksa apakah database saat ini dalam peran cermin, gunakan kueri SELECT DB_NAME(database_id) as database_name, mirroring_role_desc FROM sys.database_mirroring WHERE DB_NAME(database_id) = '<dbname>'; ini . Untuk informasi selengkapnya tentang pencerminan database, lihat Pencerminan Database (SQL Server). |
Akun masuk mungkin merupakan anggota dari beberapa grup, dan database default untuk salah satu grup tidak tersedia pada saat koneksi. | Untuk menghitung grup yang memiliki pengguna tertentu menggunakan PowerShell, lihat Get-ADPrincipalGroupMembership (ActiveDirectory). |
Mengubah database default untuk pengguna tertentu
Untuk membuat perubahan pada database default pengguna, Anda harus memiliki izin UBAH LOGIN APA PUN. Jika login yang diubah adalah anggota peran server tetap sysadmin atau penerima izin SERVER KONTROL, itu juga memerlukan izin SERVER KONTROL saat membuat perubahan berikut. Anggota peran sysadmin memiliki izin ini diaktifkan secara default. Untuk informasi selengkapnya, lihat MENGUBAH LOGIN (Transact-SQL).
Mengubah database default menggunakan SQL Server Management Directory
Sambungkan ke instans SQL Server Anda menggunakan SQL Server Management Studio (SSMS).
Pilih Login Keamanan>untuk menemukan pengguna dan mengubah database default pengguna ke database default yang berbeda yang saat ini tersedia di halaman Umum properti login di SQL Server Management Directory. Untuk informasi selengkapnya, lihat Membuat Login.
Setelah menyambungkan ke instans SQL Server, Anda dapat menjalankan
ALTER LOGIN
pernyataan, seperti contoh berikut:ALTER LOGIN <LoginName> WITH DEFAULT_DATABASE = <AvailableDatabaseName>;
<AvailableDatabaseName>
adalah tempat penampung untuk nama database yang ada yang dapat diakses oleh login SQL Server dalam instans.<LoginName>
adalah tempat penampung untuk login SQL Server dengan izin yang diperlukanALTER LOGIN
.Contohnya:
ALTER LOGIN [SQLLogin] WITH DEFAULT_DATABASE = master; ALTER LOGIN [Constoso\Windowslogin] WITH DEFAULT_DATABASE = [AdventureWorks];
Kesalahan 18456 ditampilkan bersama dengan kesalahan 4064
Saat menggunakan aplikasi seperti SSMS yang mendapatkan kesalahan 4064 ditampilkan kepada pengguna, pesan berikut dicatat di log kesalahan SQL Server. Perilaku ini secara desain. Memperbaiki database default untuk login yang gagal, menggunakan prosedur yang didokumenkan dalam artikel ini, secara otomatis mengatasi kesalahan 18456.
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 >]