PostgreSQL 用户权限

PostgreSQL 用户权限

我正在尝试从 MySQL 转换到 PostgreSQL,但发现用户帐户/权限系统非常不同。

对于 mysql,所有帐户均由 mysql 内部处理。对于 postgres,我似乎需要在系统内以及 postgres 内创建一个帐户。

有没有关于系统用户帐户与 postgres 用户帐户如何关联的指南?postgres 手册似乎没有对此进行详细说明。

答案1

如果您想使用本地身份验证,则只需创建系统用户。

对于网络连接,您可以使用 CREATE USER 和 GRANT,就像在 MySQL 中一样。

主要区别在于,与 MySQL 不同,其中身份验证和授权部分都在 mysql 数据库的表内,而 Postgres 的部分身份验证规则位于外部文件 pg_hba.conf 中。

要让用户 foo 从 10.1.1.0/24 连接到数据库 bar,您需要在该文件中添加如下一行:

host bar foo 10.1.1.0/24 md5

编辑 pg_hba.conf 后,记得运行

pg_ctl reload

重新加载配置。

当用户尝试连接时,他们将需要提供密码(您在创建用户时提供)。

还要记住,在 PostgreSQL 中,一切都是角色。定义为“WITH LOGIN”的角色是用户,而没有此标志的角色更像是组。为了灵活性,我倾向于创建具有密码和 WITH LOGIN 的用户。然后,我创建没有密码的角色,并将此角色授予登录用户。我的授予对象是类似组的角色,而不是单个用户。

在 pg_hba.conf 中,使用 +role 匹配分配了角色的任何人(而不是上例中的 foo)

答案2

请注意,如果 postgresql 帐户配置为能够同时使用 ident 和 md5,那么默认情况下它将尝试使用 ident。

您可以通过在 psql 命令行末尾添加选项 --host=localhost 来强制它使用用户名/密码(即 md5)。

这将强制连接通过套接字进行,从而禁用 ident,并因此强制进行用户名/密码验证。

相关内容