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 Sunucusu |
| Olay Kimliği | 17892 |
| Olay Kaynağı | MSSQLSERVER |
| Bileşen | SQLEngine |
| Sembolik Ad | SRV_LOGON_FAILED_BY_TRIGGER |
| İleti Metni | Oturum açma oturum açma <adı> tetikleyici yürütme nedeniyle başarısız oldu. |
Açıklama
Oturum açma tetikleyici kodu başarıyla yürütülemediğinde 17892 hatası oluştu. Oturum Açma Tetikleyicileri , bir LOGON olayına yanıt olarak saklı yordamları tetikler. Bu olay, SQL Server örneğiyle bir kullanıcı oturumu oluşturulduğunda oluşturulur. Kullanıcıya aşağıdaki gibi bir hata iletisi bildirilir:
Msg 17892, Düzey 14, Durum 1, Sunucu <Sunucusu Adı>, Satır 1
Oturum açma oturum açma <adı> tetikleyici yürütme nedeniyle başarısız oldu.
Olası nedenler
Sorun, söz konusu kullanıcı hesabı için tetikleyici kodu yürütülürken bir hata oluşursa oluşabilir. Senaryolardan bazıları şunlardır:
- Tetikleyici, var olmayan bir tabloya veri eklemeye çalışır.
- Oturum açma, oturum açma tetikleyicisi tarafından başvuruda bulunılan nesne için izinlere sahip değil.
Kullanıcı eylemi
Bulunduğunuz senaryoya bağlı olarak aşağıdaki çözümlerden birini kullanabilirsiniz.
Senaryo 1: Şu anda bir yönetici hesabı altında SQL Server'da açık oturuma erişiminiz var
Bu durumda, tetikleyici kodunuzu düzeltmek için gereken düzeltici eylemi gerçekleştirebilirsiniz.
Örnek 1: Tetikleyici kodu tarafından başvuruda bulunılan bir nesne yoksa, oturum açma tetikleyicisinin başarıyla yürütülebilmesi için bu nesneyi oluşturun.
Örnek 2: Tetikleyici kodu tarafından başvuruda bulunılan bir nesne varsa ancak kullanıcıların izinleri yoksa, nesneye erişmek için gerekli ayrıcalıkları verin.
Alternatif olarak, kullanıcıların SQL Server'da oturum açmaya devam edebilmesi için yalnızca oturum açma tetikleyicisini bırakabilir veya devre dışı bırakabilirsiniz.
Senaryo 2: Yönetici ayrıcalıkları altında açık olan herhangi bir geçerli oturum yok, ancak AYRıLMıŞ Yönetici Bağlantısı (DAC) SQL Server'da etkinleştirildi.
Bu durumda, DAC bağlantıları Oturum açma tetikleyicilerinden etkilenmediğinden, 1. Durumda açıklanan adımların aynısını uygulamak için DAC bağlantısını kullanabilirsiniz. DAC bağlantısı hakkında daha fazla bilgi için bkz. Veritabanı Yöneticileri için Tanılama Bağlantısı.
SQL Server'ınız üzerinde DAC'nin etkinleştirilip etkinleştirilmediğini denetlemek için, SQL Server hata günlüğünü aşağıdakine benzer bir ileti için de kontrol edebilirsiniz:
2020-02-09 16:17:44.150 Sunucu Ayrılmış yönetici bağlantısı, 1434 numaralı bağlantı noktasında yerel olarak dinlemek için oluşturuldu.
Senaryo 3: Sunucunuzda DAC etkin değil veya SQL Server'da mevcut bir yönetici oturumunuz yok.
Bu senaryoda, sorunu düzeltmenin tek yolu aşağıdaki adımları uygulamak olacaktır:
SQL Server'ı ve ilgili hizmetleri durdurun.
, ve başlangıç parametrelerini
-c-mkullanarak-fSQL Server'ı başlatın. Bunu yaptığınızda oturum açma tetikleyicisi devre dışı bırakılır ve yukarıdaki Olay 1 altında açıklanan aynı düzeltme önlemlerini gerçekleştirmenize olanak tanır.Uyarı
Yukarıdaki yordam bir SA veya eşdeğer bir yönetici hesabı gerektirir.
Bu ve diğer başlangıç seçenekleri hakkında daha fazla bilgi için bkz. Veritabanı Altyapısı Hizmeti Başlangıç Seçenekleri.
Daha fazla bilgi
Oturum açma tetikleyicilerinin başarısız olduğu bir diğer durum da işlevin kullanılmasıdır EVENTDATA . Bu işlev XML döndürür ve büyük/küçük harfe duyarlıdır. Bu nedenle, IP adresine göre erişimi engellemek amacıyla aşağıdaki oturum açma tetikleyicisini oluşturursanız sorunla karşılaşabilirsiniz:
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
Kullanıcı, tetikleyicinin bu bölümünde bu betiği İnternet'ten kopyalarken büyük/küçük harf bakımını yapmadı:
SELECT EVENTDATA().value ( '(/event_instance/clienthost)[1]' , 'NVARCHAR(15)');
Sonuç olarak, EVENTDATA her zaman NULL döndürdü ve tüm SA eşdeğeri oturum açma işlemlerine erişim reddedildi. Bu durumda DAC bağlantısı etkinleştirilmediğinden, tetikleyiciyi bırakmak için sunucuyu yukarıda listelenen başlangıç parametreleriyle yeniden başlatmaktan başka seçeneğimiz yoktu.