数据库角色与访问控制

数据库设计

Lis Sulmont

Curriculum Manager

授予与撤销视图访问权限

GRANT privilege(s)REVOKE privilege(s)

ON object

TO roleFROM role

  • 权限:SELECTINSERTUPDATEDELETE
  • 对象:表、视图、模式等
  • 角色:数据库用户或用户组
GRANT UPDATE ON ratings TO PUBLIC; 
REVOKE INSERT ON films FROM db_user; 
数据库设计

数据库角色

  • 管理数据库访问权限
  • 数据库角色是包含以下信息的实体:
    • 定义角色权限
      • 可登录吗?
      • 可创建数据库吗?
      • 可写入表吗?
    • 与客户端认证系统交互
      • 密码
  • 角色可分配给一个或多个用户
  • 角色在数据库集群安装中是全局的
数据库设计

创建角色

  • 空角色
CREATE ROLE data_analyst;
  • 具有部分属性的角色
CREATE ROLE intern WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';
CREATE ROLE admin CREATEDB;
ALTER ROLE admin CREATEROLE;
1 http://bit.ly/postgresql_attributes
数据库设计

对角色授予与撤销权限

GRANT UPDATE ON ratings TO data_analyst;
REVOKE UPDATE ON ratings FROM data_analyst;

PostgreSQL 中可用的权限有:

  • SELECTINSERTUPDATEDELETETRUNCATEREFERENCESTRIGGERCREATECONNECTTEMPORARYEXECUTEUSAGE
1 http://bit.ly/postgresql_privileges
数据库设计

用户与组(均为角色)

  • 角色可作为用户和/或组使用
    • 用户角色
    • 组角色

一个外圈为组角色、内含三个用户角色圆圈的角色示意图

数据库设计

用户与组(均为角色)

组角色

CREATE ROLE data_analyst;

用户角色

CREATE ROLE intern WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';
数据库设计

用户与组(均为角色)

组角色

CREATE ROLE data_analyst;

用户角色

CREATE ROLE alex WITH PASSWORD 'PasswordForIntern' VALID UNTIL '2020-01-01';

GRANT data_analyst TO alex;
REVOKE data_analyst FROM alex;
数据库设计

常见 PostgreSQL 角色

角色 允许的访问
pg_read_all_settings 读取所有配置变量,包括通常仅超级用户可见的。
pg_read_all_stats 读取所有 pg_stat_* 视图并使用各类统计相关扩展,包括通常仅超级用户可见的。
pg_signal_backend 向其他后端发送信号(如:取消查询、终止)。
More... More...
1 http://bit.ly/default_roles_postgresql
数据库设计

角色的优点与风险

优点

  • 删除用户后角色仍保留
  • 可先于用户账号创建角色
  • 为 DBA 节省时间

风险

  • 角色可能给某个用户过多权限
    • 需密切留意
数据库设计

Passons à la pratique !

数据库设计

Preparing Video For Download...