九月 12, 2023
摘要:在本教程中,您将了解 PostgreSQL 角色以及如何使用CREATE ROLE
语句创建新角色。
目录
PostgreSQL 使用角色来表示用户帐户。它不像其他数据库系统那样使用用户概念。
通常,可以登录的角色称为登录角色。他们相当于其他数据库系统中的用户。
当角色包含其他角色时,它们被称为组角色。
请注意,从 8.1 版本开始,PostgreSQL 将用户和组合并为角色。
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
等一个或多个属性。
1) 创建登录角色
例如,以下语句创建一个名为alice
的角色,该角色具有登录权限和初始密码:
CREATE ROLE alice
LOGIN
PASSWORD 'securePass1';
请注意,您将密码放在单引号 ('
) 中。
现在,您可以使用角色alice
通过psql
客户端工具登录 PostgreSQL 数据库服务器:
psql -U alice -W postgres
它会提示您输入密码。您需要输入您在CREATE ROLE
语句中输入的密码。
2) 创建超级用户角色
以下语句创建一个名为john
的角色,该角色具有超级用户属性。
CREATE ROLE john
SUPERUSER
LOGIN
PASSWORD 'securePass1';
超级用户可以突破数据库内的所有访问限制,因此您应该仅在需要时创建此角色。
请注意,您必须是超级用户才能创建另一个超级用户角色。
3) 创建可以创建数据库的角色
如果要创建具有数据库创建权限的角色,可以使用CREATEDB
属性:
CREATE ROLE dba
CREATEDB
LOGIN
PASSWORD 'Abcd1234';
4) 创建有密码有效期的角色
要设置角色密码在某日期和时间后不再有效,请使用密码有效期属性:
VALID UNTIL 'timestamp'
例如,以下语句创建一个密码有效期至 2029 年底的dev_api
角色:
CREATE ROLE dev_api WITH
LOGIN
PASSWORD 'securePass1'
VALID UNTIL '2030-01-01';
2030 年一秒后,dev_api
的密码不再有效。
5) 创建有连接数限制的角色
要指定角色可以建立的并发连接数,可以使用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
允许角色拥有所有权限。