PostgreSQL 创建角色

在本教程中,您将了解 PostgreSQL 角色以及如何使用该 CREATE ROLE 语句创建新角色。

摘要:在本教程中,您将了解 PostgreSQL 角色以及如何使用该 CREATE ROLE 语句创建新角色。

PostgreSQL 角色

PostgreSQL 使用角色来表示用户帐户。它不像其他数据库系统那样使用用户概念。

通常,可以登录的角色称为登录角色。它们相当于其他数据库系统中的用户。

当角色包含其他角色时,称为组角色。

请注意,PostgreSQL 从 8.1 版本开始将用户和组组合成角色

PostgreSQL CREATE ROLE 语句

要创建新角色,请使用以下 CREATE ROLE 语句:

CREATE ROLE role_name;

创建角色时,它在数据库服务器(或集群)中的所有数据库中都有效。

以下语句使用该 CREATE ROLE 语句创建一个名为 的新角色 bob :

CREATE ROLE bob;

要获取当前 PostgreSQL 数据库服务器中的所有角色,可以从 pg_roles 系统目录中查询它们,如下所示:

SELECT rolname FROM pg_roles;

输出:

rolname
---------------------------
 pg_monitor
 pg_read_all_settings
 pg_read_all_stats
 pg_stat_scan_tables
 pg_read_server_files
 pg_write_server_files
 pg_execute_server_program
 pg_signal_backend
 postgres
 bob

请注意,以 开头的角色 pg_ 是系统角色。

如果使用该 psql 工具,则可以使用该 \du 命令列出当前 PostgreSQL 数据库服务器中的所有现有角色。

\du

输出:

List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 bob       | Cannot login                                               | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

从输出中可以清楚地看到,该角色 bob 无法登录。

要允许角色bob登录PostgreSQL数据库服务器,需要为其添加 LOGIN 属性。

角色属性

角色的属性定义了该角色的权限,包括登录、超级用户、数据库创建、角色创建、密码等:

CREATE ROLE name WITH option;

在此语法中, WITH 关键字是可选的。而 option 可以是一个或多个属性包括 SUPER , CREATEDB , CREATEROLE ,等。

创建登录角色

例如,以下语句创建一个名为 alice 的角色 ,该角色具有登录权限和初始密码:

CREATE ROLE alice 
LOGIN 
PASSWORD 'securePass1';

请注意,您将密码放在单引号 ( ') 中。

现在,您可以使用该角色 alice 通过 psql 客户端工具登录 PostgreSQL 数据库服务器:

psql -U alice -W postgres

它会提示您输入密码。您需要输入您在 CREATE ROLE 语句中输入的密码。

创建超级用户角色

以下语句创建一个名为 john 具有超级用户属性的角色。

CREATE ROLE john 
SUPERUSER 
LOGIN 
PASSWORD 'securePass1';

超级用户可以覆盖数据库中的所有访问限制,因此您应该仅在需要时创建此角色。

请注意,您必须是超级用户才能创建另一个超级用户角色。

创建可以创建数据库的角色

如果要创建具有数据库创建权限的角色,请使用以下 CREATEDB 属性:

CREATE ROLE dba 
CREATEDB 
LOGIN 
PASSWORD 'Abcd1234';

创建有有效期的角色

要设置角色密码不再有效的日期和时间,请使用 valid until 属性:

VALID UNTIL 'timestamp'

例如,以下语句创建一个 dev_api 密码有效期至 2029 年底的角色:

CREATE ROLE dev_api WITH
LOGIN
PASSWORD 'securePass1'
VALID UNTIL '2030-01-01';

2030 年一秒滴答之后,dev_api 的密码不再有效。

创建具有连接限制的角色

要指定角色可以建立的并发连接数,请使用以下 CONNECTION LIMIT 属性:

CONNECTION LIMIT connection_count

下面创建了一个名为 api 的新角色,它可以建立 1000 个并发连接:

CREATE ROLE api
LOGIN
PASSWORD 'securePass1'
CONNECTION LIMIT 1000;

以下 psql 命令显示了我们迄今为止创建的所有角色:

\du
List of roles
 Role name |                         Attributes                         | Member of
-----------+------------------------------------------------------------+-----------
 alice     |                                                            | {}
 api       | 1000 connections                                           | {}
 bob       | Cannot login                                               | {}
 dba       | Create DB                                                  | {}
 john      | Superuser                                                  | {}
 postgres  | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

概括

  • PostgreSQL 使用角色来表示用户帐户。一个可以登录的角色相当于其他数据库系统中的一个用户账号。
  • 使用角色属性来指定角色的权限,例如, LOGIN 允许角色登录, CREATEDB 允许角色创建新数据库, SUPERUSER 允许角色拥有所有权限。