Pemicu masuk
Berlaku untuk: SQL Server Azure SQL Managed Instance
Masuk memicu prosedur tersimpan kebakaran sebagai respons terhadap suatu LOGON
peristiwa. Kejadian ini dimunculkan ketika sesi pengguna dibuat dengan instans SQL Server. Pemicu masuk diaktifkan setelah fase autentikasi pengelogan selesai, tetapi sebelum sesi pengguna dibuat. Oleh karena itu, semua pesan yang berasal dari dalam pemicu yang biasanya akan menjangkau pengguna, seperti pesan kesalahan dan pesan dari PRINT
pernyataan, dialihkan ke log kesalahan SQL Server. Pemicu masuk tidak diaktifkan jika autentikasi gagal.
Anda dapat menggunakan pemicu masuk untuk mengaudit dan mengontrol sesi server, seperti dengan melacak aktivitas masuk, membatasi login ke SQL Server, atau membatasi jumlah sesi untuk login tertentu. Misalnya, dalam kode berikut, pemicu masuk menolak upaya masuk ke SQL Server yang dimulai dengan masuk login_test
jika sudah ada tiga sesi pengguna yang dibuat oleh login tersebut.
USE master;
GO
CREATE LOGIN login_test
WITH PASSWORD = N'3KHJ6dhx(0xVYsdf' MUST_CHANGE,
CHECK_EXPIRATION = ON;
GO
GRANT VIEW SERVER STATE TO login_test;
GO
CREATE TRIGGER connection_limit_trigger ON ALL SERVER
WITH EXECUTE AS N'login_test'
FOR LOGON AS BEGIN
IF ORIGINAL_LOGIN() = N'login_test'
AND (
SELECT COUNT(*)
FROM sys.dm_exec_sessions
WHERE is_user_process = 1
AND original_login_name = N'login_test') > 3
ROLLBACK;
END;
Peristiwa LOGON
ini sesuai dengan AUDIT_LOGIN
peristiwa SQL Trace, yang dapat digunakan dalam Pemberitahuan Peristiwa. Perbedaan utama antara pemicu dan pemberitahuan peristiwa adalah bahwa pemicu dinaikkan secara sinkron dengan peristiwa, sedangkan pemberitahuan peristiwa tidak sinkron. Ini berarti, misalnya, bahwa jika Anda ingin menghentikan sesi dibuat, Anda harus menggunakan pemicu masuk. Pemberitahuan peristiwa pada AUDIT_LOGIN
peristiwa tidak dapat digunakan untuk tujuan ini.
Tentukan pemicu pertama dan terakhir
Beberapa pemicu dapat ditentukan pada peristiwa.LOGON
Salah satu pemicu ini dapat ditunjuk sebagai pemicu pertama atau terakhir yang akan diaktifkan pada suatu peristiwa dengan menggunakan prosedur tersimpan sistem sp_settriggerorder . SQL Server tidak menjamin urutan eksekusi pemicu yang tersisa.
Kelola transaksi
Sebelum SQL Server mengaktifkan pemicu masuk, SQL Server membuat transaksi implisit yang independen dari transaksi pengguna apa pun. Oleh karena itu, ketika pemicu masuk pertama mulai diaktifkan, jumlah transaksi adalah 1. Setelah semua pemicu masuk selesai dieksekusi, transaksi akan diterapkan. Seperti halnya jenis pemicu lainnya, SQL Server mengembalikan kesalahan jika pemicu masuk menyelesaikan eksekusi dengan jumlah transaksi 0. Pernyataan mereset ROLLBACK TRANSACTION
jumlah transaksi menjadi 0, bahkan jika pernyataan dikeluarkan di dalam transaksi berlapis. COMMIT TRANSACTION
mungkin mengurangi jumlah transaksi menjadi 0. Oleh karena itu, kami menyarankan untuk tidak mengeluarkan COMMIT TRANSACTION
pernyataan di dalam pemicu masuk.
Pertimbangkan hal berikut saat Anda menggunakan ROLLBACK TRANSACTION
pernyataan di dalam pemicu masuk:
Setiap modifikasi data yang dibuat hingga titik
ROLLBACK TRANSACTION
digulung balik. Modifikasi ini mencakup perubahan yang dilakukan oleh pemicu saat ini, dan oleh pemicu sebelumnya yang dijalankan pada peristiwa yang sama. Pemicu yang tersisa untuk peristiwa tertentu tidak dijalankan.Pemicu saat ini terus menjalankan pernyataan yang tersisa yang muncul setelah
ROLLBACK
pernyataan. Jika salah satu pernyataan ini memodifikasi data, modifikasi tidak digulung balik.
Sesi pengguna tidak dibuat jika salah satu kondisi berikut terjadi selama eksekusi pemicu pada LOGON
peristiwa:
- Transaksi implisit asli digulung balik atau gagal.
- Kesalahan yang memiliki tingkat keparahan lebih besar dari 20 dimunculkan di dalam isi pemicu.
Menonaktifkan pemicu masuk
Pemicu masuk dapat secara efektif mencegah keberhasilan koneksi ke Mesin Database untuk semua pengguna, termasuk anggota peran server tetap sysadmin . Ketika pemicu masuk mencegah koneksi, anggota peran server tetap sysadmin dapat terhubung dengan menggunakan koneksi administrator khusus, atau dengan memulai Mesin Database dalam mode konfigurasi minimal (-f). Untuk informasi selengkapnya, lihat Opsi startup Database Engine Service.