GBase 8a 学习笔记 013 —— GBase 8a MPP Cluster DCL 语句
DCL 数据控制语言
DCL(Data Control Language,数据控制语言)
是对数据访问权进行控制的指令,它可以控制特定用户对库、表、存储程序、用户自定义函数等数据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。
用户 USER
- USER
- 用户用于登录数据库,新建用户默认只有登录数据库的权限。
- 具体SQL语句
-- 创建用户
gbase> create user admin identified by 'admin';
Query OK, 0 rows affected (Elapsed: 00:00:00.51)
-- 修改用户名
gbase> rename user admin to new_user;
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
-- 修改密码
gbase> set password for new_user =password('newadmin');
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
-- 删除用户
gbase> drop user new_user;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
user 支持如下几种方式的书写
- 任何主机:user@’%’
- 本机:user@‘localhost’
- 网段:user@‘192.168.0.0’
- ip 地址:user@‘192.168.10.6’
- 不写主机与 user@’%'等价:user
用户组 ROLE
-
ROLE:
- 角色相当于用户组,把有相同权限的用户组成一个组,用于批量授权。
- 用户只需要修改组的权限,该组下所有用户的权限都将发生更改,便于对拥有相同权限用户进行管理。
-
具体SQL语句
-- 创建用户组Role
gbase> create role role1, role2;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
-- 删除用户组Role
gbase> drop role role1;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
权限管理——GRANT、REVOKE
-- 为用户赋权
grant select on db1.t1 to user1;
-- 收回用户权限
revoke select on db1.t1 from user1;
-- 为用户组Role赋权
grant all on db2.* to role1;
-- 回收用户组Role权限
revoke all on db2.* from role1;
-- 将用户组Role权限赋予用户
grant role1 to user1 [with admin option];
-- 向用户回收用户组Role权限
revoke role1 from user1;
权限级别(单VC模式或默认VC下)
-- 全局级 *.* —服务器有效
grant all on *.* to user
-- 数据库级 db.* —数据库所有对象有效
grant select,insert,update,delete on db_name.* to user
-- 表级db.table.* —表中所有列有效
grant all on db_name.tbl_name to user
-- 列级 —表中指定列有效
grant insert(column_list) on db_name.table_name to user
-- 过程级 —存储过程有效
grant create routine on db_name.* to user
权限列表
权 限 | 意 义 |
---|---|
ALL [PRIVILEGES] | 设置除GRANT OPTION之外的所有简单权限 |
ALTER | 允许使用ALTER TABLE |
ALTER ROUTINE | 更改或取消已存储的子程序 |
CREATE | 允许使用CREATE TABLE |
CREATE ROUTINE | 创建已存储的子程序 |
CREATE TEMPORARY TABLES | 允许使用CREATE TEMPORARY TABLE |
CREATE USER | 允许使用CREATE USER, DROP USER, RENAME USER和REVOKE ALL PRIVILEGES。 |
CREATE VIEW | 允许使用CREATE VIEW |
DELETE | 允许使用DELETE |
DROP | 允许使用DROP TABLE |
EXECUTE | 允许用户运行已存储的子程序 |
FILE | 允许使用SELECT…FROM TABLE_NAME INTO OUTFILE等 |
INDEX | 允许使用CREATE INDEX和DROP INDEX |
INSERT | 允许使用INSERT |
PROCESS | 允许使用SHOW FULL PROCESSLIST |
REFERENCES | 未被实施 |
SELECT | 允许使用SELECT |
SHOW DATABASES | SHOW DATABASES显示所有数据库 |
SHOW VIEW | 允许使用SHOW CREATE VIEW |
SHUTDOWN | 允许使用GBASEADMIN SHUTDOWN |
UPDATE | 允许使用UPDATE |
GRANT OPTION | 允许授予权限 |
特别说明
- 特别说明
- “ALL”是一个特殊权限 ,它是把 GRANT OPTION 之外的所有权限赋予指定用户。
- 加载或导出数据需要有FIFE权限,权限需单独设置:
grant FILE on *.* to role1;
- 为用户赋予优先级权限
grant usage on *.* to user_name with task_priority priority_value
-- 注:priority_value 的取值范围为 0~3 。数字越大优先级越高,缺省为0。
- 查看用户或用户组权限:
show grants for user/role;
- 查看用户和组的关联信息:
select * from gbase.role_edges;
帐号权限管理示例
新建用户组role1,赋予emp库的权限,新建用户user1,授予role1用户组中。
gbase> create role role1;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> grant all on test.* to role1;
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> create user user1 identified by '111111';
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
# 给用户授于用户组权限
gbase> grant role1 to user1;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
用新账号user1登录,查询 select表test库中的记录
[gbase@192 ~]$ gccli -uuser1 -p
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2023, GBase. All Rights Reserved.
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> show tables;
+----------------+
| Tables_in_test |
+----------------+
| sc |
| student |
+----------------+
2 rows in set (Elapsed: 00:00:00.00)
新建账号admin,并赋予t.a列查询 select 的权限
[gbase@192 ~]$ gccli -uroot -p
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2023, GBase. All Rights Reserved.
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
gbase> create table t(a int,b varchar(40));
Query OK, 0 rows affected (Elapsed: 00:00:00.78)
gbase> insert into t values(1,'test'),(2,'share');
Query OK, 2 rows affected (Elapsed: 00:00:00.06)
Records: 2 Duplicates: 0 Warnings: 0
gbase> create user admin identified by '123456';
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
gbase> grant select(a) on test.t to admin;
Query OK, 0 rows affected (Elapsed: 00:00:00.02)
用新账号admin登录,查询 select表t.a 的记录
[gbase@192 ~]$ gccli -uadmin -p
Enter password:
GBase client 9.5.2.39.126761. Copyright (c) 2004-2023, GBase. All Rights Reserved.
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.00)
-- 报错,没有t表所有列的select权限
gbase> select * from t;
ERROR 1142 (42000): SELECT command denied to user 'admin'@'localhost' for table 't'
gbase>
-- 正常查询,有a列的select权限
gbase> select a from t;
+------+
| a |
+------+
| 1 |
| 2 |
+------+
2 rows in set (Elapsed: 00:00:00.17)
多VC下用户操作VC
- 多VC的虚拟集群环境中,用户和用户组是全局统一的。
- 为用户设置默认VC
- 给用户设置DEFAULT_VC权限后,用户连接集群时就默认登录到该VC。
- 建议给每个用户都设置默认VC
- 设置默认Default_VC的命令
set default_vc for user = vc_name;
- 切换当前VC 语法
USE VC VC_NAME ;
设置root用户的默认VC
set default_vc for root = vc1;
use vc vc2;
多VC下用户权限管理
把访问多VC下的库/表/列…授权给USER。授权方式如下:
GRANT ALL ON *.*.* TO USER1;
GRANT ALL ON VC2.DB.* TO USER1;
GRANT ALL ON VC2.DB.TABLE TO USER1;
把USER在多VC下的库/表/列…权限收回。收回方式如下:
REVOKE ALL ON VC2.*.* FROM USER1;
REVOKE ALL ON VC2.DB.* FROM USER1;
REVOKE ALL ON VC2.DB.TABLE FROM USER1;
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。