在登录触发器错误情况下连接SQL Server的方法_mssql2005

错误如图所示:

图一

如果不能很好地执行登录触发器,那么将会导致登录失败。

例如,如果创建了这个触发器,那么就可以设计下面的代码来达到失败的目的。

复制代码 代码如下:

CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON
AS
BEGIN
INSERT INTO BadDB.dbo.SomeTable VALUES ('Test');
END;
GO

没有一个数据库称为BadDB,这意味着在BadDB内也没有一张表叫SomeTable。因此,任何登录到该服务器的正常尝试都会失败,因为这个触发器涉及到一个不存在的对象。为了纠正这一问题,你也需要:
使用一个现有的建立连接,该连接拥有合适的权限。
使用专用管理员连接(DAC)连接SQL Server。
如果你现有的一个连接可以删除触发器或者使触发器不可用,那么请使用现有的连接来纠正这个问题。但是可能在一些情况下,你的连接没有这种功能,那么你需要依赖专用管理员连接。
默认情况下,这个专用管理员连接只能在本地服务器中使用。这就意味着,你需要通过登录到本地计算机或者使用另一种方式如远程桌面来连接。一旦你登录了,你就可以使用SQLCMD或者SSMS。
如果你使用SQLCMD,你要通过该专用管理员连接指定一个-A开关来连接。如果你通过SSMS连接,那么要确定通过在服务器名前面指定ADMIN:来连接,如图二。

图二
产生这种现象的原因是SQL Server通过专用管理员连接把对连接的检查和资源减到最少。当一个或多个进程消耗一个SQL Server而造成登录不能正常进行时,这种方法就给数据库管理员一个“后门”。当通过DAC连接时,SQL Server不做的一件事是执行任何登录触发器。因此,你可以使用DAC,你不会被这个不好的触发器所阻碍。然后如果需要,你可以使这个触发器不可用或者删除这个触发器。
例如,一旦通过DAC连接,我就可以执行下面的命令来完全摆脱这个触发器:

复制代码 代码如下:

DROP TRIGGER BadLogonTrigger ON ALL SERVER;
GO

时间: 2024-10-23 15:49:39

在登录触发器错误情况下连接SQL Server的方法_mssql2005的相关文章

在登录触发器错误情况下连接SQL Server

如果你创建了一个登录触发器,并且在这个触发器中有一些不好的代码,那么当你尝试着登录时,你将会得到一个类似于图一显示的错误: 图一 如果不能很好地执行登录触发器,那么将会导致登录失败. 例如,如果创建了这个触发器,那么就可以设计下面的代码来达到失败的目的. CREATE TRIGGER BadLogonTrigger ON ALL SERVER FOR LOGON AS BEGIN INSERT INTO BadDB.dbo.SomeTable VALUES ('Test'); END; GO 没

Win7 安装软件时无法连接sql server解决方法_mssql2005

安装软件的时候默认访问sql server账号是sa,Management Studio Express默认是使用Windows身份验证登陆的,在系统默认实例Security的Login目录下找到了sa账户,查了下,原来是SQL server的默认管理员账户,而且据说还出现过好多安全漏洞.既然只是本地使用,也不必考虑那么多,能用就成. 用管理员权限打开Management Studio Express,这个时候不能使用sql账号登陆,用Windows身份验证登陆后,在实例下右键点击SQL服务器名

Windows系统下Java连接SQL Server的方法简介_java

使用JDBC连接SQL Server 设置SQL Server服务器 我使用的是SQL Server 2005标准版SP2,这些都默认即可,一般不用配置.如果需要配置端口请看下面. 1."开始"→"程序"→"Microsoft SQL Server 2005"→"配置工具"→"SQL Server 配置管理器"→"SQL Server 2005 网络配置"→"MSSQLSERV

JDBC连接Sql Server 2005总结_mssql2005

1.准备工作: 准备相关的软件(Eclipse除外,开源软件可以从官网下载) <1>.Microsoft SQL server 2005 Express Edition 下载地址:http://download.microsoft.com/download/0/9/0/09020fab-d2c3-4a8c-b9e0-db53a7a30ae8/SQLEXPR_CHS.EXE <2>.SQL Server Management Studio 下载地址:http://www.micros

Access无需DSN文件快速连接SQL Server的方法

第1步.通过ODBC导入在SQL服务器中所需的链接表 第2步.在启动窗体的加载代码中加入 此代码: Private Sub Form_Load()On Error GoTo ae    DoCmd.TransferDatabase acLink, "ODBC", "ODBC;DRIVER=SQL Server;SERVER=SERVER\yde;UID=sa;PWD=a123;DATABASE=daad", acTable, "", "

求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码

问题描述 求大神帮下忙,小弟需要一个java连接sql server数据库实现查询功能的代码 如题 求大神给个查询功能的代码 做毕业设计需要 帮帮忙 下面附上添加功能的代码 public int Add(Client c) { int count=0; try { con=this.getcon(); String sql=String.format("insert Client values('%s',%d,'%s','%s','%s','%s','%s',0,'%s')", c.g

这种情况下,SQL语句怎么写?急急急!

问题描述 这种情况下,SQL语句怎么写?急急急! 2C 我有表table1 其中有字段 name 和 address.这两个字段的值不可能相等,而且不同行它们的值也不会相等.现在要实现一个功能:我传入属于这两个字段的任意一个值,如果这个值与name或者address匹配.则将name或者address清空.例如:name是 xiaoming,address 是beijing name是xiaohong,address 是shanghai我要求输入xiaohong,就将xiaohong清空.输入b

这种情况下,SQL语句怎么写?求救!!!

问题描述 这种情况下,SQL语句怎么写?求救!!! 有表table1,它有两个字段c1,c2.这两个字段可能有值,也可能没有值,如果有值,我希望两个值用逗号分隔并输出,如果两个字段都没有值,我希望什么都不输出,我用了CONCAT方法CONCAT(CONCAT(c1,','),c2).但是都没有值得时候,仍然会输出一个逗号,这不是我想要的.有什么好的解决方法啊.求救 解决方案 case when c1 is null and c2 is not null then c2 when c1 is no

Windows和Linux系统下perl连接SQL Server数据库的方法_perl

本文将提供一些perl连接Microsoft SQL Server数据库的实例.perl脚本运行在Windows和Linux平台. Windows平台 如果在Windows平台下运行perl脚本,建议使用依赖DBI的两个模块包,提供标准的数据库接口模块. DBD::ODBC DBD::ADO 使用DBD::ODBC 如果选用DBD::ODBC,下面的实例代码将展示如何连接到SQL Server数据库: 复制代码 代码如下: use DBI;   # DBD::ODBC   my $dsn = '