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