PostgreSQL 中,角色(Role)是一个重要的概念,用于管理数据库的访问权限和用户身份。角色可以被视为用户或组,具体取决于它们的配置方。
角色属性
角色可以具有多种属性:
-
LOGIN
:允许角色登录数据库。 -
SUPERUSER
:赋予角色超级用户权限。 -
CREATEDB
:允许角色创建新的数据库。 -
CREATEROLE
:允许角色创建和管理其他角色。 -
INHERIT
:允许角色继承其所属组的权限。 -
REPLICATION
:允许角色进行流复制。 -
PASSWORD
:设置角色的密码。
创建角色
role_name 遵循 SQL 标识的规则:
要么完全没有特殊字符,
要么用双引号包围(实际上你通常会给命令增加额外的选项)。
CREATE ROLE demo_user ;
或者
CREATE ROLE demo_user WITH LOGIN PASSWORD 'mypassword';
这个命令创建了一个名为 myuser 的角色,并赋予它登录权限和密码。
角色组
角色可以被组织成组,以便更方便地管理权限。你可以创建一个角色作为组,并将其他角色添加到这个组中。
CREATE ROLE demogroup;
GRANT demogroup TO demouser;
创建了一个名为 demogroup
的角色组,并将 demouser
角色添加到这个组中。
权限管理
使用 GRANT
和 REVOKE
命令来管理角色的权限。
GRANT
:授予权限
REVOKE
: 撤销权限
GRANT SELECT, INSERT ON demotable TO demouser;
REVOKE UPDATE ON demotable FROM demouser;
删除角色
使用 DROP ROLE
命令来删除一个角色
DROP ROLE demouser;
检查现有角色的集合
要检查现有角色的集合,可以检查pg_roles
系统表,
SELECT rolname FROM pg_roles;
psql的元命令 \du 也可以用于列出现有角色。
为了能创建初始数据库系统,新建立的数据库总是包含一个预定义的"超级用户"角色, 并且缺省时(除非在运行initdb时更改过) 他将和初始化该数据库集群的用户有相同的名称。通常,这个角色名叫postgres。 为了创建更多角色,你必须首先以这个初始用户角色连接。