web-dev-qa-db-ja.com

トリガーの実行により、ログインに失敗しました

sql server loginsのいずれかを使用してログインしようとしていますが、以下のエラーメッセージが表示されます。

一般的なエラーメッセージ

enter image description here

メッセージテキストのコピー

TITLE: Connect to Server
------------------------------

Cannot connect to MY_SERVER.

------------------------------
ADDITIONAL INFORMATION:

Logon failed for login 'cola' due to trigger execution.
Changed database context to 'master'.
Changed language setting to us_english. (Microsoft SQL Server, Error: 17892)

For help, click: http://go.Microsoft.com/fwlink?> ProdName=Microsoft%20SQL%20Server&EvtSrc=MSSQLServer&EvtID=17892&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------

高度な情報

enter image description here

私は以下の質問を認識していますが、少し異なり、そこで言われていることをすべて試しましたが、うまくいきませんでした。そのため、この質問をここに入力します。

「トリガーの実行により、ログイン 'sa'のログオンに失敗しました。」いいえSAログイントリガーが定義されている場合

この質問も非常によく似ています。

ユーザーのログインに失敗しました-エラー:18456、重大度:14、状態:38

そして、これから私は次の情報を得ました:

ユーザーのログインに失敗しました-エラー18456-重大度14、状態38

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

上記の情報によると、私は次の問題を抱えています:

ログインは有効ですが、サーバーへのアクセスに失敗しました

まだ喜びはありません。

ログインを削除して再作成しようとしましたが、Login can not be dropped because it is in useが発生しました。

以下のスクリプトを使用してwhere it is used, by whom, from whereを見つけました:

USE master
go
SELECT 
        sdes.session_id 
       ,sdes.login_time 
       ,sdes.last_request_start_time
       ,sdes.last_request_end_time
       ,sdes.is_user_process
       ,sdes.Host_name
       ,sdes.program_name
       ,sdes.login_name
       ,sdes.status

       ,sdec.num_reads
       ,sdec.num_writes
       ,sdec.last_read
       ,sdec.last_write
       ,sdes.reads
       ,sdes.logical_reads
       ,sdes.writes

       ,sdest.DatabaseName 
       ,sdest.ObjName
    ,sdes.client_interface_name
    ,sdes.nt_domain
    ,sdes.nt_user_name
    ,sdec.client_net_address
    ,sdec.local_net_address
    ,sdest.Query
    ,KillCommand  = 'Kill '+ CAST(sdes.session_id  AS VARCHAR)
FROM sys.dm_exec_sessions AS sdes

INNER JOIN sys.dm_exec_connections AS sdec 
        ON sdec.session_id = sdes.session_id

CROSS APPLY (

                SELECT DB_NAME(dbid) AS DatabaseName
                    ,OBJECT_NAME(objectid) AS ObjName
                    ,COALESCE((
                            SELECT TEXT AS [processing-instruction(definition)]
                            FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle) 
                            FOR XML PATH('')
                                ,TYPE
                            ), '') AS Query

                FROM sys.dm_exec_sql_text(sdec.most_recent_sql_handle)

    ) sdest
WHERE sdes.session_id <> @@SPID 
--ORDER BY sdes.last_request_start_time DESC

次に、2つのセッションを強制終了し、ログインを再作成して、同じエラーを再試行しました。

何が欠けていますか?

2

投稿したスクリーンショットによると、ログオントリガーエラーにほぼ相当するエラー17892が発生しています。

SQL Serverへのログインが許可されているかどうかを評価するログオントリガーが以前にあった可能性があります。このトリガーは削除されたか、誤った結果を生成する可能性があり、SQL Serverインスタンスに誰もログインできなくなります。

3つの回避策があります。

1.クエリウィンドウを開く

次の方法でトリガーを検索します。

SELECT * FROM sys.server_triggers;

ログインの問題の原因である可能性のあるサーバーレベルのトリガーが表示された場合は、次のようにして削除できます。

DROP TRIGGER triggername ON ALL SERVER;

トリガーをドロップする代わりに、次のコマンドでトリガーを無効にするだけです。

DISABLE TRIGGER triggername ON ALL SERVER;

2. DAC許可。開いているクエリウィンドウがありません

開いているクエリウィンドウがない場合は、DAC(ADMIN)接続を使用してSQL Serverインスタンスにログインする必要があります。

sqlcmd –S 127.0.0.1,1434 

1434はDAC接続のデフォルトポート

次に、ソリューション1から上記のクエリを実行してトリガーを決定し、トリガーを削除または無効化できます。

3.クエリウィンドウを開かない。 DACは許可されていません

開いているウィンドウがなく、DACがオンになっていない場合は、インスタンスを停止し、次の手順を使用して再起動する必要があります。

sqlserver.exe –c -m –f

これにより、最小限の構成と短い起動時間でインスタンスをシングルユーザーモードで起動できます。

次に、上記の手順1に従ってトリガーを無効にできます。

3