原文: Chapter 1 Securing Your Server and Network(9):使用Kerberos用于身份验证 原文出处:http://blog.csdn.net/dba_huangzj/article/details/38332605,专题目录:http://blog.csdn.net/dba_huangzj/article/details/37906349

未经作者同意,任何人不得以“原创”形式发布,也不得已用于商业用途,本人不负责任何法律责任。

前一篇:http://blog.csdn.net/dba_huangzj/article/details/38263043

前言:

在活动目录(Active Directory)中,有两种身份验证机制:NTLM和Kerberos。其中NTLM(NT LAN Manager)是基于旧版加密方式的授权协议,微软不建议再使用。详情可见:http://msdn.microsoft.com/en-us/library/cc236715.aspx

Kerberos是一个免费的软件协议,有MIT(麻省理工)首先开发出来,并从Windows 2000开始引入。通过secured tickets(暂时未发现专业术语)的转换对客户端和服务器进行安全识别。相对于使用哈希密码,Kerberos通过共享安全加密密钥来管理身份验证。客户端和验证服务器共享一个对称密钥,。其中验证服务器成为KDC(Key Distributor Center,密钥分发中心),并且作为域控制器的服务运行。

在登录时,客户端会从KDC中请求一个Ticket Grant Ticket (TGT) ,然后KDC创建一个包含客户端标识的TGT,并连同把带有密钥的会话返回给客户端。TGT的寿命不长,通常只有8~10小时。过时之后,客户端不能在访问资源。

服务标签(Service ticket)必须包含目标资源(如SQL Server实例)的Service Principal Name(SPN,服务主体名称)。当KDC接收到请求,会回送服务标签。这个标签会在后续用于客户端请求访问服务器之用。更多信息可以访问:http://technet.microsoft.com/en-us/library/cc772815.aspx

实现:

使用Kerberos,需要在域环境中,并且服务器的SPN必须已经注册到Active Directory。如果满足这些条件,那么Kerberos应该默认已经使用,可以在SQL Server中检查:

SELECT auth_scheme, net_transport, client_net_address FROM sys.dm_exec_connections;

如果连接是来自同一个域或者使用NTLM授权的可信任域,需要研究为什么没有使用Kerberos。当SQL Server启动时,会尝试自动注册自己的SPN到Active Directory中,如果SQL Server服务帐号没有权限,那么SPN就不能创建,并且Kerberos授权也将不能使用。

检查SPN是否已经注册,可以在cmd或者PowerShell中输入下面的命令:

setspn.exe -L DOMAIN\<SQL service Account>

本人环境下如图:

应该要看到其中一个信息:

MSSQLSvc/SQL-A.Contoso.com:1433  --格式为:MSSQLSvc/<SQL Server机器名>.<域名>.com:<端口号>

检查上图可见没有这个信息,证明没有成功,所以再上一个图的结果周鞥只有NTLM授权。通常是因为这个帐号没有"write public information"  权限。默认情况下,SQL Server服务帐号如果是一个域用户安装的,将没有这个权限。

现在把SQL Server服务帐号换成域管理员,再次检查可见已经得到期待结果了:

如果发现没有注册SPN,可以使用下面步骤实现:

1. 在域控制器的【管理工具】中,选择【ADSI 编辑器】:

2.连接到【默认命名上下文】,查找服务帐号并且右键【属性】,然后选择【安全】页:

3. 对SELF授予【写入 公共 信息】,并重启SQL Server服务:

注意,本机是用contoso\mirroradmin安装和运行的,所以这里选择这个帐号授权。授权完毕之后,再次查询,可以见到已经有Kerberos连进了了。

原理:

SPN是实例的唯一标识,没有合适的SPN,Kerberos不能验证一个服务并提供服务标签来允许客户端访问。所以如果没有SPN,客户端唯一能用的验证方式是NTLM,而SPN必须安装在活动目录,并且有KDC角色。

SPN的固定格式:<service>/<host>:<port/name>。其中host是完全合格域名(Fully Qualified Domain Name  ,FQDN)。

更多信息:

如果不想授予【写入公共信息】到AD上,或者某些原因SPN不能注册,可以手动执行下面语句创建:

setspn.exe -A MSSQLSvc/SQL-A.Contoso.com:<port> Contoso\SQL-A  --其中SQL-A是机器名,contoso是域名

对于Kerberos问题侦测可以阅读下面文章:

http://blogs.technet.com/b/askds/archive/2008/05/14/troubleshooting-kerberos-authentication-problems-name-resolution-issues.aspx

下一篇:http://blog.csdn.net/dba_huangzj/article/details/38368737

Chapter 1 Securing Your Server and Network(9):使用Kerberos用于身份验证相关推荐

  1. Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号

    原文: Chapter 1 Securing Your Server and Network(1):选择SQL Server运行账号 原文出处:http://blog.csdn.net/dba_hua ...

  2. Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙

    原文: Chapter 1 Securing Your Server and Network(6):为SQL Server访问配置防火墙 原文出处:http://blog.csdn.net/dba_h ...

  3. Chapter 1 Securing Your Server and Network(2):管理服务的SIDs

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/37927319 ,专题文件夹:http://blog.csdn.net/dba_huang ...

  4. SQL Server安全(2/11):身份验证(Authentication)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  5. mysql windows身份验证_SQL Server 2005 怎么就不能用Windows身份验证方式登录呢?

    SQL Server 2005 自从装到我的电脑上始终无法使用Windows身份验证的方式登录,由于使用用户名和密码登录还算顺畅,所以一直忽略了这 SQL Server 2005 自从装到我的电脑上始 ...

  6. aws rds监控慢sql_AWS RDS SQL Server中的初始Windows身份验证配置

    aws rds监控慢sql In this article, we will be exploring the process of enabling Windows authentication i ...

  7. java与sql用windows身份连接,使用Windows身份验证将我的Sql Server 2008数据库连接到我的Java项目...

    JDBC驱动程序支持通过则将integratedSecurity连接字符串属性在Windows操作系统上使用类型2集成身份验证.要使用集成身份验证,请将sqljdbc_auth.dll文件复制到安装了 ...

  8. ms2005 SQL Server设置改为SQL Server身份验证

    1.为 SQL Server 2005 Express Edition 或 SQL Server 2005 Developer Edition 启用远程连接 必须为要从远程计算机连接到的每个 SQL ...

  9. 微软SQL服务器登录,Microsoft SQL Server 【Windows 身份验证】和 【sa】都无法登录的解决方案...

    1.修改启动参数:打开[SQL Server 配置管理器(SQL Server Configuration Manager)]→右键[SQL Server(MSSQLSERVER)]属性→高级(Adv ...

最新文章

  1. redis安装教程 windows环境
  2. MySql Unknown column 的解决方案
  3. linux 内存规划,生产场景怎么对linux系统进行合理规划分区?
  4. 中艺人脸识别考勤机使用方法_人脸识别考勤机的使用方法及注意事项 - 全文
  5. x 6什么意思python_Python基础_6
  6. Keil5的仿真调试
  7. 暖心社区(2018-07-17)
  8. Multicarrier Interpretation of OTFS(OTFS的多载波解释)(7)⭐
  9. HTML5和CSS3新增
  10. 批处理删除文件夹命令_批处理文件夹命令
  11. Spark大数据技术与应用
  12. 浏览器服务器文件夹在哪里找,IE临时文件夹在哪?Win7系统下如何查找临时文件夹...
  13. android熄屏微信收到原理,求助,如何才能在息屏状态下显示收到的微信消息内容?...
  14. Cesium雷达追踪圆锥体
  15. java数组初始化 new_java 数组初始化
  16. Matlab绘图(二)—变色散点图二维、三维绘制
  17. 自动化打卡,Tasker+模拟器远程打卡
  18. 计算机二级office第37套word,全国计算机等级考试 二级MS Office高级应用(Word部分:第11-20套)...
  19. 2020年中国城市地下空间市场现状分析,东部地区供需市场依旧领先「图」
  20. SAP与三大财务报表之 “现金流量表”

热门文章

  1. Android线程实例讲解
  2. Visual C++ 2011-8-15
  3. mht to html
  4. sumk跟spring boot的比较
  5. 老李分享:HTTP协议之请求和响应
  6. P1800 software_NOI导刊2010提高(06)
  7. 深度 | 人工智能的游戏征途:超级玛丽简直小菜一碟,星际争霸、LOL才是大boss...
  8. NDK 高级编程(笔记)
  9. Docker核心技术
  10. 微信公众平台开发教程(九)微信公众平台通用开发框架