locked
Функция поведения EVENTDATA для DLL Триггеров, связанных с регистрированием RRS feed

  • Общие обсуждения

  • Я недавно ответил на сообщение на MSDN относительно проблемы, в которой пользователь создает DLL Триггер для события ATER _ LOGIN , но требуется только извещение о событии назначения пароля. Я могу понять величину недовольства, которое может произойти, когда вы обычно получаете лишние электронные сообщения, приходящие от вымышленных имен, для которых вы не можете установить правила наблюдения, чтобы вы не потеряли действительно важное электронное письмо. Триггерная логика состоит в следующем (Спасибо Ranjith который ответил ранее на сообщение на MSDN )

    CREATE TRIGGER MailTrigger

    ON ALL SERVER

    FOR ALTER_LOGIN

    AS

    DECLARE @command nvarchar ( max )       

     

    SET @command =   EVENTDATA (). value( '(/EVENT_INSTANCE/TSQLCommand)[1]' , 'nvarchar(2000)' )

     

    IF CHARINDEX ( 'password' , @command) > 0

    BEGIN

       -- mail logic

       PRINT 'MAIL'

    END

    ELSE

       PRINT 'NO MAIL'

    GO

    Итак, можно ли это сделать?

    И да и нет, все зависит от версии используемого вами SQL Сервера. На SQL Сервере 2008 вы можете фактически использовать функцию EVENTDATA в SQL Сервере для получения фактической T - SQL команды. Один раз вы это сделали, вы нашли ту почтовую логику, которую вы написали, должна только отправить электронное письмо для команд, которые имеют слово PASSWORD в узле T - SQLCommand . XML данные должны выглядеть подобно этому :

    < EVENT_INSTANCE >

      < EventType > ALTER_LOGIN</ EventType >

      < PostTime > 2010-02-10T05:47:22.207</ PostTime >

      < SPID > 52</ SPID >

      < ServerName > <Server Name></ ServerName >

      < LoginName > sa</ LoginName >

      < ObjectName > user1</ ObjectName >

      < ObjectType > LOGIN</ ObjectType >

      < DefaultLanguage > us_english</ DefaultLanguage >

      < DefaultDatabase > master</ DefaultDatabase >

      < LoginType > SQL Login</ LoginType >

      < SID > <SID></ SID >

      < TSQLCommand >

        < SetOptions ANSI_NULLS = "ON " ANSI_NULL_DEFAULT = "ON " ANSI_PADDING = "ON " QUOTED_IDENTIFIER = "ON " ENCRYPTED = "FALSE " />

        < CommandText > ALTER LOGIN user1 WITH PASSWORD=N'******' </ CommandText >

      </ TSQLCommand >

    </ EVENT _ INSTANCE >

    Оповещение о том, что пароль маскирован и вы не рискуете сделать фактический пароль незащищенным и DBA также доволен, что он/она не получала уведомления каждый раз при ALTER LOGIN … исполняющейся в SQL случае.

    Теперь вы должны удивиться, если это отлавливается где-нибудь? Да! J Иначе бы я не писал это сообщение! Поведение EVENTDATA в SQL Server 2005 другое. Должная проблема безопасности, функция EVENTDATA не показывала команду T - SQL для событий CREATE _ LOGIN и ALTER _ LOGIN . Это поведение уже зарегистрировано как Элемент Соединения.

    Вы получите оповещение, что XML данные возвращенные для SQL Сервера 2005 не имеют узла TSQLCommand . Итак , какая есть альтернатива ? SQL Server Profiler Trace событие Audit Login Change Password и есть ответ. Установка SQL Профилировщика трассировки (серверная сторона трассировки) с только этим событием. Читается файл трассировки с использованием fn _ trace _ gettable . Колонка TextData предоставляет вам подобную команду что и возвращает функция EVENTDATA в SQL Server 2008. К тому же, вы можете определить Имя Приложения, SPID , Имя Пользователя и другие особенности, доступные в других колонках данных в случае, если вам необходимо преследовать пользователя! Это особенный профилировщик событий имеет подкласс событий, который имеет особое значение для каждого подкласса событий. Так, вы можете фактически перейти дальше и определить хранящиеся SQL Server процедуры, которые доставляют информацию из SQL Server профилировщика трассировки, анализ входов и затем отправка важных электронных сообщений, если требуется.

     

    Amit Banerjee

    TL , Microsoft SQL Server .


    Для связи [Mail]
    • Перемещено Tagore Bandlamudi 2 октября 2010 г. 0:37 MSDN Forums consolidation (От:SQL Server для разработчиков)
    4 мая 2010 г. 10:23