目录
[4、设置用户默认 warehouse](#4、设置用户默认 warehouse)
一、环境信息
|---------|-------------------------------------------|
| 名称 | 值 |
| CPU | Intel(R) Core(TM) i5-1035G1 CPU @ 1.00GHz |
| 操作系统 | CentOS Linux release 7.9.2009 (Core) |
| 内存 | 4G |
| 逻辑核数 | 4 |
| GCDW版本 | 9.8.0.6.17 |
| 集群节点1IP | 192.168.142.10 |
二、概念
GCDW的账户管理系统由角色、用户、权限组成。
|----|----------------------------------------------------------------------------------------------------------------|
| 编号 | 描述 |
| 1 | 用户通过角色与权限进行关联。权限赋予角色,一个角色对应一组权限,用户通过成为角色的成员而得到这些角色的权限(用户自身不带权限属性)。 |
| 2 | 一个用户可以拥有若干角色,每一个角色拥有若干权限。用户选择自身拥有的某个角色创建会话,该会话中用户只具有这个选定角色的权限,不具有自身的其他角色权限。 |
| 3 | 角色有继承关系。父角色具有其所有子角色的权限,如果给某个角色赋予某项权限,则该角色的所有父角色同时具有该权限;相应的某个角色的权限被取消时,通过该角色得到的这项权限的父角色也会被取消这项权限。 |
| 4 | 用户以某个角色创建了数据库对象,该角色就是这个数据库对象的拥有者(OWNER)。该角色(OWNER)具有这个数据库对象的所有权限,即该角色的所有用户都具有这个数据库对象的所有操作权限,包括转赠这个数据库对象所有者的权限。 |
三、用户相关系统表
1、CLOUD.USER
(1)字段解释
|----|-------------------------|----------------------------|
| 序号 | 列名 | 描述 |
| 1 | user | 用户名 |
| 2 | password | 用户密码 |
| 3 | plugin | 插件 |
| 4 | auth_string | 用户认证方式 |
| 5 | create_time | 用户的创建时间 |
| 6 | last_login_time | 用户最近的访问时间 |
| 7 | grant_role | 用户被授予的角色 |
| 8 | switch_role | 用户可以切换的角色 |
| 9 | default_role | 用户的默认角色 |
| 10 | default_warehouse | 用户的默认 warehouse |
| 11 | uid | 用户 id |
| 12 | owner | 用户的拥有者(默认为创建者) |
| 13 | ssl_type | ssl(Secure Socket Layer)类型 |
| 14 | ssl_cipher | ssl 密码 |
| 15 | x509_issuer | ssl 加密证书颁发者 |
| 16 | x509_subject | ssl 加密证书的主体名称 |
| 17 | max_questions | 已知的用户最大并发查询数 |
| 18 | max_updates | 已知的用户最大并发 update 数 |
| 19 | max_connections | 已知的用户最大并发连接数 |
| 20 | max_user_connections | 支持的用户最大并发连接数 |
| 21 | max_cpus | 已知的用户最大 CPU 使用率(时间分片) |
| 22 | max_memories | 已知的用户最大内存使用空间 |
| 23 | max_tmp_space | 已知的用户最大临时空间使用容量 |
| 24 | resource_group | 用户的资源组 |
| 25 | task_priority | 用户的任务优先级 |
| 26 | user_limit_storage_size | 用户的空间容量使用限制 |
| 27 | user_storage_size | 当前用户使用的空间大小 |
| 28 | comment | 注释信息 |
(2)示例
sql
gbase> SELECT * FROM CLOUD.USER WHERE USER = 'root' \G;
*************************** 1. row ***************************
user: root
password: *D75CC763C5551A420D28A227AC294FADE26A2FF2
plugin: gbase_native_password
auth_string:
create_time: NULL
last_login_time: NULL
grant_role: accountadmin
switch_role: accountadmin,systemadmin,publicadmin
default_role: accountadmin
default_warehouse:
uid: 4
owner: accountadmin
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 0
max_cpus: 0
max_memories: 0
max_tmp_space: 0
resource_group: 0
task_priority: 2
user_limit_storage_size:
user_storage_size: 0
comment:
1 row in set (Elapsed: 00:00:00.06)
ERROR:
No query specified
2、CLOUD.USER_CHECK
(1)字段解释
|----|-----------------------|------------------------------|
| 序号 | 列名 | 描述 |
| 1 | user | 用户名 |
| 2 | attempt | 登录密码错误重试限制的次数,超过次数用户被锁定 |
| 3 | last_attempt | 最近登录的重试次数 |
| 4 | locked | 用户是否被锁定 |
| 5 | password_expired | 密码当前是否过期 |
| 6 | password_last_changed | 最近一次更改密码的时间 |
| 7 | password_life_time | 密码的有效期管理策略,正整数表示还有多少天后必须更改密码 |
| 8 | password_history | 用户的历史密码 |
| 9 | login_time | 用户当前的登录时间 |
| 10 | last_login_time | 最近的用户登录时间 |
| 11 | login_count | 用户的登录次数 |
(2)示例
sql
gbase> SELECT * FROM CLOUD.USER_CHECK WHERE USER = 'root'\G;
*************************** 1. row ***************************
user: root
attempt: 0
last_attempt: 0
locked: N
password_expired: N
password_last_changed: NULL
password_life_time: NULL
password_history: *D75CC763C5551A420D28A227AC294FADE26A2FF2
login_time: 2024-07-15 14:04:47
last_login_time: 2024-07-15 10:46:03
login_count: 6
1 row in set (Elapsed: 00:00:00.03)
ERROR:
No query specified
四、实操
1、新建用户
(1)语法
sql
CREATE USER username [auth_option] [lock_option] [expiration_option] [default_role]
[default_warehouse] [comment];
|-------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| 参数 | 描述 |
| username | 用户名 |
| auth_option | 用户认证方式。可选参数。 identified by 'password' [limit_storage_size=''] limit_storage_size 是用户磁盘限额,在 sql 执行开始时进行检查用户当前磁盘使用是否超额,如果超额直接报错返回,执行过程中磁盘使用超额不检查不报错。参数值需为整数,单位可以是 K、M、G。如:limit_storage_size=1M |
| lock _option | 是否锁定账户。可选参数。 |
| expiration_option | 密码过期策略。控制密码的有效期,达到有效期后用户密码自动过期。 用户密码过期后,允许用户登录,在执行 SQL 时提示用户修改密码。 此时允许用户修改自己的密码。必须修改密码后才允许执行其它 SQL。 为可选参数。默认为永不过期。 password expire 立即过期 password expire never 永不过期 password expire interval N day 密码过期的时间间隔为 N 天。 即设置了密码后 N 天该密码过期,需要设置新的密码。 |
| default_role | 默认角色,如不填写默认为系统角色 publicadmin。可选参数,建议填写。如,default_role='role_name'。 |
| default_warehouse | 用户默认关联的 warehouse。可选参数。如,default_warehouse='warehouse name' |
| comment | 注释信息 |
(2)示例
sql
gbase> CREATE USER ZXJ
-> IDENTIFIED BY 'qwer1234'
-> DEFAULT_WAREHOUSE='WH_CZG'
-> DEFAULT_ROLE='accountadmin'
-> COMMENT 'SUN';
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
gbase> CREATE USER LXG
-> IDENTIFIED BY 'qwer1234'
-> LIMIT_STORAGE_SIZE = 100G
-> ACCOUNT UNLOCK
-> PASSWORD EXPIRE NEVER
-> COMMENT 'SUN';
Query OK, 0 rows affected (Elapsed: 00:00:00.08)
我发现上面有些属性不能共用,可能是我用法的问题。
2、修改用户密码
(1)语法
sql
SET PASSWORD [FOR user] = PASSWORD('newpassword');
(2)示例
sql
gbase> SET PASSWORD FOR ZXJ = PASSWORD('haha');
Query OK, 0 rows affected (Elapsed: 00:00:00.09)
gbase> ALTER USER ZXJ IDENTIFIED BY 'qwer1234';
Query OK, 0 rows affected (Elapsed: 00:00:00.11)
3、设置用户默认角色
(1)语法
sql
ALTER USER username DEFAULT_ROLE='role_name';
(2)示例
sql
gbase> ALTER USER ZXJ DEFAULT_ROLE='systemadmin';
Query OK, 0 rows affected (Elapsed: 00:00:00.09)
4、设置用户默认 warehouse
设置用户默认的 warehouse 必须是当前已经存在的 warehouse。
设置用户默认 warehouse 不涉及用户的 warehouse 相关权限:
1.用户没有该 warehouse 的任何权限也可以将该 warehouse 设置为该用户的默认 warehouse。
2.设置用户默认 warehouse 成功后,不代表用户获取了该 warehouse 的使用权限, 用户需要另外被赋予该 warehouse 的相应权限才能正常使用该 warehouse。 修改用户的默认 warehouse 并不会引起已有 session 当前使用的 warehouse,但是会影 响新 session 做计算时选用的 warehouse.
(1)语法
sql
ALTER USER username default_warehouse='wh_name';
(2)示例
sql
gbase> ALTER USER ZXJ DEFAULT_WAREHOUSE='wh_czg';
Query OK, 0 rows affected (Elapsed: 00:00:00.07)
5、重命名用户
(1)语法
sql
RENAME USER <oldusername> TO <newusername>;
(2)示例
sql
gbase> RENAME USER ZXJ TO CLX;
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
6、启用和禁用用户
(1)语法
sql
ALTER USER <username> ACCOUNT LOCK | ACCOUNT UNLOCK;
(2)示例
sql
gbase> ALTER USER CLX ACCOUNT LOCK;
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
gbase> ALTER USER CLX ACCOUNT UNLOCK;
Query OK, 0 rows affected (Elapsed: 00:00:00.05)
7、用户切换角色
(1)语法
sql
USE ROLE <rolename> ;
(2)示例
sql
gbase> USE ROLE accountadmin;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
8、查看用户信息
(1)示例
sql
gbase> SHOW USERS;
+-------+
| User |
+-------+
| root |
| gbase |
| CZG |
| CLX |
| LXG |
+-------+
5 rows in set (Elapsed: 00:00:00.09)
9、显示当前会话连接的用户名称
(1)示例
sql
gbase> SELECT USER();
+----------------+
| USER() |
+----------------+
| root@localhost |
+----------------+
1 row in set (Elapsed: 00:00:00.00)
10、删除用户
(1)语法
sql
DROP USER <username>;
(2)示例
sql
gbase> DROP USER CLX;
Query OK, 0 rows affected (Elapsed: 00:00:00.17)
11、查看当前用户拥有的权限
(1)语法
sql
show grants;
(2)示例
sql
gbase> show grants;
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Grants for role_exam@% |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| GRANT CREATE, RELOAD, PROCESS, SHOW DATABASES, OPERATE_WAREHOUSE, CREATE_FILE_FORMAT, CREATE_STAGE, STAGE_READ, STAGE_WRITE, FILE_FORMAT_USAGE ON *.*.* TO ROLE 'role_exam'@'%' |
| GRANT ALL PRIVILEGES ON "vc00001"."ssbm".* TO ROLE 'role_exam'@'%' |
| GRANT "publicadmin" TO ROLE "role_exam" |
+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
3 rows in set (Elapsed: 00:00:00.01)