HGDB 三权分立

150 阅读9分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第14天,点击查看活动详情

一、概念

三权分立是对数据库系统管理员的权限实施了分离,使系统中不存超级管理员/超级用户和权限过高的角色和用户,降低安全隐患和风险。数据库系统中存在相互独立、相互制约的系统管理员(SYSDBA)、安全保密管理员(SYSSSO)和安全审计员(SYSSAO)三个管理员角色。

系统管理员主要负责系统运行维护和生成用户身份标识符; 安全保密管理员主要负责用户权限设定、安全策略配置管理; 安全审计员主要负责对数据库所有用户操作行为审计的策略设置和审计记录的查询与分析。

HGDB-SEE V4.5.5 新增安全参数hg_sepv4,用于控制三权权限严格程度。可取值为v4(使用v4.3.4.x版本的三权权限)和v45(使用v4.5.x中更为严格的三权权限),默认为v4。

二、v4 版本权限

1. sysdba 用户权限

--用户角色

  • 不带属性(除 password 属性)创建用户时可创建成功,创建角色时不带password 属性可创建成功。
  • 创建用户或角色时,若带有 superuser、 createdb、createrole, rolemembers 属性,则创建失败。
  • 创建用户时,若带有replication 属性,可创建成功。
  • 修改用户属性时,若带有superuser、 createdb、createrole 属性,则修改失败,报错为 permission denied。
  • 可对其他用户进行重命名,不可对 sysdba、 syssso、syssao 三个管理员用户进行重命名。
  • 不可修改其他用户的密码及有效期,也不可修改自己的密码有效期。
  • 可删除普通用户。
  • 不能通过 drop 命令删除sysdba、 syssso、 syssao 三个管理员用户。

--表

  • 可在有权限的 schema 下创建表。
  • 只可查询、使用属主为自己的表以及安全功能中特殊要求的表。
  • 自己的表不能赋权给自己外的其他用户,其他用户的表也不能赋权给 sysdba。

--安全标记

  • 可查询自己创建的表的安全标记值及行安全标记值。

--备份恢复

  • 可以备份恢复所有数据(备份前需进行数据加密,确保对于其他用户的数据无权查看)。

2. syssso 用户权限

--用户角色

  • syssso 可以修改用户的密码、有效期。(三个管理员用户只能各自修改自己的密码)

--表

  • 可以查询、使用属主为自己的表以及安全功能中特殊要求的表。
  • 可以将普通用户的表赋权给其他普通用户。

--安全策略

  • 可进行安全策略参数设置。
  • 可查询安全策略参数值。

--安全标记

  • 只可对普通用户的安全标记值进行设置及修改。
  • 可查询所有用户、表、行的安全标记值。

3. syssao 用户权限

--表

  • 可以查询、使用属主为自己的表以及安全功能中特殊要求的表。

--审计

  • 可进行审计策略参数设置。
  • 可查询审计策略参数值。
  • 可审计数据库及用户的操作。

三、v45 版本权限

1. sysdba 用户权限

--表空间

  • 只能创建属主为自己的表空间,带 owner 属性创建时除owner sysdba 外均创建失败,报错为:The owner of the tablespace can only besysdba(表空间的属主只能是 sysdba)。
  • 不能修改表空间属主为其他用户,若修改属主为 sysdba外的用户,则修改失败,报错为: The owner of the tablespace can only be sysdba(表空间的属主只能是 sysdba)
  • 不能赋权给其他管理员用户,可以赋权给自己及普通用户。
  • 不能将 with grant option 属性给任何用户。
  • 对所有表空间权限有删除权限。

--数据库

  • 只能创建属主为自己的数据库,带 owner 属性创建时除 owner sysdba 外均创建失败,报错为: The owner of the database can only be sysdba(数据库的属主只能是 sysdba)。
  • 不能修改数据库属主为其他用户,若修改属主为 sysdba外的用户,则修改失败,报错为: The owner of the database can only be sysdba(数据库的属主只能是 sysdba)。
  • 不能将 create/temporary/temp 权限赋权给 syssso 和 syssao 用户;
  • 不能将 with grant option 属性给任何用户。
  • 对所有数据库有删除权限。

--模式

  • 只可创建属主为自己或属主为普通用户的模式。
  • 只可修改属主为自己的模式的属性(如: rename to/owner to),可以将属主修改为自己及普通用户,但是不可以修改为其他管理员用户。
  • 不能将属主为自己的模式的权限赋权给 sysdba 外的任何用户,对于属主非自己的模式无权限。
  • 只可使用属主为自己的模式及 public 模式。
  • 只可删除属主为自己的模式(public 模式不可删除)。

--用户角色

  • 不带属性(除 password 属性)创建用户时可创建成功,创建角色时不带password 属性可创建成功。
  • 创建用户或角色时,若带有 superuser、 createdb、createrole, rolemembers 属性,则创建失败,报错为: can't create with superuser/createdb/createrole。
  • 创建用户时,若带有replication 属性,可创建成功。
  • 三个管理员用户的权限不可以通过继承属性赋予其他用户,也不可继承其他用户的权限。
  • 修改用户属性时,若带有superuser、 createdb、createrole 属性,则修改失败,报错为 permission denied。
  • 可对其他用户进行重命名,不可对 sysdba、 syssso、syssao 三个管理员用户进行重命名。
  • 不可修改其他用户的密码及有效期,也不可修改自己的密码有效期。
  • 可删除普通用户。
  • 不能通过 drop 命令删除sysdba、 syssso、 syssao 三个管理员用户。

--表

  • 可在有权限的 schema 下创建表。
  • 只可查询、使用属主为自己的表以及安全功能中特殊要求的表。
  • 自己的表不能赋权给自己外的其他用户,其他用户的表也不能赋权给 sysdba。
  • 只可删除属主为自己的表。

--索引

  • 只可在自建表上创建索引。
  • 只可修改自己创建的索引。
  • 只可删除自己创建的索引

--函数

  • 只可在自建模式和 public 模式下创建函数。
  • 只可修改属主为自己的函数的属性(如: rename to/set schema/depends on extension), owner to 属性只可修改为 sysdba,若修改 owner to 属性为 sysdba 以外的用户,则提示permission denied。
  • 不可以将属主为自己的函数的权限赋予自己外的其他用户,也不可将其他用户创建的函数权限赋权给 sysdba。
  • 只可调用属主为自己的函数。
  • 只可删除属主为自己的函数。

--存储过程

  • 只可在自建模式和 public 模式下创建存储过程。
  • 只可修改属主为自己的存储过程的属性(如: rename to/set schema/depends on extension), owner to 属性 只可修改为 sysdba,若修改 owner to 属性为 sysdba 以外的用户,则提示 permission denied。
  • 不可以将属主为自己的存储过程的权限赋予任何其他用户,也不可将其他用户创建的存储过程权限赋权给 sysdba。
  • 只可调用属主为自己的存储过程。
  • 只可删除属主为自己的存储过程。

--序列

  • 只可在自建模式和 public 模式下创建序列。
  • 只可修改属主为自己的序列的属性(如: rename to/owner to/set schema/),属主不能修改为自己外的其他用户。
  • 不可以将自己创建的序列的权限赋予自己外的其他用户,也不可将其他用户创建的序列权限赋权给 sysdba。
  • 只可使用及查询属主为自己的序列。
  • 只可删除属主为自己的序列。

--视图

  • 只可在自建表上创建视图。
  • 只可修改属主为自己的视图的属性,属主可以修改为自己,不能修改为其他管理员及普通用户。
  • 只可删除属主为自己的视图

--导入导出

  • copy,只可导入数据到本用户对象,只可导出本用户数据。
  • \copy,只可导入数据到本用户对象,只可导出本用户数据。

--安全标记

  • 可查询自己创建的表的安全标记值及行安全标记值。

--备份恢复

  • 可以备份恢复所有数据(备份前需进行数据加密,确保对于其他用户的数据无权查看)。

2. syssso 用户权限

--模式

  • 可以将普通用户模式的权限赋权给自己及其他普通用户。
  • 只可使用属主为自己的模式及有限访问 public 模式。

--用户角色

  • 除安全版特殊要求(syssso 可以修改用户的密码、有效期)外,均无权限。

--表

  • 可查询、使用属主为自己的表以及安全功能中特殊要求的表。
  • 赋权模式的权限后可以将普通用户自建模式下的表赋权给其他普通用户。

--函数

  • 赋权模式的权限后可以将普通用户自建模式下的函数赋权给其他普通用户。
  • 只可调用 public 模式下 sysdba的函数和属主为自己的函数。

--存储过程

  • 赋权模式的权限后可以将普通用户自建模式下的存储过程赋权给其他普通用户。
  • 只可调用public 模式下 sysdba 的存储过程和属主为自己的存储过程。

--序列

  • 赋权模式的权限后可以将普通用户自建模式下的序列赋权给其他普通用户。

--安全策略

  • 可进行安全策略参数设置。
  • 可查询安全策略参数值。

--安全标记

  • 只可对普通用户的安全标记值进行设置及修改。
  • 可查询所有用户、表、行的安全标记值。

3. syssao 用户权限

--模式

  • 只可使用属主为自己的模式及有限访问 public 模式。

--表

  • 可查询、使用属主为自己的表以及安全功能中特殊要求的表。

--函数

  • 只可调用 public 模式下 sysdba的函数和属主为自己的函数。

--存储过程

  • 只可调用public 模式下 sysdba 的存储过程和属主为自己的存储过程。

--审计

  • 可进行审计策略参数设置。
  • 可查询审计策略参数值。
  • 可审计数据库及用户的操作。

四、syssso 用户配置安全策略

HGDB 数据库用户密码参数查询设置

五、syssao 用户配置审计

HGDB 安全版数据库审计