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;