笔记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