由于活动触发器而无法登录 SQL Server

问题描述 投票:0回答:1

我正在 SQL Server 上使用触发器。删除一些登录触发器后,仅允许某些用户从特定 IP 登录。没能发挥作用。

实际上我使用登录触发器进行了一些审核。

当我尝试从 grafana(是上面提到的用户之一)登录时,我收到一条消息,表明由于活动触发器而无法登录。

这是触发器:

ALTER TRIGGER [LogonAuditTrigger] /* Creates trigger for logons */
ON ALL SERVER 
FOR LOGON
AS

BEGIN
DECLARE @LogonTriggerData xml,
@EventTime datetime,
@LoginName varchar(50),
@ClientHost varchar(50),
@LoginType varchar(50),
@HostName varchar(50),
@AppName varchar(500)

SET @LogonTriggerData = eventdata()

SET @EventTime = @LogonTriggerData.value('(/EVENT_INSTANCE/PostTime)[1]', 'datetime')
SET @LoginName = @LogonTriggerData.value('(/EVENT_INSTANCE/LoginName)[1]', 'varchar(50)')
SET @ClientHost = @LogonTriggerData.value('(/EVENT_INSTANCE/ClientHost)[1]', 'varchar(50)')
SET @HostName = HOST_NAME()
SET @AppName = APP_NAME()

INSERT INTO [LogonAudit].[dbo].[LogonAuditing]
(
SessionId,
LogonTime,
HostName,
ProgramName,
LoginName,
ClientHost
)
SELECT
@@spid,
@EventTime,
@HostName,
@AppName,
@LoginName,
@ClientHost

END

这是错误消息:

由于触发器执行,使用用户名“grafana”登录时出错

禁用触发器让 Grafana 登录到 SQL Server,但我希望让它与激活的触发器一起工作来记录登录。

sql-server triggers
1个回答
0
投票

您可以首先更改审核表中的

LoginName
以允许
NULL
,因为在 SQL 身份验证登录的情况下,这可能无法通过从 XML 中提取的方式来实现。 (事实上,我认为您根本不需要繁重的
EventData()
XML。)

接下来,您需要确保您的审计表支持您可能尝试插入的数据 - 登录名、程序名和主机名都可以达到

nvarchar(128)
,所以这就是您的列和变量声明的声明方式.

不过,我认为它不需要同时

ClientHost
HostName
,因为我不知道它们什么时候会有所不同。

然后希望您可以在其他地方记录任何错误消息。

ALTER TRIGGER [LogonAuditTrigger]
ON ALL SERVER 
FOR LOGON
AS
BEGIN
  DECLARE @EventTime  datetime      = getutcdate(),
          @LoginName  nvarchar(128) = ORIGINAL_LOGIN(),
          @HostName   nvarchar(128) = HOST_NAME(),
          @AppName    nvarchar(128) = APP_NAME();

  BEGIN TRY
    INSERT LogonAudit.dbo.LogonAuditing
    (
      SessionId,
      LogonTime,
      HostName,
      ProgramName,
      LoginName
    )
    SELECT
      @@spid,
      @EventTime,
      @HostName,
      @AppName,
      @LoginName;
  END TRY
  BEGIN CATCH
    INSERT dbo.LoggingTable ... stuff including ERROR_MESSAGE() ...
    THROW();
  END CATCH
END
© www.soinside.com 2019 - 2024. All rights reserved.