在openGauss中,有一个功能:私有用户。 我们看看官方介绍:
对于有多个业务部门,各部门间使用不同的数据库用户进行业务操作,同时有一个同级的数据库维护部门使用数据库管理员进行维护操作的场景下,业务部门可能希望在未经授权的情况下,管理员用户只能对各部门的数据进行控制操作(DROP、ALTER、TRUNCATE),但是不能进行访问操作(INSERT、DELETE、UPDATE、SELECT、COPY)。即针对管理员用户,表对象的控制权和访问权要能够分离,提高普通用户数据安全性。
三权分立情况下,管理员对其他用户放在属于各自模式下的表无权限。但是,这种无权限包含了无控制权限,因此不能满足上面的诉求。为此,openGauss提供了私有用户方案。即在非三权分立模式下,创建具有INDEPENDENT属性的私有用户。具备CREATEROLE权限或者是系统管理员权限的用户可以创建私有用户或者修改普通用户的属性为私有用户,普通用户也可以修改自己的属性为私有用户。
曾经遇到过这样一个场景:一个公司,他的数据库管理员因为维护的需要拥有所有数据库的超级管理员帐户权限,其中包括了公司的所有客户资料表,所有员工的kpi表,所有员工的工资表等,意味着数据库管理员可以浏览到这些关键数据,甚至有可能增删改这些数据,而且数据库管理员有离职跳槽的可能性,公司领导层对这情况很焦虑,希望可以做到针对管理员用户,表对象的控制权和访问权要能够分离。
现在我们来测试一下这个openGauss中的私有用户的功能,看看是否满足它的数据不能被管理员查看和操作,做到表对象的控制权和访问权分离。
postgres=# CREATE USER hc WITH INDEPENDENT IDENTIFIED BY "1234@abc";
WARNING: Please carefully use independent user as it need more self-management.
HINT: Self-management include logical backup, password manage and so on.
CREATE ROLE
postgres=# \du
List of roles
Role name | Attributes | Member of
-----------+------------------------------------------------------------------------------------------------------------------+-----------
hc | Independent | {}
omm | Sysadmin, Create role, Create DB, Replication, Administer audit, Monitoradmin, Operatoradmin, Policyadmin, UseFT | {}
postgres=# create database testdb;
CREATE DATABASE
postgres=# \l
List of databases
Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+-------+-----------+---------+-------+-------------------