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

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允许角色拥有所有权限。