PostgreSQL 用户和角色(一)

PostgreSQL 用户和角色(一)

CREATE ROLE name CREATEROLE;

具有CREATEROLE特权的角色还可以修改或删除其他角色,以及为这些角色授予或者撤销成员角色。但是,针对超级用户的创建、修改、删除,以及它的成员变更,需要超级用户特权;CREATEROLE特权无法针对超级用户执行这些操作

启动复制,只有明确授权的角色才能够启动流复制(超级用户除外,因为他们可以避开权限检查)。用于流复制的角色还需要拥有LOGIN特权。使用以下语句创建可以用于流复制的角色;

REATE ROLE name REPLICATION LOGIN;

密码,只有当用户连接数据库使用的客户端认证方法要求提供密码时,密码属性才有意义。password和md5认证方法需要使用密码。数据库的密码与操作系统的密码相互独立。使用以下语句在创建角色时指定密码:

CREATE ROLE name PASSWORD 'string';

工作中创建角色时,可以根据需要指定某些属性。例如,以下命令创建一个具有登录特权和创建数据库的角色wdh,并且为它指定了密码以及密码过期时间:

CREATE ROLE wdh WITH LOGIN PASSWORD '123465' createdb VALID UNTIL '2060-12-31';

-- CREATE USER wdh WITH PASSWORD '123465' createdb VALID UNTIL '2060-12-31';

使用该用户连接到postgres数据库:

[root@hadoop201 ~]# psql -h hadoop201 -p 5432 -U wdh postgres

Password for user wdh:

psql (12.13)

Type "help" for help.

postgres=> select 1 + 1;

?column?

----------

2

psql命令行工具支持许多选项,

-h表示数据库服务器的地址,

-p表示服务的监听端口,

-U表示登录使用的用户名,

最后的postgres代表要连接的数据库。详细的命令行参数可以使用psql --help查看或者参考官方文档。

以下命令创建一个管理角色admin,它具有创建数据库和创建角色的特权:

postgres=# CREATE ROLE admin CREATEDB CREATEROLE;

CREATE ROLE

postgres=# \du

List of roles

Role name | Attributes | Member of

-----------+------------------------------------------------------------+-----------

admin | Create role, Create DB, Cannot login | {}

postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

wdh | Create DB +| {}

| Password valid until 2060-12-31 08:00:00+08 |

工作中最好创建一个拥有CREATEDB和CREATEROLE特权,但不具有超级用户特权的管理角色,然后使用该角色执行日常的数据库和角色的管理。这种方式可以避免过度使用超级用户可能带来的风险。一个角色被创建之后,可以通过ALTER ROLE语句修改它的属性。例如,以下命令可以撤销角色admin创建角色的特权:

一个角色被创建之后,可以通过ALTER ROLE语句修改它的属性。例如,以下命令可以撤销角色admin创建角色的特权

postgres=# ALTER ROLE admin NOCREATEROLE;

ALTER ROLE

postgres=# \du

List of roles

Role name | Attributes | Member of

-----------+------------------------------------------------------------+-----------

admin | Create DB, Cannot login | {}

postgres | Superuser, Create role, Create DB, Replication, Bypass RLS | {}

wdh | Create DB +| {}

| Pa