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

技术知识
0 2191
小师傅 小师傅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无广告纯净版 3243
Android QQ音乐 v11.3.7 定制版解锁免费听歌无广告版 3821
Android 草图大师SKP v1.5 解锁会员版 9151
Android OmoFun追漫神器 v4.2.1 无广告绿色版 6188
AdobeGenP Adobe全家桶系列激活工具 v3.5.0/3.4.14.1 绿色版 6780
Android 七猫免费听书 v1.4 解锁高级版 5160
超良心的抢票神器——Bypass1.16 4898
Android 玲珑加速器 v6.10.9.40 解锁无限时间 3531
Android 大师兄影视 v3.3.8 去广告会员版 2668
热门帖子
Grok 4.6 代理自动制作视频!从提示词到成片全流程详细分享|AI Agent 实操分享 65
不会写作也能干!AI 全自动生成文稿,一单纯赚 900+,全套接单模板直接搬! 64
2个月收入6705元,最新平台小众赛道,全程Ai操作人人可做! 59
金牌影院 v7.0.1 高清影视追剧软件APP 57
快手短剧挂载 全托管 单号月入200-600 可批量 3-5分钟搞定 53
WorkBuddy全能AI工作台实战课:从3步搭建AI工作台到Skill技能、知识库与办公自动化,系统掌握全场景应用 52
淘宝闪购一分购拉新玩法-更新0911:20元每单+大厂高价项目,掌握素材制作、精准引流与用户下单转化方法 48
全自动番茄挂机玩法,日入300+边阅读边积累,轻松获得额外收入 48
Workbuddy技能变现实战教程:AI批量做内容+经验包装成产品+自动完成交付,一人跑通轻资产创业模式 46