PostgreSQL 新手。在 Windows 服务器上安装 Postgresql 16。在 pg_ident.conf 上,我添加了
sspi 用户xyz@域用户xyz
在 pg_hba.conf 上,我添加了
host all userxyz 0.0.0.0/0 sspi map=sspi
在 PGAdmin 中,我添加了用户名 userxyz,没有密码。
但是,我收到连接失败::1),端口 5432 失败:fe_sendauth:未提供密码错误。
只是尝试在 Windows 上向 PostgreSQL 验证 userxyz 的身份。我缺少什么?谢谢
“默认”行(不是 PostgreSQL 项目范围的默认值,因为打包程序在此处安装了自己的值)如果它们出现在 SSPI 行之后而不是之前,则不会弄乱事情。
如果您希望规则同时适用于 ipv4 和 ipv6,则需要两行或使用魔术词“samehost”来覆盖两者。但仅将 SSPI 用于环回连接也有点奇怪。如果您想要的话,您可以使用神奇的词“all”,它适用于来自任何地方的 ipv4 和 ipv6。
如果您希望线路应用所有帐户,您可以使用“all”作为用户名。通常,您会创建一个使用对等点或其他东西的“本地”线路(可能仅用于“postgres”用户),以及一个为所有用户使用 SSPI 的“主机”线路。这样,您的管理员仍然可以通过套接字而不是 TCP 连接来绕过 SSPI。
如果您希望一些用户根据用户名使用 SSPI,而另一些用户使用 SCRAM,则需要以某种方式指定哪些用户属于哪个组。我认为没有办法将这个规范外包给 AD 组。您可以为每个用户指定单独的 pg_hba 行,或者在一行中包含所有用逗号分隔的名称,或者使用 @includedfile,或者引用数据库中的 +role。请注意,此选择是由他们要求连接的数据库用户做出的,而不是由 SSPI 验证它们的用户名做出的。任何没有被某一行的条件捕获的用户都会跳到下一个 pg_hba 行,因此您会希望异常行更早,而所有其余行则更晚。
“全部”适用于 pg_hba。对于 pg_ident,您需要使用正则表达式(文档中未经测试的示例):
当然,除非您想要更精细地控制谁(在操作系统上)可以以谁(在数据库中)身份登录。每个角色都需要存在于数据库中,然后任何人都可以作为该角色登录。