在SQL登入密码更改
问题描述:
触发动作我试图从https://www.mssqltips.com/sqlservertip/2708/tracking-login-password-changes-in-sql-server/在SQL登入密码更改
实现事件通知代码我没有看到在PasswordChangeLog表中的任何结果,当我修改密码。有应该在这个表我每次更改密码时的条目。
有没有错误,我可以看到。我将在此再次明天去工作在不同的服务器上,看看我能得到从错误日志信息(此服务器被污染)
这里是我运行的代码,它主要是从阿龙的岗位削减&粘贴。我已经多次检查过...我错过了什么?我的一个重要变化是,我在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
答
事件通知通常涉及MonitorED服务器和MonitorING服务器(收集服务器)。
如果你发布的是要监视的服务器,你就错过了一些东西。基本outine将是:
- 创建端点
- 格兰特连接到端点到特定组 或PUBLIC
- 创建一个路由,引用集合
服务器的名称和GUID的将接收的消息 (您激活PROC所在的)数据库。
事情是这样的:
CREATE ROUTE [My_CollectionRoute]
WITH
SERVICE_NAME = 'My_Service'
,BROKER_INSTANCE = <SOME GUID>
,ADDRESS = 'TCP://COLLECTION-SERVER:4022'
一旦你收集服务器配置正确,你会被监控服务器上创建的事件通知会话。
在收集服务器,您需要:
- 创建端点
- 格兰特连接到端点到特定的组或PUBLIC
- 创建一个路由,它引用了监控服务器的名称,和 MSDB数据库的GUID
- 选择创建表坚持你收集
- 事件创建激活PROC
- 创建队列,它引用激活PROC
- 创建基于队列
- 服务授予对服务发送给用户或PUBLIC
希望这有助于 -
OIC .. 。每天学些新东西。这很吸引人......监控服务器也可以作为监控服务器吗?谢谢! – RelativitySQL
我不明白为什么它不能在同一台服务器上发生的,假设的配置进行了适当。但对于非常繁忙的服务器,它可能会影响性能。 – NedOtter