用户
使用CREATE USER和ALTER USER可以创建和管理数据库用户。openGauss包含一个或多个已命名数据库用户和角色在openGauss范围内是共享的,但是其数据并不共享。即用户可以连接任何数据库,但当连接成功后,任何用户都只能访问连接请求里声明的那个数据库。
非三权分立下,openGauss用户帐户只能由系统管理员或拥有CREATEROLE属性的安全管理员创建和删除。三权分立时,用户帐户只能由初始用户和安全管理员创建。
在用户登录openGauss时会对其进行身份验证。用户可以拥有数据库和数据库对象(例如表),并且可以向用户和角色授予对这些对象的权限以控制谁可以访问哪个对象。除系统管理员外,具有CREATEDB属性的用户可以创建数据库并授予对这些数据库的权限。
创建、修改和删除用户
要创建用户,请使用SQL语句CREATE USER。
例如:创建用户joe,并设置用户拥有CREATEDB属性。
openGauss=# CREATE USER joe WITH CREATEDB PASSWORD "xxxxxxxxx";
CREATE ROLE
要创建系统管理员,请使用带有SYSADMIN选项的CREATE USER语句 。
要删除现有用户,请使用DROP USER。
要更改用户帐户(例如,重命名用户或更改密码),请使用ALTER USER。
要查看用户列表,请查询视图PG_USER:
openGauss=# SELECT * FROM pg_user;
要查看用户属性,请查询系统表PG_AUTHID:
openGauss=# SELECT * FROM pg_authid;
私有用户
对于有多个业务部门,各部门间使用不同的数据库用户进行业务操作,同时有一个同级的数据库维护部门使用数据库管理员进行维护操作的场景下,业务部门可能希望在未经授权的情况下,管理员用户只能对各部门的数据进行控制操作(DROP、ALTER、TRUNCATE),但是不能进行访问操作(INSERT、DELETE、UPDATE、SELECT、COPY)。即针对管理员用户,表对象的控制权和访问权要能够分离,提高普通用户数据安全性。
三权分立情况下,管理员对其他用户放在属于各自模式下的表无权限。但是,这种无权限包含了无控制权限,因此不能满足上面的诉求。为此,openGauss提供了私有用户方案。即在非三权分立模式下,创建具有INDEPENDENT属性的私有用户。
openGauss=# CREATE USER user_independent WITH INDEPENDENT IDENTIFIED BY "1234@abc";
针对该用户的对象,系统管理员和拥有CREATEROLE属性的安全管理员在未经其授权前,只能进行控制操作(DROP、ALTER、TRUNCATE),无权进行INSERT、DELETE、SELECT、UPDATE、COPY、GRANT、REVOKE、ALTER OWNER操作。
须知:
PG_STATISTIC系统表和PG_STATISTIC_EXT系统表存储了统计对象的一些敏感信息,如高频值MCV。系统管理员仍然可以通过访问这两张系统表,得到私有用户所属表的统计信息里的这些信息。
在某些特殊场景下,系统无法保证私有用户数据对初始用户或系统管理员绝对不可见。例如,初始用户或系统管理员通过解析本地数据文件或通过构造特殊函数或操作符被私有用户调用等方式,可能会获取私有用户数据。私有用户如果希望进一步提升数据的安全性,建议对数据进行加密保护。
永久用户
openGauss提供永久用户方案,即创建具有PERSISTENCE属性的永久用户。
openGauss=# CREATE USER user_persistence WITH PERSISTENCE IDENTIFIED BY "1234@abc";
只允许初始用户创建、修改和删除具有PERSISTENCE属性的永久用户。
用户认证优先规则
对于GUC参数b_compatibility_user_host_auth打开的b数据库,如果用户连接,需要有优先匹配的规则,如下。
- 含有具体的IP地址的用户优先级最高,比如user_name@127.0.0.1。
- 含有’%’的user_name,按照%的出现顺序决定优先级,%越靠后优先级越高,比如user_name@127.%优先级高于user_name@127%。
- 只含有user_name。比如user_name的优先级低于user_name@127%。
- 只含有’%’优先级最低。可匹配所有用户
具体创建的用户名称详情见CREATE USER语句。