1

SQL Server EVENTDATA() が MAC SQL Pro for SQL Server から機能していません。トリガーを使用して、SQL Server にログインするユーザーの IP アドレスを検証しています。これは私のトリガーです:

CREATE TRIGGER [trLogOnCheckIP] 
    ON ALL SERVER  WITH EXECUTE AS 'sa'  FOR LOGON 
AS
BEGIN
    DECLARE @IPAddress NVARCHAR(50)

    SET @IPAddress = EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]',
                                               'NVARCHAR(50)') ;

    IF @IPAddress IS NULL OR NOT EXISTS (SELECT IP 
                                         FROM master..ValidIPAddress 
                                         WHERE IP = @IPAddress)
    BEGIN
        -- If login is not a valid one, then undo login process
        ROLLBACK --Undo login process

        INSERT INTO master..RejectedLogIn (IP) VALUES (@IPAddress)
    END
END

行が入力されRejectedLogInず、ユーザーがログインできず、トリガー エラーが発生します。実行時に失敗している可能性がありEVENTDATA()ます。トリガーの本体をコメントアウトすると、機能します。

4

1 に答える 1

1

次の変数を設定して問題を修正しました。

SET 
          ANSI_NULLS, 
          QUOTED_IDENTIFIER, 
          CONCAT_NULL_YIELDS_NULL, 
          ANSI_WARNINGS, 
          ANSI_PADDING 
        ON;

サーバーログを確認した後、これに気付きました:

次の SET オプションの設定が正しくないため、SELECT が失敗しました: 'CONCAT_NULL_YIELDS_NULL、ANSI_WARNINGS、ANSI_PADDING'。計算列のインデックス付きビューやインデックス、フィルター選択されたインデックス、クエリ通知、XML データ型メソッド、空間インデックス操作で使用する SET オプションが正しいことを確認します。

于 2015-09-15T18:53:06.013 に答える