执行登录触发器后,登录sql server报错: 由于执行触发器,登录'xxx \ Administrator'登录失败。已将数据库上下文更改为master

技术知识
0 2019
小师傅 小师傅2021-11-26
积分:2397

背景:


在cmd中执行sqlcmd命令:

sqlcmd -S WIN-FI7RNDQ5SB4\MYSQLINSTANCE -i mysql.sql


其中mysql.sql内容如下:

CREATE LOGIN test WITH PASSWORD = '输入密码'
GO

ALTER TRIGGER tr_connection_limit

ON ALL SERVER
FOR LOGON
AS
BEGIN


IF ORIGINAL_LOGIN()= 'test'

AND
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)'))
NOT IN('<local machine>','192.168.191.22')
     ROLLBACK;
END;


执行结果是:

C:\Users\Administrator>sqlcmd -S WIN-FI7RNDQ5SB4\MYSQLINSTANCE -i C:\Temp\sqltest\SQLQuery.sql
Sqlcmd:错误:用于SQL Server的Microsoft ODBC驱动程序13:由于执行触发器,登录'WIN-FI7RNDQ5SB4 \ Administrator'登录失败
结果使用SSMS登录Sql Server时失败,无论是用windows验证方式登录还是sql server账号登录都会报错:
由于执行触发器,登录'WIN-FI7RNDQ5SB4 \ Administrator'登录失败


我的解决方法是:


步骤一:用sqlcmd删除登录触发器:

C:\Users\Administrator>sqlcmd -A -S WIN-FI7RNDQ5SB4\MYSQLINSTANCE[服务器名]
1> select * from sys.server_trigger_events
2> go

object_id   type      type_desc                 
   is_trigger_event is_first is_last event_group_type event_group_type_desc  
-------------------------------- ---------------- -------- --
-------------------------------------------------------------------
 2107154552         147 LOGON   
  1        0       0             NULL NULL 
(1 行処理されました)

1> select * from sys.server_triggers
2> go

name     
    object_id   parent_class parent_class_desc      parent_id   type type_desc  
 create_date      modify_date       is_ms_shipped is_disabled
---------------------------------------------------------------------------------------------------
tr_connection_limit     2107154552          100 SERVER   
  0 TR   SQL_TRIGGER      
2018-10-23 17:40:04.367 2018-10-24 11:29:30.647     0     0

(1 行処理されました)
(1 行処理されました)

1> drop trigger tr_connection_limit[登录触发器名] on all server;
2> go
1> select * from sys.server_triggers
2> go

name    
 object_id   parent_class parent_class_desc  parent_id   type type_desc  
create_date             modify_date       is_ms_shipped is_disabled
--------------------------------------------------------------------------

(0 行処理されました)
1>


接下来登录Sql Server就成功了,无论是用什么账户登录。


步骤二:修改mysql.sql内容如下:

USE [master]
GO


SET ANSI_NULLS ON
GO

SET QUOTED_IDENTIFIER ON
GO
 

CREATE LOGIN test WITH PASSWORD = '输入密码'
GO

ALTER TRIGGER tr_connection_limit

ON ALL SERVER
FOR LOGON
AS
BEGIN


IF ORIGINAL_LOGIN()= 'test'

AND
(SELECT EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]', 'NVARCHAR(15)'))
NOT IN('<local machine>','192.168.191.22')
     ROLLBACK;
END;


这次再运行就不会出现登录失败的问题了。


精选帖子
Android 可可影视 v3.3.6无广告纯净版 2917
Android QQ音乐 v11.3.7 定制版解锁免费听歌无广告版 3481
Android 草图大师SKP v1.5 解锁会员版 8818
Android OmoFun追漫神器 v4.2.1 无广告绿色版 5882
AdobeGenP Adobe全家桶系列激活工具 v3.5.0/3.4.14.1 绿色版 6458
Android 七猫免费听书 v1.4 解锁高级版 4891
超良心的抢票神器——Bypass1.16 4608
Android 玲珑加速器 v6.10.9.40 解锁无限时间 3265
Android 大师兄影视 v3.3.8 去广告会员版 2389
热门帖子
国外网站出售虚拟商品,人人可做,只需简单上传,不用引流,最简单得网赚项目 63
AI电脑搬砖,教育风口一单500+,小白可做,提供接单资源 62
视频号3个月变现24319元,新手2天轻松入门,居家赚米新思路! 45
单量不断,全平台外卖助手,单窗口30+可矩阵操作 45
咕噜咕噜 v1.9.8 免费观影神器 海量影视播放软件 44
AI漫剧造梦营:0基础3天出片,单个工具每天持续生成400秒视频 44
快看漫画自动挂机日入1000+,无需手动可矩阵放大 41
囧次元 v1.5.8.0 二次元动漫追番软件 海量番剧高清观看神器 40
谷歌商店客户端 Google Play Store v51.4.19 39