“由于执行触发器,登录名xxx的登录失败”错误号17892的解决方法

在SQL Server 2012中创建了一个登录触发器用于记录连接到SQL Server实例的登录名和登录时间,表的结构和触发器的T-SQL语句如下:
创建表:

CREATE TABLE logon_log(
    userName nchar(15),
    logonDate datetime);

创建登录触发器:

CREATE TRIGGER tr_logon
ON ALL SERVER
FOR  LOGON
AS
BEGIN
        INSERT INTO logon_log   VALUES(SYSTEM_USER,SYSDATETIME());
END;

表和触发器都创建完成之后,下一次登录到SQL Server Management Studio(SSMS)时出现下面的错误见下图:

“由于执行触发器,登录名xxx的登录失败”错误号17892的解决方法_第1张图片

出错原因是因为执行了上面创建的登录触发器阻止了用户和数据库引擎的连接,为了能够登录到SSMS,需要将触发器禁用或删除。下面介绍禁用和删除的方法。
禁用登录触发器
登录触发器可以有效地阻止所有用户(包括 sysadmin 固定服务器角色的成员)与数据库引擎的成功连接。 在登录触发器正在阻止连接时,sysadmin 固定服务器角色的成员可通过使用专用管理员连接,或者通过以最小配置模式 (-f) 启动数据库引擎,来进行连接。 也就是以最小匹配模式来启动数据库引擎就可以禁用登录触发器。要以最小模式启动需要数据库引擎服务启动选项中的两个:-f和-m。
启动选项中-f的意义是:以最小配置启动 SQL Server 实例。在配置值的设置(例如,过度分配内存)妨碍服务器启动时,这非常有用。在最低配置模式下启动 SQL Server 会将 SQL Server 置于单用户模式。
启动选项中的-m的意义:在单用户模式下启动 SQL Server 实例。在单用户模式下启动 SQL Server 实例时,只能连接一个用户,并且不启动 CHECKPOINT 进程。CHECKPOINT 保证将已完成的事务定期从磁盘缓存写入数据库设备。(通常,在遇到需要修复的系统数据库问题时使用此选项。)启用 sp_configure allow updates 选项。默认情况下,将禁用 allow updates。在单用户模式下启动 SQL Server 可使计算机本地 Administrators 组的任何成员作为 sysadmin 固定服务器角色的成员连接到 SQL Server 实例。
要禁用登录触发器,就需要使用这两个启动选项,添加启动选项的方法是:
打开【SQL Server配置管理器】,选择【SQL Server服务】,在窗口的右边选中SQL Serverr数据库引擎服务,右击,在弹出菜单的【启动参数】选项卡,添加-f和-m两个启动选项。如下图所示,点击【确定】,重启SQL Server数据库引擎服务。
“由于执行触发器,登录名xxx的登录失败”错误号17892的解决方法_第2张图片
删除登录触发器
重启SQL Server数据库引擎服务后,就可以使用SSMS以单用户模式连接到SQL Server。连接到SSMS后,就可删除刚才创建的登录触发器,如下图所示。
“由于执行触发器,登录名xxx的登录失败”错误号17892的解决方法_第3张图片
删除完成之后,记得把启动选项-f和-m删除,不然的话,服务器只支持单用户模式连接。
总结:登录触发器阻止了用户和数据库引擎的连接,要连接到数据库引擎,先禁用登录触发器,即使用最小配置启动 SQL Server 实例、单用户模式连接到数据库引擎,成功连接之后就可删除登录触发器。

你可能感兴趣的:(sql-server)