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

技术知识
0 1843
小师傅 小师傅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无广告纯净版 2714
Android QQ音乐 v11.3.7 定制版解锁免费听歌无广告版 3226
Android 草图大师SKP v1.5 解锁会员版 8611
Android OmoFun追漫神器 v4.2.1 无广告绿色版 5626
AdobeGenP Adobe全家桶系列激活工具 v3.5.0/3.4.14.1 绿色版 6210
Android 七猫免费听书 v1.4 解锁高级版 4671
超良心的抢票神器——Bypass1.16 4329
Android 玲珑加速器 v6.10.9.40 解锁无限时间 3024
Android 大师兄影视 v3.3.8 去广告会员版 2144
热门帖子
上班族闭眼搞!多多虚拟类目机器人发货,被动收入,月入 1‑5W! 60
最佳机场梯子推荐︱两款手机PC稳定的机场节点和魔法上外网科学梯子 55
当天做,当天见收益,全流程挂机操作,单账号轻松日入500+ 53
电脑搬砖,用AI自动写文章,每月稳赚1-2W,免费提供接单渠道,小白可做! 51
最强手机挂机项目,每天十几分钟,轻松日入500+ 49
海外武侠小说挂机,单张号日赚 3 美金,看武侠小说赚美金,网文阅读项目,长期稳定收益… 47
小红书虚拟项目训练营8.0:跑通AI全流程,从养号到开店发货,打造高利润虚拟店铺 44
AI赋能短视频创作:从工具入门到项目实战,一次学透豆包Deepseek即梦全攻略 44
AI矩阵智能体实战:100个数字员工批量生产内容,文本知识库+工作流自动化全搞定 43