数据库运维
记录DBA学习成长历程

第11章:GBase 8a MPP Cluster DCL 语句

文章目录

1 简述

DCL(Data Control Language,数据控制语言):
是对数据访问权进行控制的指令,它可以控制特定用户对库、表、存储程序、用户自定义函数等数 据库对象的控制权。由 GRANT 和 REVOKE 两个指令组成。

2 用户 USER

用户用于登录数据库,新建用户默认只有登录数据库的权限。

具体SQL语句:
− 创建用户:create user admin identified by 'admin';
− 修改用户名:rename user admin to new_user;
− 修改密码:set password for new_user =password('newadmin');
− 删除用户:drop user new_user;

user 支持如下几种方式的书写:
1.任何主机:user@'%'
2.本机:user@'localhost'
3.网段:user@'192.168.0.0'
4. ip 地址:user@'192.168.10.6'
5. 不写主机与 user@'%'等价:user

3 用户组 ROLE

− 角色相当于用户组,把有相同权限的用户组成一个组,用于批量授权。
− 用户只需要修改组的权限,该组下所有用户的权限都将发生更改,便于对拥有相同权限用户进行管理。

具体SQL语句:
− 创建用户组Role:
create role role1, role2;
− 删除用户组Role:
drop role role1;

4 权限管理——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;

5 权限级别

权限级别(单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

6 权限列表

• 特别说明:
− “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;

7 帐号权限管理示例1

1.新建用户组role1,赋予emp库的权限,新建 用户user1,授予role1用户组中。

gbase> create role role1;
Query OK, 0 rows affected (Elapsed: 00:00:00.18)
gbase> grant all on emp.* to role1;
Query OK, 0 rows affected (Elapsed: 00:00:00.09)
gbase> create user user1 identified by '111111'; 
Query OK, 0 rows affected (Elapsed: 00:00:00.03)

# 给用户授于用户组权限
gbase> grant role1 to user1;
Query OK, 0 rows affected (Elapsed: 00:00:00.02)

2.用新账号user1登录,查询 select表emp库中的记录

[gbase@peixun1252 ~]$ gccli -uuser1 -p Enter password:
GBase client 8.6.2.33-R3.97866. Copyright (c) 2004-2017, GBase.  All Rights Reserved.
gbase> use emp;
Query OK, 0 rows affected (Elapsed: 00:00:00.10)
gbase> show tables; 
+---------------+
| Tables_in_emp | 
+---------------+
| bonus         |
| dept |
| emp |
| salgrade |
+---------------+

3. 新建账号admin,并赋予t.a列查询 select 的权限

gbase> create table t(a int,b varchar(40)); 
Query OK, 0 rows affected (Elapsed: 00:00:01.08)
gbase> insert into t values(1,'test'),(2,'share'); 
Query OK, 2 rows affected (Elapsed: 00:00:00.71) 
Records: 2  Duplicates: 0  Warnings: 0
gbase> create user admin identified by '123456'; 
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> grant select(a) on test.t to admin;
Query OK, 0 rows affected (Elapsed: 00:00:00.06)

4. 用新账号admin登录,查询 select表t.a 的记录

[gbase@peixun1251 ~]$ gccli -uadmin -p 
Enter password:
gbase> use test;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
gbase> select * from t;
ERROR 1142 (42000): SELECT command denied to user 'admin'@'127.0.0.1' for table 't‘
gbase> select a from t; 
+------+
| a    |
+------+
|    1 |
|    2 |
+------+
2 rows in set (Elapsed: 00:00:00.09)

8 多VC下用户操作VC

● 多VC的虚拟集群环境中,用户和用户组是全局统一的。
● 为用户设置默认VC
− 给用户设置DEFAULT_VC权限后,用户连接集群时就默认登录到该VC。 − 建议给每个用户都设置默认VC
− 设置默认Default_VC的命令
set default_vc for user = vc_name;
● 切换当前VC 语法:
USE VC VC_NAME ;
● 举例:设置root用户的默认VC
gbase> set default_vc for root = vc1;
gbase> use vc vc2;

9 多VC下用户权限管理

1、把访问多VC下的库/表/列...授权给USER。
授权方式如下:
GRANT ALL ON *.*.* TO USER1;
GRANT ALL ON VC2.DB.* TO USER1;
GRANT ALL ON VC2.DB.TABLE TO USER1;

2、把USER在多VC下的库/表/列...权限收回。
收回方式如下:
REVOKE ALL ON VC2.*.* FROM USER1;
REVOKE ALL ON VC2.DB.* FROM USER1;
REVOKE ALL ON VC2.DB.TABLE FROM USER1;

赞(0)
MySQL学习笔记 » 第11章:GBase 8a MPP Cluster DCL 语句