我正在尝试设置 Postgres 以支持 SSPI/Kerberos,但是我认为我还没有找到使其运行所需的正确 SPN。
背景详情:
- postgres 的服务帐户:“postgres”
- 域名:'testdomain.com'
- 域控制器:'dc.testdomain.com'
我尝试过以下 SPN,但毫无效果:
setspn -A HOST/testdomain.com postgres
setspn -A HOST/testdomain postgres
setspn -A POSTGRES/testdomain.com postgres
setspn -A POSTGRES/testdomain postgres
setspn -A POSTGRES/dc.testdomain.com postgres
有人有什么建议吗?
答案1
SPN 不使用域名和/或域控制器的名称,而是使用将用于连接到服务的 FQDN。响应的 Web 服务器的 SPNwww.domain.com
将是HTTP/www.domain.com
。
接下来,您需要将 SPN 分配给运行该服务的用户帐户;如果该服务作为域计算机运行LocalSystem
或NetworkService
在域计算机上运行,那将是该计算机的机器帐户;否则它就是运行该服务的实际用户帐户。
您的问题中缺少的是运行 Postgres 的服务器的名称;假设它是servername.testdomain.com
,则设置 SPN 的命令将是:
setspn -S POSTGRES/servername.testdomain.com postgres
或者(使用域 NetBIOS 名称并假设它是TESTDOMAIN
)
setspn -S POSTGRES/servername.testdomain.com TESTDOMAIN\postgres
资料来源:
https://wiki.postgresql.org/wiki/Configuring_for_single_sign-on_using_SSPI_on_Windows
https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-server-2012-r2-and-2012/cc731241(v=ws.11)
答案2
正确的做法是:
setspn -A postgres/machinename.domainname serviceaccount