PostgreSQL数据库系列之十二:权限管理

权限管理概述

当初始化PG数据库后,它自动有会有一个超级用户,通常这个超级用户的名称与初始化PG数据库时的操作系统用户名相同。比如你在Windows操作系统里以Administrator管理员部署,那么PG数据库也将会有一个Administrator(※ 大小写严格区分)超级用户作为超级管理员。

通常来说,DBA不会将数据库超级管理员提供给开发人员部署到业务系统配置文件,而是额外创建相应权限与用途的账号给开发人员。此时就需要对数据库权限管理有充分的认识才可以避免删库跑路的问题。

权限管理类型

PostgreSQL数据库中的用户中有两种权限:

  • 角色/用户在CREATE USER创建时赋予权限,ALTER USER方式变更权限;

    • SUPERUSER => 数据库的超级用户拥有该数据库的所有权限
    • CREATEDB => 角色要想创建数据库,必须明确赋予创建数据库的属性(包含变更与删除权限)
    • CREATEROLE => 一个角色要想创建更多角色,必须明确给予创建角色的属性
    • LOGIN => 登录的权限
    • REPLICATION => 专门用于执行复制动作的权限
  • 角色/用户在GRANT方式赋予权限,REVOKE方式撤销权限;

    • SELECT => 允许从指定表,视图或序列的任何列或列出的特定列进行SELECT。
    • INSERT => 允许将新行INSERT到指定的表中。如果指定特定列,那么其它列将以默认值写入。
    • UPDATE => 允许更新指定表的任何列或列出的特定列,需要SELECT权限。
    • DELETE => 允许删除指定表中的行,需要SELECT权限。
    • TRUNCATE => 允许在指定的表上创建触发器。
    • REFERENCES => 允许创建引用指定表或表的指定列的外键约束。
    • TRIGGER => 允许在指定的表上创建触发器。
    • CREATE => 对于数据库,允许在数据库中创建新的schema、table、index。
    • CONNECT => 允许用户连接到指定的数据库。在连接启动时检查此权限。
    • TEMPORARY => 允许在使用指定数据库时创建临时表。
    • EXECUTE => 允许使用指定的函数或过程以及在函数。
    • USAGE => 对于schema,允许访问指定模式中包含的对象;对于sequence,允许使用currval和nextval函数。对于类型和域,允许在创建表,函数和其他模式对象时使用类型或域。
    • ALL PRIVILEGES => 一次授予所有可用权限。

权限管理命令参考

1. 用户创建与变更密码

# 创建复制用户
CREATE USER ericzhong REPLICATION LOGIN ENCRYPTED PASSWORD 'ericzhong';

# 变更用户密码
ALTER USER ericzhong WITH ENCRYPTED password '123456';

2. 表对象权限授权

#单表读写授权:授权test账号可以访问schema为test的t1表
grant select,insert,update,delete on test.t1 to test;
#所有表授权:授权test账号可以访问schema为test的所有表
grant select,insert,update,delete on all tables in schema test to test;

3. 表对象指定列权限授权

#列授权,授权指定列(test schema下的t1表的name列)的更新权限给test用户
grant update (name) on test.t1 to test;
#指定列授不同权限,test schema下的t1表,查看更新name、id字段,插入name字段
grant select (name,id),update (name,id),insert(name) on test.t1 to test;

4. 序列属性授权

#序列(自增键)属性授权,指定test schema下的seq_id_seq 给test用户
grant select,update on sequence test.seq_id_seq to test;
#序列(自增键)属性授权,给用户test授权test schema下的所有序列
grant select,update on all sequences in schema test to test;

5. 只读账号授权

# 超级用户登录数据库
create user ro_user password 'readonly';

# 设置Postgres数据库为只读的transaction
alter user ro_user set default_transaction_read_only=on;

# 赋予用户权限,查看public模式下所有表:(新建表也会有只读权限)
grant usage on schema public to ro_user;
alter default privileges in schema public grant select on tables to ro_user;

# 赋予用户连接数据库权限
grant connect on database zhong to ro_user;
# 切换到指定数据库
\c zhong
# 赋予用户表、序列查看权限
grant usage on schema public to ro_user;
grant select on all sequences in schema public to ro_user;
grant select on all tables in schema public to ro_user;

猜你喜欢

转载自blog.csdn.net/weixin_38623994/article/details/106651022