jack's notebook

PostgreSQL 用户及权限管理(包含 pg_hba.conf)

字数统计: 558阅读时长: 2 min
2020/06/05 Share

PostgreSQL 使用角色(Role)的概念管理数据库访问权限。角色是一系列相关权限(Privileges)的集合。为了管理方便,通常会把一系列相关的数据库权限赋予一个角色,如果哪个用户需要这些权限,就把角色赋予对应的用户。由于用户也可以拥有一系列的相关权限,为了简化管理,在 PostgreSQL 中,角色与用户没有区别,一个用户也是一个角色,我们可以把一个用户的权限赋予另外一个用户。

用户角色权限对应关系

用户和角色在整个数据库实例中都是全局的,且在同一个实例的不同数据库中,看到的用户都是相同的。

用户或角色管理

当我们安装好 PostgreSQL 之后,系统会自动创建一个 postgres 用户,我们需要切换到这个用户下去进行数据库管理。出于安全考虑,这个用户不应该直接作为应用程序访问数据库使用

1
su - postgres -c "psql"

切换到 postgres 用户并使用 psql 管理数据库。

创建用户与角色的语法:查看文档

CREATE ROLE name [ [ WITH ] option [ … ] ]

CREATE USER name [ [ WITH ] option [ … ] ]

在 PostgreSQL 中,用户和角色是没有区别的,因此在上面的语法中 CREATE ROLECREATE USER 作用是相同的,这两个语法的唯一区别是 CREATE ROLE 创建出来的用户没有 LOGIN 权限。

例子

1
2
3
4
5
6
7
8
9
10
# 创建不需要密码登陆的用户
postgres=# CREATE ROLE test LOGIN;
# 创建需要密码登陆的用户
postgres=# CREATE USER test WITH PASSWORD 'test';
# 创建有密码时效限制的用户
postgres=# CREATE ROLE test WITH LOGIN PASSWORD 'test' VALID UNTIL '2020-06-05';
# 创建超级权限用户
postgres=# CREATE ROLE test WITH SUPERUSER LOGIN PASSWORD 'test';
# 创建有 CREATEDB 权限和 CREATEROLE 权限的用户
postgres=# CREATE ROLE test WITH CREATEDB CREATEROLE;
1
2
3
4
5
6
7
8
# 修改/取消超级用户角色
postgres=# ALTER ROLE user WITH SUPERUSER/NOSUPERUSER;
# 修改/取消用户登陆
postgres=# ALTER ROLE user WITH LOGIN/NOLOGIN;
# 修改用户名
postgres=# ALTER ROLE user1 RENAME TO user2;
# 修改用户密码,NULL为移除密码
postgres=# ALTER USER test WITH PASSWORD 'test';

权限管理

CATALOG
  1. 1. 用户或角色管理
    1. 1.1. 例子
  2. 2. 权限管理