CREATE USER
功能描述
创建一个带有指定密码的新用户。用户是数据库认证的基本元素,可以通过正确的用户名和密码登录数据库,并对不同的用户授予不同的权限,以便不同的用户进行不同的操作。
注意事项
- 通过CREATE USER创建的用户,默认具有LOGIN权限。
- 通过CREATE USER创建用户的同时,系统会在执行该命令的数据库中,为该用户创建一个同名的Schema。
- 系统管理员在普通用户同名Schema下创建的对象,所有者为Schema的同名用户(非系统管理员)。
语法格式
1
|
CREATE USER user_name [ [ WITH ] option [ ... ] ] [ ENCRYPTED | UNENCRYPTED ] { PASSWORD | IDENTIFIED BY } { 'password' [EXPIRED] | DISABLE }; |

其中option子句用于设置权限及属性等信息。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
{SYSADMIN | NOSYSADMIN} | {MONADMIN | NOMONADMIN} | {OPRADMIN | NOOPRADMIN} | {POLADMIN | NOPOLADMIN} | {AUDITADMIN | NOAUDITADMIN} | {CREATEDB | NOCREATEDB} | {USEFT | NOUSEFT} | {CREATEROLE | NOCREATEROLE} | {INHERIT | NOINHERIT} | {LOGIN | NOLOGIN} | {REPLICATION | NOREPLICATION} | {PERSISTENCE | NOPERSISTENCE} | CONNECTION LIMIT connlimit | VALID BEGIN 'timestamp' | VALID UNTIL 'timestamp' | RESOURCE POOL 'respool' | USER GROUP 'groupuser' | PERM SPACE 'spacelimit' | TEMP SPACE 'tmpspacelimit' | SPILL SPACE 'spillspacelimit' | NODE GROUP logic_cluster_name | IN ROLE role_name [, ...] | IN GROUP role_name [, ...] | ROLE role_name [, ...] | ADMIN role_name [, ...] | USER role_name [, ...] | SYSID uid | DEFAULT TABLESPACE tablespace_name | PROFILE DEFAULT | PROFILE profile_name | PGUSER |

参数说明
- user_name
需要创建的用户名称。
取值范围:字符串,要符合标识符命名规范且最大长度不超过63个字符。
- 标识符需要为小写字母(a~z)、大写字母(A~Z)、下划线(_)、数字(0~9)或美元符号($),且必须以字母或下划线开头。
- 若用户名称超过63个字符时,数据库会截断并保留前63个字符当作用户名称。
- 当用户名称中包含大写字母时,数据库会自动转换为小写字母,如果需要创建包含大写字母的用户名称则需要使用双引号进行包裹。
- redisuser为重分布资源管控对象,当前不支持创建user_name为redisuser的用户。
- password
登录密码。
取值范围:字符串。
密码规则如下:
- 密码默认不少于8个字符。
- 不能与用户名及用户名倒序相同。
- 至少包含大写字母(A~Z)、小写字母(a~z)、数字(0~9)以及非字母数字字符(~、!、@、#、$、%、^、&、*、(、)、-、_、=、+、\、|、[、{、}、]、;、:、,、<、.、>、/和?)四类字符中的三类字符。当密码中包含其他字符时语句执行会报错。
- 密码也可以使用符合格式要求的密文字符串,主要用于用户数据导入场景,不推荐用户直接使用。数据库不会对密文密码复杂度进行校验,直接使用密文密码可能存在数据安全风险,如果用户直接使用密文密码,需清楚密文密码对应的明文以及保证明文密码复杂度。
- 创建用户时,用户密码需使用单引号进行包裹。
- 其他参数请参见CREATE ROLE章节的参数说明。
示例
--创建用户jim,登录密码为********。 gaussdb=# CREATE USER jim PASSWORD '********'; --创建用户kim,登录密码为********。 gaussdb=# CREATE USER kim IDENTIFIED BY '********'; --创建用户tom。 gaussdb=# CREATE USER TOM PASSWORD '********'; --创建用户TOM。 gaussdb=# CREATE USER "TOM" PASSWORD '********'; --如果需要创建具有“创建数据库”权限的用户,则需要加CREATEDB关键字。 gaussdb=# CREATE USER dim CREATEDB PASSWORD '********'; --查看用户dim的权限。 gaussdb=# \du dim List of roles Role name | Attributes | Member of -----------+------------+----------- dim | Create DB | {} (可以看到用户dim具有CREATEDB的权限) --修改jim用户密码。 gaussdb=# ALTER USER jim IDENTIFIED BY '**********' REPLACE '********'; --为用户jim追加CREATEROLE权限。 gaussdb=# ALTER USER jim CREATEROLE; --查看用户jim追加的CREATEROLE权限。 gaussdb=# \du jim List of roles Role name | Attributes | Member of -----------+-------------+----------- jim | Create role | {} --锁定jim账户。 gaussdb=# ALTER USER jim ACCOUNT LOCK; --解锁jim账户。 gaussdb=# ALTER USER jim ACCOUNT UNLOCK; --修改用户密码。 gaussdb=# ALTER USER dim WITH PASSWORD '********'; --修改用户名。 gaussdb=# ALTER USER dim RENAME TO lisa; --创建具有OPRADMIN权限的用户user1和具有SYSADMIN权限的用户user2。 gaussdb=# CREATE USER user1 WITH OPRADMIN PASSWORD '********'; gaussdb=# CREATE USER user2 WITH SYSADMIN PASSWORD '********'; --查看权限。 gaussdb=# \du user1 List of roles Role name | Attributes | Member of -----------+-----------------------------+----------- user1 | Operatoradmin | {} gaussdb=# \du user2 List of roles Role name | Attributes | Member of -----------+------------------------+----------- user2 | Sysadmin | {} --创建具有CREATEDB权限的角色user3。 gaussdb=# CREATE USER user3 CREATEDB PASSWORD '********'; CREATE ROLE --查看权限。 gaussdb=# \du user3 List of roles Role name | Attributes | Member of -----------+-------------------------+----------- user3 | Create DB | {} --使用ADMIN子句创建新角色user4。 gaussdb=# CREATE USER user4 WITH CREATEDB ADMIN user3 PASSWORD '********'; CREATE ROLE --查看权限。 gaussdb=# \du user3 List of roles Role name | Attributes | Member of -----------+-------------------------+----------- user3 | Create DB | {user4} gaussdb=# \du user4 List of roles Role name | Attributes | Member of -----------+-------------------------+----------- user4 | Create DB | {} --删除角色。 gaussdb=# DROP USER user1; gaussdb=# DROP USER user2; gaussdb=# DROP USER user3; gaussdb=# DROP USER user4; --三权分立配置:设置参数enableSeparationOfDuty为on,则会开启三权分立配置,限制系统管理员的权限。不允许系统管理员创建或更改用户配置。 --查看三权分立是否打开。 gaussdb=# SHOW enableSeparationOfDuty; enableSeparationOfDuty ------------------------ off (1 row) --切换到数据库omm用户后,执行以下语句修改参数。 gs_guc set -Z coordinator -Z datanode -N all -I all -c "enableSeparationOfDuty = on" --设置成功后,重启数据库生效。 gs_om -t stop gs_om -t start --再次查看三权分立。 gaussdb=# SHOW enableSeparationOfDuty; enableSeparationOfDuty ------------------------ on (1 row) --删除用户。 gaussdb=# DROP USER kim CASCADE; gaussdb=# DROP USER jim CASCADE; gaussdb=# DROP USER lisa CASCADE; gaussdb=# DROP USER TOM CASCADE; gaussdb=# DROP USER "TOM" CASCADE;