私はパスワードを変更するとき、私はPasswordChangeLogテーブル内の任意の結果を見ていないですhttps://www.mssqltips.com/sqlservertip/2708/tracking-login-password-changes-in-sql-server/トリガアクション
からのイベント通知コードを実装しようとしています。 はパスワードを変更するたびにになるはずです。
私には間違いありません。私はもう一度別のサーバーでこの作業を行い、エラーログから多くの情報を得ることができるかどうかを確認します(このサーバーは汚染されています)。
私が実行しているコードは次のとおりです。私は何度か見直しをしました...何かが欠けていますか?私の重要な変更の1つは、エントリが検出されたときにストアドプロシージャを実行するためにPasswordChangeLogにトリガを追加したことです。
--TriggerEventOnPasswordChange
USE msdb
GO
IF OBJECT_ID('dbo.PasswordChangeLog', 'U') IS NOT NULL
DROP TABLE dbo.PasswordChangeLog;
CREATE TABLE dbo.PasswordChangeLog
(
LoginName SYSNAME,
EventTime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP
);
GO
CREATE TRIGGER RunSyncer
ON dbo.PasswordChangeLog
AFTER INSERT AS
BEGIN
SET NOCOUNT ON
EXEC sp_Syncer
END
GO
ALTER TABLE dbo.PasswordChangeLog ENABLE TRIGGER RunSyncer
GO
CREATE QUEUE PasswordChangeQueue;
GO
CREATE SERVICE PasswordChangeService ON QUEUE PasswordChangeQueue
([http://schemas.microsoft.com/SQL/Notifications/PostEventNotification]);
GO
CREATE EVENT NOTIFICATION PasswordChangeNotification
ON SERVER WITH FAN_IN
FOR AUDIT_LOGIN_CHANGE_PASSWORD_EVENT
TO SERVICE 'PasswordChangeService', 'current database';
GO
CREATE PROCEDURE dbo.LogPasswordChange
WITH EXECUTE AS OWNER
AS
BEGIN
SET NOCOUNT ON;
DECLARE @message_body XML;
WHILE (1 = 1)
BEGIN
WAITFOR
(
RECEIVE TOP(1) @message_body = message_body
FROM dbo.PasswordChangeQueue
), TIMEOUT 1000;
IF (@@ROWCOUNT = 1)
BEGIN
INSERT dbo.PasswordChangeLog(LoginName)
SELECT @message_body.value('(/EVENT_INSTANCE/LoginName)[1]', 'sysname');
END
END
END
GO
ALTER QUEUE PasswordChangeQueue
WITH ACTIVATION
(
STATUS = ON,
PROCEDURE_NAME = dbo.LogPasswordChange,
MAX_QUEUE_READERS = 1,
EXECUTE AS OWNER
);
GO
OICを..毎日新しいものを見つけよう。これは魅力的です...監視対象のサーバーも監視サーバーですか?ありがとうございました! – RelativitySQL
構成が適切に行われたと仮定して、同じサーバー上で発生しない理由はわかりません。しかし、非常に忙しいサーバーの場合、パフォーマンスに影響する可能性があります。 – NedOtter