标签: spn

为什么 MS SQL Server 使用 NTLM 身份验证?

Windows Server 2008 R2。

已安装 SQL Server 2008 R2。

MSSQL 服务作为本地系统运行。

服务器 FQDN 是 SQL01.domain.com。

SQL01 已加入名为 domain.com 的 Active Directory 域。

以下是 setspn 的输出:

C:\> setspn -L sql01
...
MSSQLSvc/SQL01.domain.com:1433
MSSQLSvc/SQL01.domain.com
WSMAN/SQL01.domain.com
WSMAN/SQL01
TERMSRV/SQL01.domain.com
TERMSRV/SQL01
RestrictedKrbHost/SQL01    
RestrictedKrbHost/SQL01.domain.com
HOST/SQL01.domain.com
HOST/SQL01
Run Code Online (Sandbox Code Playgroud)

然后我启动 SQL Server Management Studio 并因此连接到 SQL01:

在此处输入图片说明

然后我运行以下查询:

SELECT auth_scheme FROM sys.dm_exec_connections WHERE session_id = @@spid 
Run Code Online (Sandbox Code Playgroud)

结果是 NTLM。为什么结果不是 Kerberos?对于使用本地系统帐户,SPN 似乎是正确的。服务器不在集群中或使用 CNAME。

kerberos sql-server spn sql-server-2008-r2

13
推荐指数
1
解决办法
3万
查看次数

创建 spn 的权限

根据我阅读的一些文档,SQL 服务器的服务帐户将在数据库引擎启动时创建一个 SPN,允许进行 kerberos 身份验证。我找不到任何说明帐户创建 SPN 所需权限的文档。那么,为了创建 SPN,帐户需要具有哪些权限(如果可能,禁止域管理员)?

permissions active-directory kerberos spn

11
推荐指数
1
解决办法
3万
查看次数

使用 setspn.exe 创建 SPN - 访问权限不足

在 Windown Server 2008 域控制器上,我尝试将服务主体名称 (SPN) 添加到用户帐户“Postmaster”,以便从 Communigate 电子邮件服务器启用 Kerberos 身份验证。我使用的命令行是以下形式:

setspn -a imap/email-domain.com windows-domain\postmaster
Run Code Online (Sandbox Code Playgroud)

当我运行这个命令时,我得到了结果:

Registering ServicePrincipalNames for CN=Postmaster,OU=Users,DC=windows-domain,DC=com
    imap/email-domain.com
Failed to assign SPN on account 'CN=Postmaster,OU=Users,DC=windows-domain,DC=com', error 0x2098/8344 ->
Insufficient access rights to perform the operation.
Run Code Online (Sandbox Code Playgroud)

这是最奇怪的,因为我以域管理员组中的用户身份登录。我检查了此帐户的有效权限,我看不到任何未包含的权限。我还尝试了不同的管理员帐户,结果相同。

只是为了排除它,我还将用户 Postmaster 添加到域管理员,但结果没有变化。

我直接在域控制器实例上运行此命令。我可以毫无困难地查询 SPN,只是我似乎无法编写它们。

我还尝试使用 ktpass 间接设置所需用户的 SPN,但收到警告:

WARNING: Unable to set SPN mapping data.
Run Code Online (Sandbox Code Playgroud)

...我认为这是同样访问不足问题的症状。

什么可能导致此错误?

windows-server-2008 permissions kerberos spn

8
推荐指数
1
解决办法
2万
查看次数

“setspn -s”与“setspn -a”

根据Setspn 概述,不鼓励使用Setspn -A添加 SPN 记录,建议改为使用Setspn -S

据说Setspn -S在添加新的 SPN 之前会检查 SPN 是否已经存在。Setspn –A不执行此检查。

尽管您可以使用 Setspn -A 添加 SPN,但您应该改用 Setspn -S,因为 -S 将验证没有重复的 SPN。

但是,在 Windows Server 2012 上,我看到了这一点Setspn -S并且Setspn -A行为方式相同:如果存在帐户的 SPN 记录,那么我的参数-A-S参数都会失败。

是否有任何之间真正的区别Setspn -SSetspn -A

windows spn windows-server-2012

8
推荐指数
1
解决办法
2万
查看次数

Active Directory 2012 LDAP 集成服务主体名称条目正在消失?

创建 Python 服务来查询 AD 属性

我正在使用 Python-LDAP over SASL(DIGEST-MD5) 将我们的 AD 与在 Linux 上运行 Python 的 Web 服务集成,以查询 AD 2012 用户属性(部门、部门、电话分机、电子邮件等)。在针对 AD 2003 解决特定于我的服务的问题后,我开始遇到针对我们的新 AD 2012 的 SPN 错误,即摘要 uri 与服务器上的任何 SPN 都不匹配。我已经交叉引用了两台服务器的 SPN 列表,它们包含彼此相同的类似物。

错误:摘要 uri 与为此服务器注册的任何 LDAP SPN 都不匹配

修复?

这是通过运行修复的:

setspn -A ldap/<Domain_Name> <Computer_Name>
Run Code Online (Sandbox Code Playgroud)

请注意,即使运行以下命令,创建服务帐户也无法修复我的 SPN 错误:

setspn -A ldap/<Domain_Name> <Domain_Name>/<Service_Account_Name>
Run Code Online (Sandbox Code Playgroud)

simple_bind_s() 不需要 SPN,sasl_interactive_bind_s() 需要 SPN

仅使用 sasl_interactive_bind_s() 将 SPN 添加到本地机器 SPN 列表才适用于我的 Python-LDAP 服务。我还应该注意,如果我使用 simple_bind_s() 可以跳过 SPN 步骤,但此方法以明文形式发送凭据,这是不可接受的。

但是我注意到该记录只在 SPN 列表上停留了大约一分钟然后消失了?运行 setspn 命令时没有错误,事件日志完全为空,任何地方都没有重复项,在基本 dn 上使用 -F …

active-directory python ldap spn

8
推荐指数
1
解决办法
5370
查看次数

创建密钥表和服务主体名称

我正在尝试为 Java 服务器设置密钥表以支持 Windows 网络上的 Kerberos 身份验证。即使在命令行工具级别,我也很难让它工作,甚至还没有达到服务器设置!我现在的计划是尝试让它在我的开发 PC 上运行,因为我有开发工作和调试要做。所以我的目标是让 Java 服务器在我的 PC 上运行,而客户端在连接到它的同一台机器上运行。

这是我到目前为止所做的,我真的很笨拙,所以我可能会做各种错误的事情!

创建了服务主体名称

我让我们的域管理员之一运行此命令:

setspn -A TEST/pc-name.mydomain.com my-user-name
Run Code Online (Sandbox Code Playgroud)

这似乎成功完成,我可以成功列出此 SPN

setspn -L my-user-name
Run Code Online (Sandbox Code Playgroud)

创建了一个密钥表文件

我用这个命令创建了一个密钥表:

ktpass /princ TEST/pc-name.mydomain.com@MYDOMAIN.COM /pass <my-password> /ptype KRB5_NT_SRV_HST /out <keytab-filename>
Run Code Online (Sandbox Code Playgroud)

这似乎成功创建了一个密钥表,尽管它确实警告 ptype 和帐户类型不匹配(但无论我为 ptype 选择什么,我都会收到相同的警告)。如果我运行这个命令:

klist -k file:/<keytab-filename>
Run Code Online (Sandbox Code Playgroud)

然后它列出了我期望的 SPN,即 TEST/pc-name.mydomain.com@MYDOMAIN.COM

问题!

现在我想检查密钥表是否适用于此 SPN,所以我正在运行

kinit -t <keytab-filename> TEST/pc-name.mydomain.com@MYDOMAIN.COM
Run Code Online (Sandbox Code Playgroud)

然后我收到错误“krb_error 6 Client not found in Kerberos database”。

我究竟做错了什么?

kerberos spn

7
推荐指数
1
解决办法
2万
查看次数

从 Linux 构建服务器创建 SPN

我正在设置一个过程,该过程将自动为新公开的服务 URL 创建 SPN。我知道如何使用具有正确权限的 setspn -A 命令在 Windows 中创建 SPN。

由于我的构建服务器在 Linux 上运行,我想知道,除了登录到 Windows 服务器并运行 setspn 之外,还有什么方法可以从 Linux 服务器创建 SPN?

active-directory kerberos spn

7
推荐指数
1
解决办法
7179
查看次数

帮助使用 setspn 和 ktpass

我正在尝试设置 SPN 并为 tomcat kerberos spnego 单点登录创建密钥表文件。

运行 tomcat7 的服务器是 ubuntu-ad1.wad.eng.hytrst.com KDC 是 kerberos.wad.eng.hytrust.com 域是 WAD.ENG.HYTRUST.COM 我使用我的广告用户名 aulfeldt@WAD.ENG .HYTRUST.COM 机器的AD账号是ubuntu-ad1@WAD.ENG.HYTRUST.COM

首先,我创建 spn 以与用户名关联(希望解释为什么我需要这样做?):

setspn HTTP/ubuntu-ad.wad.eng.hytrust.com aulfeldt@WAD.ENG.HYTRUST.COM
Run Code Online (Sandbox Code Playgroud)

然后我创建一个密钥表以复制到 Web 服务器:

ktpass /out tomcat.keytab /mapuser aulfeldt@WAD.ENG.HYTRUST.COM /crypto ALL /pass * /ptype KRB5_NT_PRINCIPAL 
Run Code Online (Sandbox Code Playgroud)

然后我将其复制到 Web 服务器并用于ktutil将其与 /etc/krb5.keytab 合并。

当我尝试用 kinit 测试它时,我无法从密钥表中成功读取它:

hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo  kinit -k -t /home/hytrust/tomcat.keytab http/ubuntu-ad1.wad.eng.hytrust.com@WAD.ENG.HYTRUST.COM
kinit: Client not found in Kerberos database while getting initial credentials
hytrust@ubuntu-ad1:/usr/share/tomcat7/conf$ sudo  kinit -k -t /home/hytrust/tomcat.keytab HTTP/ubuntu-ad1.wad.eng.hytrust.com@WAD.ENG.HYTRUST.COM
kinit: Client not found in …
Run Code Online (Sandbox Code Playgroud)

active-directory kerberos spn

6
推荐指数
2
解决办法
2万
查看次数

如果我也为 A 记录创建了 SPN,kerberos 是否可以与 CNAME 一起使用?

我们目前正在建立一个 SQL 2012 环境,它将用于存储将由 SSRS 在共享点集成模式下访问的数据。我们将使用 Kerberos 进行身份验证。

我们希望能够做的是为 sql 服务器使用 cnames。我们使用的是默认实例,每台服务器只需要一个实例。

我担心的是 kerberos、IE/.NET 和 CNAME 的已知问题。我想知道只要我确保为 SQL 服务器的 CNAME 和 A 记录正确设置了 SPN,此配置是否有效?

kerberos cname-record sql-server spn

6
推荐指数
1
解决办法
2万
查看次数

Active Directory 复制目标主体名称不正确

我有一个使用 Win 2008 R2 机器的小型 2 DC 域。最近,不得不使用备份执行系统恢复来恢复。

现在两者都无法复制。我在两者上都运行了 DCDIAG(见下文),发现有几件事因目标主体名称不正确而失败。在检查 DNS 以及要检查的 SETSPN 命令后,两个 DC 似乎都有彼此的条目,所以我不确定我做错了什么或接下来的步骤是什么。

任何帮助将不胜感激!

域控制器:

  • 终极法则
  • Central-Dogma(这是最近恢复的那个)

DCDiag for Terminal-Dogma (PasteBin)

DCDiag for Central-Dogma (PasteBin)

active-directory replication windows-server-2008-r2 spn

6
推荐指数
1
解决办法
1万
查看次数