MSSQLSERVER_17892
Berlaku untuk: SQL Server
Detail
Atribut | Nilai |
---|---|
Nama Produk | SQL Server |
ID Peristiwa | 17892 |
Sumber Kejadian | MSSQLSERVER |
Komponen | SQLEngine |
Nama Simbolis | SRV_LOGON_FAILED_BY_TRIGGER |
Teks Pesan | Masuk gagal untuk <Masuk Nama> karena eksekusi pemicu. |
Penjelasan
Kesalahan 17892 dinaikkan saat kode pemicu masuk tidak dapat berhasil dieksekusi. Pemicu Masuk mengaktifkan prosedur tersimpan sebagai respons terhadap peristiwa LOGON. Kejadian ini dimunculkan ketika sesi pengguna dibuat dengan instans SQL Server. Pesan kesalahan seperti berikut ini dilaporkan kepada pengguna:
Msg 17892, Tingkat 14, Status 1, Nama> Server<, Baris 1
Masuk gagal untuk <Masuk Nama> karena eksekusi pemicu.
Kemungkinan penyebab
Masalah dapat terjadi jika ada kesalahan saat menjalankan kode pemicu untuk akun pengguna tertentu tersebut. Beberapa skenarionya meliputi:
- Pemicu mencoba menyisipkan data ke dalam tabel yang tidak ada.
- Login tidak memiliki izin ke objek yang dirujuk oleh pemicu masuk.
Tindakan pengguna
Anda dapat menggunakan salah satu resolusi di bawah ini tergantung pada skenario tempat Anda berada.
Skenario 1: Saat ini Anda memiliki akses ke sesi terbuka ke SQL Server di bawah akun admin
Dalam hal ini, Anda dapat mengambil tindakan korektif yang diperlukan untuk memperbaiki kode pemicu Anda.
Contoh 1: Jika objek yang dirujuk oleh kode pemicu tidak ada, buat objek tersebut sehingga pemicu login dapat berhasil dijalankan.
Contoh 2: Jika objek yang dirujuk oleh kode pemicu memang ada tetapi pengguna tidak memiliki izin, beri mereka hak istimewa yang diperlukan untuk mengakses objek.
Atau, Anda hanya dapat menghilangkan atau menonaktifkan pemicu login sehingga pengguna dapat terus masuk ke SQL Server.
Skenario 2: Anda tidak memiliki sesi saat ini yang terbuka di bawah hak istimewa admin, tetapi Koneksi Administrator Khusus (DAC) diaktifkan di SQL Server.
Dalam hal ini, Anda dapat menggunakan koneksi DAC untuk mengambil langkah yang sama seperti yang dibahas dalam Kasus 1 karena koneksi DAC tidak terpengaruh oleh pemicu Login. Untuk informasi selengkapnya tentang koneksi DAC, lihat: Koneksi Diagnostik untuk Administrator Database.
Untuk memeriksa apakah DAC diaktifkan di SQL Server, Anda dapat memeriksa log kesalahan SQL Server untuk pesan yang mirip dengan yang berikut ini:
2020-02-09 16:17:44.150 Dukungan koneksi admin Khusus Server dibuat untuk mendengarkan secara lokal di port 1434.
Skenario 3: Anda tidak mengaktifkan DAC di server Anda atau memiliki sesi admin yang ada ke SQL Server.
Dalam skenario ini, satu-satunya cara untuk memulihkan masalah adalah dengan mengambil langkah-langkah berikut:
Hentikan SQL Server dan layanan terkait.
Mulai SQL Server dari prompt perintah menggunakan parameter
-c
startup , ,-m
dan-f
. Melakukan ini menonaktifkan pemicu login dan memungkinkan Anda melakukan langkah-langkah perbaikan yang sama yang dibahas pada Kasus 1 di atas.Catatan
Prosedur di atas memerlukan SA atau akun administrator yang setara.
Untuk informasi selengkapnya tentang opsi startup ini dan lainnya, lihat: Opsi Startup Layanan Mesin Database.
Informasi selengkapnya
Situasi lain di mana pemicu log on gagal adalah saat menggunakan EVENTDATA
fungsi . Fungsi ini mengembalikan XML, dan peka huruf besar/kecilnya. Jadi, Anda membuat pemicu masuk berikut, yang ingin memblokir akses berdasarkan alamat IP, Anda dapat mengalami masalah:
CREATE TRIGGER tr_logon_CheckIP
ON ALL SERVER
FOR LOGON
AS
BEGIN
IF IS_SRVROLEMEMBER ( 'sysadmin' ) = 1
BEGIN
DECLARE @IP NVARCHAR ( 15 );
SET @IP = ( SELECT EVENTDATA ().value ( '(/EVENT_INSTANCE/ClientHost)[1]' , 'NVARCHAR(15)' ));
IF NOT EXISTS( SELECT IP FROM DBAWork.dbo.ValidIP WHERE IP = @IP )
ROLLBACK ;
END ;
END ;
GO
Pengguna tidak mempertahankan kasus saat menyalin skrip ini dari internet di bagian pemicu ini:
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
Sebagai konsekuensinya, EVENTDATA
selalu mengembalikan NULL, dan semua login setara SA-nya ditolak aksesnya. Dalam hal ini, koneksi DAC tidak diaktifkan, jadi kami tidak punya pilihan selain menghidupkan ulang server dengan parameter startup yang tercantum di atas untuk menghilangkan pemicu.