一、
sql Server访问时常见
错误
1.1、
sql Server不存在或访问被拒绝
(1)、能否PING通服务器(检查网络)
基础网络知识:
序号 目标 现象 结果
1 127.0.0.1 能通 说明
TCP/IP说明没有问题
2 本机网卡IP 能通 说明
TCP/IP已与网卡正确绑定
3 对方IP或网关(同一网段) 能通 说明网线和对方设置都没有问题
4 对方IP或网关(同一网段) 不通 作如下软硬件方面的检查
硬件:
1:网卡问题:插槽坏了,网卡没插好,网卡坏了,网口坏了;
2:网线问题:水晶头,水晶头与网卡的接触不好(劣质水晶头),网线内部断了,或者没有插网线;
软件:
1:网卡驱动;
2:网卡设置(IP,掩码,网关,DNS);
3:
错误的设置路由(win2000/win2003);
4:防火墙的原因(
包括XP
自带或者第三方的);
5:如果
TCP/IP协议的[卸载]选项是灰色的,说明WinXP 系统的
TCP/IP协议已经被卸载。PING 127.0.0.1的时候就会出现
错误,此时无法通过重装
TCP/IP协议还原系统的
TCP/IP,可以利用NETSH命令的重置
TCP/IP协议堆栈
功能
格式如下
c:\>netsh
netsh>interface
netsh interface>ip
netsh interface ip>RESET C:\RESETTCPIP.LOG
说明:
NETSH 在重置
TCP/IP堆栈的时候必须指定
一个记录
文件
其中C:\RESETTCPIP.LOG 为
一个记录
文件.用来记录NETSH 在重置过程中的所有操作
这样重置以后
TCP/IP协议就可以
回复为正常时候的状态了。
6:如何
自动分配IP
用ipcon
fig /release,ipcon
fig /renew命令看看能不能
获取IP,可运行ipcon
fig/all查看,如果
显示了DHCP Server的地址,而ip地址仍然为0.0.0.0,那么就运行"services.msc",确保[DHCP Client]服务已经启动。
(2)、能否TELNET通服务器(检查
sql Server服务及端口)
运行"services.msc",确保服务器上TELNET服务启用的情况下,运行telnet 192.168.0.1 1433,1433是
sql Server 2000对于
TCP/IP的
默认侦听端口。如果有问题,则
提示“……无法打开连接,连接失败"。
如果这一步有问题,应该检查以下选项:
² 服务器是否启动了
sql Server 2000服务;
² 检查服务器端的网络配置,在服务器上打开:开始>程序>Microsoft
sql Server>服务器网络实用工具,检查是否启用
TCP/IP协议,以及
TCP/IP协议的端口是否与上面TELNET时的端口一致。同样,如果存在防火墙的话,也要打开该端口。
² 检查服务器是否在侦听
sql Server的
TCP/IP端口:在服务器命令行下面输入netstat -a -n 或者是netstat -an,在结果列表里看是否有类似 tcp 127.0.0.1 1433 listening 的项。如果没有,则需要给
sql Server 2000打上至少sp3的补丁。其实在服务器端,可以按照《
sql Server 2000 基础(1)——安装》中的
方法查看当前补丁的版本。
如果以上都没问题,再次TELNET测试,将会看到屏幕一闪之后光标在命令行窗口
左上角闪动,这表明TELNET测试成功。
但有的时候TELNET通了,上面的检查全正常但还是报这个错,后来我发现用JDBC可以连接上,于是,就猜想可能是ODBC的原因(
查询分析器用的是ODBC驱动连到
数据库的),就装了个
mdac2.8,然后再去控制面板中用ODBC数据源测试,还是不通,无意间改了一下数据源中的客户端配置,将其中的端口由动态改为固定,就可以连接成功了,至于其中原因还没有分析清楚。
(3)、检查客户端的网络配置
在客户端打开:开始>程序>Microsoft
sql Server>客户端网络使用工具。
检查是否启用
TCP/IP协议,以及
TCP/IP协议的端口是否与服务器端的一致。
附注:在连接本地服务器时,通常使用的是命名管道协议(在服务器网络实用工具里可以看到启用的协议有这个),
默认端口是445,因此在本地能连通是不能说明什么问题的,连接远程服务器是使用的
TCP/IP协议。
1.2、无法连接到服务器,
用户xxx登陆失败
错误产生的原因有两种:
(1)密码
错误,如果密码中有字母,可检查大小写;
(2)由于
sql Server使用了"仅 Windows"的身份验证方式,因此
用户无法使用
sql Server的
登录帐户(如sa )进行连接,
解决办法如下:
企业管理器>服务器>编辑
sql Server
注册属性>使用windows身份验证,以连接上
sql Server;
企业管理器>服务器>
属性>安全性,以设置身份验证模式为
sql Server和Windows;
重新启动
sql Server服务,用
sql Server
用户重新连接。
以上设置可通过
修改注册表来实现,如下:
运行REGEDIT,打开
注册表;
打开到
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MS
sqlServer\MS
sqlServer
将右侧窗口的”LoginMode”项的值从1改为2;
重新启动
sql Server服务,用
sql Server
用户重新连接。
以下
注册表键:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MS
sqlServer\MS
sqlServer\LoginMode的值决定了
sql Server将采取何种身份验证模式.
1.表示使用Windows身份验证模式 ;
2.表示使用混合模式(Windows身份验证和
sql Server身份验证)。
1.3、
提示连接超时
遇到这个
错误,表示客户端已经找到了这台服务器且可以连接,不过是由于连接的时间大于允许的时间而导致出错。
一般当
用户在Internet上用客户端连接服务器时,如果网速慢,有可能会导致以上的超时
错误。某些情况下,由于局域网的网络问题,也可能会导致这样的
错误。
默认情况下,通过企业管理器
注册另外一台
sql Server的超时设置是4秒,而
查询分析器是15秒,这也是为什么在企业管理器里发生
错误的可能性比较大的原因。
要
解决这样的
错误,可以
修改客户端的连接超时设置,如下:
企业管理器中的设置:企业管理器>工具>选项>高级>连接设置>
登录超时;
查询分析器中的设置:
查询分析器>工具>选项>连接>
登录超时。
1.4、
sql Server 2000无法打开1433端口
如果你是WINXP 或WIN2003,那么一定要安装
sql SERVER SP3及以上的补丁。
注意:SP4补丁执行的时候是解压,要在解压后的目录中执行setup.bat才是真正的安装。
二、
禁止别的电脑访问本机的
sql Server服务器
(1)设置
用户密码(
包括WINDOWS和
sql SERVER),不提供
用户及密码给不想让其访问的
用户;
(2)防火墙中设置限制,只允许指定IP访问你的
sql Server服务器端口(
默认1433),当然,从更为安全的角度来考虑,应该把1433端口改成其他的端口;
(3)如果使用
sql Server 2005,还可以通过端点限制的
方法来实现,此
方法要求一块专门的网卡,所有可以
连接Sql Server的客户端均通过此网卡接入(假设此网卡的IP是192.168.1.1):
1. 在“
sql Server 配置管理器”的“
sql Server 2005网络配置中”,
禁止除
TCP/IP之外的所有协议;
2. 使用如下的T-
sql禁止默认的TCP端点
ALTER ENDPOINT [T
sql Default TCP]
STATE = STOPPED
3. 使用如下的T-
sql建立新的TCP端点和授权
USE master
GO
-- 建立
一个新的端点
CREATE ENDPOINT [T
sql User TCP]
STATE = STARTED
AS TCP(
LISTENER_PORT = 1433,
LISTENER_IP = (192.168.1.1) -- 侦听的网络地址
)
FOR T
sql()
GO
-- 授予所有
登录(或者指定
登录)使用此端点的连接权限
GRANT CONNECT ON ENDPOINT::[T
sql User TCP]
TO [public]
完成上述配置之后,只有通过网络地址配置为192.168.1.1的网卡接入的客户端才能访问
sql Server;另外,如果只授予指定
登录对端点的连接权限,则只有指定的
登录才能接入
sql Server实例。
(4)当
sql Server 2005
升级到SP2或者更高的版本的时候,还可以通过服务器级的DDL触发器来实现控制。
执行下面的T-
sql后,将使除IP地址为192.168.1.1之外的客户端连接失败。
USE master
GO
CREATE TRIGGER tr_LoginCheck
ON ALL SERVER
FOR
logoN
AS
IF EVENTDATA().value('(/EVENT_INSTANCE/ClientHost)[1]','varchar(15)') <> '192.168.1.1'
ROLLBACK TRAN
GO