jim*_*gee 6 active-directory kerberos sql-server
我正在尝试将全新安装的 SQL Server 配置为在域帐户下运行。但是,在尝试使用另一个域帐户连接到服务器时,我会遇到间歇性错误,并且The SQL Server Network Interface library could not register the Service Principal Name
在搜索 ERRORLOG 文件时仍然会看到。
我已将我的服务帐户(不是托管服务帐户,只是一个普通用户帐户)添加到 AD 组(例如SQL Servers
),并且我已将 ACE 添加到我的域Computers
容器的 ACL,为此组选择:
我已将此复制到所有域控制器,并使用“有效权限”选项卡和 确认了新 ACE 对特定计算机对象的继承dsacls CN=SERVER01,CN=Computers,DC=fabrikam,DC=local
,后者现在包括:
Allow FABRIKAM\SQL Servers
SPECIAL ACCESS for Validated write to service principal name <Inherited from parent>
WRITE SELF
Allow FABRIKAM\SQL Servers
SPECIAL ACCESS for Validated write to service principal name <Inherited from parent>
WRITE SELF
WRITE PROPERTY
READ PROPERTY
Run Code Online (Sandbox Code Playgroud)
但是,当我重新启动 SQL Server 服务时,我仍然看到该could not register the Service Principal Name
消息。我也重新启动了服务器,结果相同。
我使用 Sysinternals Process Explorer 来检查运行情况sqlservr.exe
;那里的安全选项卡清楚地显示了正确的服务用户及其SQL Servers
组成员身份。
我知道我可以用 手动添加 SPN setspn -A
,但这并不是重点。
我还必须做些什么来确保服务帐户(以及我在SQL Servers
组中放置的任何未来帐户)可以在无需人工干预的情况下自动注册自己的 SPN?
和/或
我如何进一步诊断这里缺少哪些特权/权限?
我找到了。
我手动注册SPN的服务帐户,然后检查与ADSIedit中的AD,才发现是手动注册的SPN未存储在servicePrincipalName
该领域的计算机帐户,但servicePrincipalName
在具体的领域用户帐户。
因此,我没有授予我的SQL Servers
组注册他们自己的 SPN 的权限,而是(无意中)授予他们更改由在该计算机上作为本地系统/网络服务帐户运行的服务注册的 SPN 的权利。
我现在已经从Computers
容器中删除了新的 ACE ,而是创建了一个新的SQL Servers
组织单位。我SELF
为此 OU添加了一个 ACE ,并将其限制为适用于后代用户:
SQL Servers
访问控制列表
SELF
现在,当我启动我的 SQL Server 实例时,我看到了预期的The SQL Server Network Interface library successfully registered the Service Principal Name
,并且 Kerberos 现在正用于我的远程连接。
(现在更新我们的内部流程文档,所以它需要在新的 OU 下创建新的 SQL Server 服务帐户,而不是添加到组中)
编辑:请注意,域管理员还可以使用setspn.exe
.
setspn -S MSSQLSvc/myhost.redmond.microsoft.com:1433 DOMAIN\User
setspn -S MSSQLSvc/myhost.redmond.microsoft.com DOMAIN\User
Run Code Online (Sandbox Code Playgroud)
为 Kerberos 连接注册服务主体名称 (TechNet)。
编辑 2:如果Read servicePrincipalName
和Write servicePrincipalName
属性在 ACE 列表中不可见,请转到Attribute Editor对象的“属性”对话框的选项卡,单击Filter按钮并确保以下内容:
(其他组合可能有效,但这对我有用)
归档时间: |
|
查看次数: |
26723 次 |
最近记录: |