笔记24-徐 认证与代理问题

笔记24-徐 认证与代理问题

  1 --认证与代理问题
  2 
  3 --常见认证问题有两种:
  4 --1、认证的结果表明用户是个非法用户
  5 --SQL返回客户端18456错误
  6 --每个18456错误会返回一个状态编号,每个编号都有它自己的意思
  7 --根据编号的含义确定错误的原因
  8 --状态   说明
  9 --2       用户ID无效
 10 --5       用户ID无效
 11 --6       尝试同时使用SQL身份验证与Windows登录名
 12 --7       登录已经禁用,密码不正确
 13 --8       密码不正确
 14 --9       密码无效
 15 --11      登录有效,但服务器访问失败
 16 --12      登录有效,但服务器访问失败
 17 --18      必须更改密码
 18 
 19 --2、认证本身遇到错误
 20 --SQL接受的用户有两种,即SQL用户 和Windows用户
 21 --对于SQL帐号,SQL会对发过来的用户名和密码进行核对,正确认证通过,这个过程简单,一般不会出问题
 22 
 23 --对于Windows帐号,SQL需要借助Windows来帮助完成认证过程。
 24 --Windows认证比SQL认证要复杂得多,要牵涉SQL服务器、客户端、域服务器。要代理的话更复杂
 25 
 26 
 27 
 28 --1、SQL认证与密码管理---------------------------------------------------
 29 --对Windows帐号,SQL依赖Windows做身份认证,自己无须保存和维护用户密码信息
 30 --对SQL帐号,SQL要自己保存和维护用户密码,同Windows一样,SQL只保存密码经过加密算法以后的hash值,而不保存密码的原文
 31 --所以DBA可以直接修改密码,但是无法知道密码的原文是什么
 32 --运行以下TSQL可以看到SQL帐号大概是怎麽保存的
 33 SELECT * ,password_hash FROM sys.sql_logins
 34 --password_hash字段就是密码hash值 sa的创建日期是2003-4-8
 35 
 36 --SQL2000以及以前的版本,SQL自身的加密算法是比较弱的。而且用户在登录的时候,密码要通过
 37 --网络传输到服务器,很容易被截获和破解。从安全性考虑,的确远不如Windows认证。
 38 --这也是为什麽SQL认证不被推荐的原因。
 39 --SQL2005以后,SQL认证进行了加强,对SQL帐号,在Windows2003或以上,SQL2005/2008可以使用
 40 --Windows密码策略机制
 41 --我的电脑-右键-》管理-》本地用户和组-》用户-》比如选中administrator用户-》属性
 42 --用户下次登录时须更改密码
 43 --用户不能更改密码
 44 --密码永不过期
 45 --帐户已停用
 46 --帐户已锁定
 47 
 48 
 49 --SQL将Windows2003中使用的相同复杂性策略和过期策略应用于SQL内部使用密码
 50 --此功能需要通过NetValidatePasswordPolicy API实现,该API只在Windows2003
 51 --或以上版本提供
 52 
 53 --密码复杂性
 54 --阻止强力攻击,符号以下原则
 55 --(1)密码不得包含全部或部分用户账户名。部分账户名是指3个或3个以上两端用“空白”(空格,制表符,回车符等)
 56 --或任何以下字符分隔的连续字母,数字,字符,:逗号(,)、句号(.),连字符(-),下画线(_),数字符号(#)
 57 --帐户:dbgxhtsy
 58 --密码:dbgxhtsy1q2w3e4r5t
 59 --(2)密码长度至少为8个字符
 60 --(3)密码包含以下4类字符中的3类
 61 --1、拉丁文大写字母(A-Z)
 62 --2、拉丁文小写字母(a-z)
 63 --3、10个基本数字(0-9)
 64 --4、非字母数字字符,如感叹号(!),美元符号($),数字符号(#),百分号(%)
 65 
 66 
 67 --(4)密码最长可为128个字符,使用的密码应该尽可能长,尽可能复杂
 68 --password_hash varbinary(256)
 69 SELECT * FROM sys.sysprocesses --很多字段都是nchar(128)
 70 
 71 --密码过期
 72 --SQL2005实施密码过期策略
 73 --策略实施
 74 --使用alter login来配置SQL登录名的密码策略选项
 75 --(1)如果check_policy改为on,则出现以下行为
 76 --除非将check_expiration设置为off,否则也会设置为on
 77 --密码历史使用当前的密码哈希值初始化
 78 
 79 --(2)如果check_policy改为off,则出现以下行为
 80 --check_expiration也设置为off
 81 --清除密码历史
 82 --lockout_time的值被重置
 83 
 84 --检查18456错误状态码知道问题方向
 85 --把密码设置为空,并把强制密码过期设置为OFF
 86 ALTER LOGIN hengshan WITH PASSWORD='' UNLOCK
 87 
 88 
 89 
 90 
 91 --2、Windows认证------------------------------------------------------------------
 92 --Windows认证(NTLM和Kerberos)
 93 --只要用户在Windows域里有一个身份,就可以在SQL配置并访问
 94 --当访问SQL时,SQL会请求Windows帮助SQL验证这个用户的身份
 95 --由于Windows验证在安全上要比SQL验证高很多,所以这是
 96 --一个推荐的验证模式
 97 
 98 --认证要三方参与:客户端、SQL、DC DOMAIN CONTROLLER
 99 --Windows认证有两种:NTLM  Kerberos
100 --不是客户端指定不是SQL指定
101 --客户端申请用户认证的时候,去调用Windows认证API,根据
102 --当时API返回值决定使用哪种方法
103 
104 
105 --NTLM比较简单:但是只支持单跃点认证(只有一个客户端和一个SQL服务器)single hop
106 --Kerberos:多跃点认证  double hop  multi hop
107 
108 --委托、代理的情况(双/多跃点)
109 --(1)由客户端委托IIS做身份传递,用户利用IE访问有数据库连接脚本的网页
110 --(2)链接服务器 SQLSERVER链接SQLSERVER或者access
111 --(3)客户端-》sharepoint-》(报表)reporting service-》SQLSERVER 要保证每次认证和双跃点都使用的是Kerberos认证
112 --整个验证才能够成功
113 
114 --先用Kerberos域验证,不行就用NTLM Windows验证
115 
116 --要强制使用Kerberos的条件
117 --客户端和服务器必须属于同一Windows域或在可信域中
118 --如果SQL版本是2000、2005,客户端要使用TCP协议,而不是命名管道做连接
119 --客户端要能够正确得到SQL服务器的IP地址和FQDN,网络上的DNS功能要有效
120 --DC上有且只有一个由SQL当前的启动帐号注册的SPN
121 
122 --ping SQL服务器
123 --反向解析SQL服务器 局域网才有效局域网IP ping出计算机名
124 --ping /a ipaddress
125 
126 
127 
128 --链接服务器 SQL到SQL是最容易排错和跟踪的
129 
130 --在SQL2005或以上 查询连接信息来了解目标连接使用了哪一种认证方式
131 SELECT auth_scheme from sys.dm_exec_connections WHERE session_id=@@spid

 

posted @ 2013-07-27 15:48  桦仔  阅读(158)  评论(0编辑  收藏  举报