我已经安装了 postgresql 9.3,但无法获得任何用户授权。我也无法使用 initdb 或 pg_ctl。我也找不到 pg_hba.conf。
答案1
文件所在位置pg_hba.conf
:
pg_hba.conf
在/etc/postgresql/X.Y/main/
(X.Y
你的版本在哪里,你的是 9.3,我的是 9.4)。
“缺失”程序:
pg_ctl
默认情况下可能不会安装。initdb
默认情况下也可能不会安装。两者都可以通过 进行安装postgres-xc
。
添加用户以便他们能够被授权:
您必须通过psql
命令行客户端添加用户/角色。然后您必须将用户添加到pg_hba.conf
。
我建议使用pgadmin3
图形界面/程序来处理用户角色并添加它们。它允许您专门选择要全局授予用户的各个权限(通常不应有特殊权限,只需创建用户并单独授予给定数据库的权限)。
配置pg_hba.conf
这可能有点棘手。一旦你有了用户登录角色,你需要将它们添加到pg_hba.conf
。文件的格式是PosgreSQL 文档中有详细的解释。这里是简短的总结。
除非这里有匹配的行,否则默认访问规则是“拒绝访问”。
这是一行的格式pg_hba.conf
:
TYPE DATABASE USER ADDRESS METHOD
type
是连接的类型。来自同一台计算机的本地连接获得该local
类型。来自非本地 IP(即通过 TCP)的连接获得该host
类型。 hostnossl
可以改用,并将识别任何未通过 SSL 的网络连接(即非本地)。 hostssl
可用于指定任何通过 SSL 的网络连接,但默认不设置 SSL。
database
不言自明 - 您要将这些访问权限/限制设置为哪个数据库。一种特殊的数据库类型是 ,all
表示所有数据库。
user
是您添加到 Postgres 的用户名/角色。它必须存在于 postgres 中,并且可能需要作为本地系统用户存在(但这在我解释的地方有解释METHOD
)。
ADDRESS
是 IPv4 或 IPv6 地址或范围。仅当下指定host
、hostnossl
或 时才可使用。它可以是 CIDR 范围或单个 IP 地址。hostssl
type
METHOD
是如何处理身份验证。
- 对于具有该类型的本地用户
local
,它应该是peer
身份验证,或者md5
如果您希望用户能够从不同的本地计算机用户帐户使用密码登录,则应该是身份验证。 - 对于
host
、hostssl
或hostnossl
连接类型,您可能希望md5
在这里使用,但是您可能有其他类型的身份验证(请参阅上面的文档链接)。 - 除非您疯了或者真的知道自己在做什么,否则在任何情况下都不应使用该
trust
方法。 这有零对人员进行身份验证,这是一个来自地狱的安全漏洞,即使对于local
类型连接也是如此。
我建议你仔细阅读该文件上的链接文档pg_hba.conf
,它可以更好地解释事情。