PostgreSQL用户权限

在本教程中,我将解释如何在PostgreSQL中管理用户和权限。

在PostgreSQL中,所有内容都是围绕以下概念构建的:角色

首次在macOS上安装PostgreSQL时,脚本使用您的macOS用户名创建了一个角色,并列出已授予的权限。

PostgreSQL中没有用户,只有角色

通过运行psql postgres在您的终端中,您将使用您的macOS用户名自动登录到PostgreSQL,从而访问创建的角色。

就我而言flaviocopes角色已创建,我可以通过使用\du命令:

看?我有以下角色属性默认情况下:

  • Superuser
  • Create role
  • Create DB
  • Replication
  • Bypass RLS

而且我不是任何其他角色的成员(稍后将对此进行详细介绍)

创建一个新角色

使用CREATE ROLE命令:

CREATE ROLE <role>;

例如:

CREATE ROLE testing;

我们有了新的角色,Cannot login角色属性。我们新创建的用户将无法登录。

您可以通过键入\q命令,然后psql postgres -U testing,但您会看到此错误:

要解决此问题,我们必须添加LOGIN创建时的角色属性:

CREATE ROLE <role> WITH LOGIN;

如果我们使用以下方法删除该角色:

DROP ROLE <role>;

并添加WITH LOGIN这次:

DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;

我们可以看到testing角色可以登录,因为我们没有Cannot login这次的角色属性:

尝试通过添加命令\q退出,然后psql postgres -U testing

请注意迅速的=#=>因为我们没有Superuser现在的角色属性。

为角色添加密码

在上一个CREATE ROLE命令我们创建了一个没有密码的角色。当然,拥有(安全)密码非常重要。您可以使用PASSWORD关键词:

CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';

创建用户

另一种定义角色的方法是LOGIN自动添加的属性(有效创建可以登录的用户)供使用CREATE USER

CREATE USER <role> PASSWORD '<password>';

向角色添加角色属性

稍后可以使用ALTER ROLE命令。

假设我们创建了一个没有LOGIN属性的角色:

CREATE ROLE <username> PASSWORD '<password>';

我们可以使用以下方法添加它:

ALTER ROLE <role> WITH LOGIN;

内置角色属性

我们看到了LOGIN角色属性已经存在,以允许角色登录。

但是,我们还可以使用其他哪些内置角色属性?

  • LOGIN/NOLOGIN:允许(或不允许)登录到PostgreSQL
  • SUPERUSER/NOSUPERUSER:允许(或不允许)超级用户权限。数据库超级用户将绕过其他权限检查,但以下情况除外LOGIN(必须单独授予)。
  • CREATEDB/NOCREATEDB:允许(或不允许)创建新数据库的能力
  • CREATEROLE/NOCREATEROLE:允许(或不允许)创建新角色的能力
  • CREATEUSER/NOCREATEUSER:允许(或不允许)创建新用户的能力
  • INHERIT/NOINHERIT:允许(或不允许)使特权可继承
  • REPLICATION/NOREPLICATION:授予(或不授予)复制权限(我们将不介绍的高级主题)

组角色

在PostgreSQL中,没有用户组。

相反,您可以创建具有特定权限的角色,然后将这些角色授予其他角色。

如果角色具有INHERIT属性,则这些角色将继承授予他们的角色的权限。

建立群组角色

要创建组角色,请键入

CREATE ROLE <groupname>;

语法与创建角色相同。

创建组角色后,您可以使用以下命令将角色添加到组角色中GRANT

GRANT <groupname> TO <role>

例如,我们可以创建一个flavio用户角色,即“雇员”组角色,然后将用户分配给该组角色:

CREATE USER flavio PASSWORD 'superSecret123
;创建 角色员工;授予员工flavio;

您可以使用以下方法从组角色中删除角色:

REVOKE <groupname> FROM <username>

例子:

REVOKE employee FROM flavio;

组角色属性

默认情况下,将角色添加到组角色将不是使角色继承组角色的属性(权限)。

您需要使用INHERIT属性。

假设您创建了雇员组角色,并为其分配了CREATEDB属性:

CREATE ROLE employee WITH CREATEDB INHERIT;

现在使用创建一个新角色INHERIT

CREATE ROLE flavio;
GRANT employee TO flavio;


更多数据库教程: