原文: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(10):使用扩展保护避免授权中继攻击

    原文:Chapter 1 Securing Your Server and Network(10):使用扩展保护避免授权中继攻击 原文出处:http://blog.csdn.net/dba_huang ...

  2. Chapter 1 Securing Your Server and Network(8):停止未使用的服务

    原文:Chapter 1 Securing Your Server and Network(8):停止未使用的服务 原文出处:http://blog.csdn.net/dba_huangzj/arti ...

  3. Chapter 1 Securing Your Server and Network(7):禁用SQL Server Browse

    原文:Chapter 1 Securing Your Server and Network(7):禁用SQL Server Browse 原文出处:http://blog.csdn.net/dba_h ...

  4. 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_hu ...

  5. Chapter 1 Securing Your Server and Network(5):使用SSL加密会话

    原文:Chapter 1 Securing Your Server and Network(5):使用SSL加密会话 原文出处:http://blog.csdn.net/dba_huangzj/art ...

  6. Chapter 1 Securing Your Server and Network(4):使用虚拟服务帐号

    原文:Chapter 1 Securing Your Server and Network(4):使用虚拟服务帐号 原文出处:http://blog.csdn.net/dba_huangzj/arti ...

  7. Chapter 1 Securing Your Server and Network(3):使用托管服务帐号

    原文:Chapter 1 Securing Your Server and Network(3):使用托管服务帐号 原文出处:http://blog.csdn.net/dba_huangzj/arti ...

  8. 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_huan ...

  9. Chapter 1 Securing Your Server and Network(12):保护链接server

    原文出处:http://blog.csdn.net/dba_huangzj/article/details/38438363.专题文件夹:http://blog.csdn.net/dba_huangz ...

随机推荐

  1. POJ 1088 滑雪 记忆化优化题解

    本题有人写是DP,只是和DP还是有点区别的,应该主要是记忆化 Momoization 算法. 思路就是递归,然后在递归的过程把计算的结果记录起来,以便后面使用. 非常经典的搜索题目,这样的方法非常多题 ...

  2. uboot启动阶段修改启动参数方法及分析

    作者:围补 本来启动方式这节不是什么复杂的事儿,不过想简单的说清楚明白,还真是不知道怎么组织.毕竟文字跟有声语言表达有别.但愿简单的东西别让我讲的太复杂! Arm板系统文件一般有三个——bootloa ...

  3. 【译】ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串

    原文:[译]ASP.NET MVC 5 教程 - 5:使用 SQL 服务器 LocalDB 创建连接字符串 在上一节中,我们创建了MovieDBContext 类来连接数据库.处理Movie 对象和数 ...

  4. 忘记root密码时如何重设密码

    哈哈,太久没用linux了,把自己的登陆密码给忘了.今天找了下方法如何重设密码以登陆系统. 此文仅以作备忘. 忘记linux密码时,可以使用单用户模式进入linux,修改root密码.1.在linux ...

  5. 用bytecode来看try-catch-finally和return

    之前看过一篇关于return和finally运行顺序的文章.仅在Java的语言层面做了分析.事实上我倒认为直接看bytecode可能来的更清晰一点. 近期一直在看Java虚拟机规范.发现直接分析byt ...

  6. qt的资源替换搜索QDir具体解释

    QDir对跨平台的文件夹操作提供了非常多的便利,为了更加方便的提供全局资源的查找,QDir提供了搜索路径替换功能,攻克了资源搜索不便的问题,也能提高文件查找的效率. QDir通过已知的路径前缀去搜索并 ...

  7. 线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的使用方法

    线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的使用方法 注:使用结构CRITICAL_SECTION 需增加头文件#include “afxmt. ...

  8. MySQL先进的技术-存储引擎

    MySQL功能被分成两部分,主要有成品的外部client连接和可行性研究SQL函数语句,内侧部分被称为存储引擎,它负责接收外部操作指令数据,实际数据是完整的,文件输入和输出操作的工作 版权声明:本文博 ...

  9. SQL Server中的查询

          本博文简介一下SQL Server中经常使用的几类查询及相关使用的方法.       一.ExecuteScalar方法获取单一值       ExecuteScalar方法是SqlCom ...

  10. [转载][NAS] 使用win8的“存储池”功能~

    之前自己用DQ77KB搭建一个小存储系统(帖子链接:http://www.chiphell.com/thread-567753-1-1.html),一直使用intel主板带的软RAID功能构建RAID ...