笔记21-徐 SQL连接与认证以及常见错误
笔记21-徐 SQL连接与认证以及常见错误
1 --SQL连接与认证以及常见错误 2 --连接建立后,客户端需要告诉SQL自己是谁,SQL需要认证是否为合法SQL用户,从而 3 --赋予它预先设置好的权力。这些工作由客户端数据驱动程序(ODBC\OLE DB \Native Client\JDBC等等) 4 --和SQL交互完成 5 6 7 8 --错误 9 --1、客户端驱动没能找到用户指定的SQL 10 --2、SQL已经找到,连接已经建立,但是因为某种未知原因,连接被异常中断 11 --3、用户认证失败,SQL认为连接使用了一个非法用户而拒绝 12 --4、认证过程遇到错误,认证动作异常终止 13 14 15 --Windows认证的两种模式:NTLM 和 Kerberos 16 --NTLM是个比较要求低的技术,但是使用范围有限制 17 --有时候要使用代理(delegation)技术时,必须要求Windows认证使用Kerberos 18 --可是,不是每个SQL都能做Kerberos认证和代理的(delegation) 19 --这也是连接问题经常发生的地方 20 21 22 --命名管道是为局域网而开发的协议 23 --使用win32文件系统API(readfile 和writefile)进行数据收发 24 --SQL使用CreateNamedPipe函数创建命名管道并对之进行监听 25 --客户端使用CreateFile和WriteFile函数试图连接到服务器的命名管道 26 27 28 --即使客户端使用命名管道协议连接,你也要配置TCP或其他基层网络协议 29 --以为保证网络连通性 30 31 --命名管道是一个要通过系统认证的协议,利用Windows内置的安全机制 32 --但是Kerberos认证也要使用TCP/IP协议,所以没什么特殊原因,建议总是 33 --优先考虑使用TCP/IP协议 34 35 36 --使用协议的优先顺序 37 --服务器网络协议配置 38 --客户端设置协议的先后顺序 39 --客户端上次成功连接的缓存,根据缓存信息做第一次尝试连接 40 --客户端指定SQL服务的别名,指定这个服务的连接方式 41 42 43 --SQL配置管理器中网络配置 44 --配置结果存放在 45 --HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\ 46 --下的各个项目里,不用管理界面,直接修改注册表也能达到同样目的 47 48 --配置好网络协议后,重启SQL,在errorlog里检查协议启用情况 49 --TCP/IP 50 --Server is listening on [ 'any' <ipv4> 1434]. 51 --命名管道 52 --09/19/2012 18:16:30,服务器,未知,Server named pipe provider is ready to accept connection on [ \\.\pipe\sql\query ]. 53 --共享内存 54 --09/19/2012 18:16:30,服务器,未知,Server local connection provider is ready to accept connection on [ \\.\pipe\SQLLocal\MSSQLSERVER ]. 55 56 57 --如果客户端要连接SQL,使用命名管道就须指定管道的名字 58 59 60 ----------------------SQLSERVER解析协议SSRP与SQL Browser服务--------------------------------------------------------- 61 --SQL2000以前,一台计算机只能安装一个SQL实例 62 --SQL2005引入对SQL多个实例的支持,却只有默认的SQL实例可以使用1433端口 63 --命名实例每次启动绑定的端口号都不一样 64 65 --SQL产品组开发了SQLSERVER解析协议SSRP,用于侦听UDP1434 66 --当任何一个客户端要访问这台服务器上的SQL实例时,都会先询问UDP1434端口, 67 --然后由SSRP协议告诉客户端本台服务器上所安装的SQLSERVER实例的端口号以及 68 --管道名字,客户端根据这个反馈,知道该和哪个端口或管道连接了 69 70 --客户端(说明要连接的实例,不说明就默认实例)----》UDP1434----》SSRP---》实例的端口号或管道名 71 --客户端----》端口号或管道名 72 --默认实例---》对应的端口1433 或 管道名字 73 --命名实例---》SSRP---》对应的端口号 或管道名字 74 75 76 --SQL Browser启动后,启动并使用1434端口。读取注册表 77 --HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\ 78 --下的各个项目,识别计算机上的所有SQL实例,并标明它们使用的端口和命名管道 79 --当一台服务器有多个网卡时,SQL Browser会为SQL返回其遇到的第一个已启用的端口 80 81 --当SQL客户端请求SQL资源时,客户端数据驱动程序将使用1434端口向服务器发送一条UDP消息, 82 --SQL Browser会回应请求实例的TCP/IP或命名管道名称。 83 --然后客户端使用所需实例的端口或命名管道向服务器发送请求来完成连接 84 85 --当SQL Browser不运行时,如果你提供正确的端口号或命名管道,依然可以连接SQL 86 --如果SQL的默认实例的端口号是1433,则可以使用TCP/IP连接此默认实例 87 --即是话:如果使用TCP/IP连接到远程机器的默认实例,因为默认实例的端口就是1433 88 --那么开不开SQL Browser都无所谓!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! 89 90 --如果停掉SQL Browser以下连接无效 91 --未提供端口号或管道名字就连接到命名实例 92 --未完全指定所有参数情况下(管道名字 TCP/IP端口)尝试连接到命名实例 93 --未使用TCP1433情况下,将DAC连接到命名实例或默认实例(反正就要开SQL Browser) 94 --枚举局域网中的SQL服务器 如果局域网中的SQL服务器没有开SQL Browser 95 --关掉了手提的SQL Browser 在台式机里看不到JOE\SQLEXPRESS,因为JOE\SQLEXPRESS是命名实例 96 --开启SQL Browser,就可以看到JOE\SQLEXPRESS了,但是就看不到默认实例joe了 97 98 99 100 --如果连接命名实例,需要在防火墙或网关上打开UDP1434端口 101 --SQL Browser的启动帐号要有读写注册表的权力,否则会导致客户端连接不上