1.1.1 权限管理
1.1.1.1 GRANT和REVOKE
语法格式:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user IDENTIFIED BY [[PASSWORD] [password]]
[WITH with_option ...]
object_type:
TABLE | FUNCTION | PROCEDURE
priv_level:
* | *.* | database_name.* | database_name.table_name
| table_name | database_name.routine_name
REVOKE
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
FROM user
REVOKE ALL PRIVILEGES, GRANT OPTION
FROM user
1.1.1.2 权限级别
GRANT和REVOKE语句允许系统管理员处理用户权限的赋予与收回。
对于GRANT和REVOKE中的权限级别,priv_type指定为下列任一种。
权 限 | 意 义 |
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等 |
GRANT OPTION | 允许授予权限 |
INDEX | 允许使用CREATE INDEX和DROP INDEX |
INSERT | 允许使用INSERT |
PROCESS | 允许使用SHOW FULL PROCESSLIST |
RELOAD | 允许使用FLUSH |
SELECT | 允许使用SELECT |
SHOW DATABASES | SHOW DATABASES显示所有数据库 |
SHOW VIEW | 允许使用SHOW CREATE VIEW |
SHUTDOWN | 允许使用gbaseadmin shutdown |
SUPPER | 允许使用KILL和SET GLOBAL语句 |
UPDATE | 允许使用UPDATE |
USAGE | 仅仅用于连接登录数据库,主要用来设置with option部分 |
说明:
数据库权限分为数据库对象操作权限等以下5类:
数据库对象操作类权限;
数据操作类权限;
存储过程、自定义函数执行权限;
数据查看类权限;
数据库权限(包含用户管理)管理权限。
表格中的“ALL”是个特殊权限不在上述分类中,它是把GRANT OPTION之外的所有权限赋予指定用户。
要使用GRANT或REVOKE,必须拥有GRANT OPTION权限,并且拥有授予或收回权限。
对于GRANT和REVOKE语句,priv_level可以授予不同级别的权限:
全局级(Global level)
全局权限应用到给定服务器的所有数据库上。这些权限存储在gbase.user表中。只可以通过GRANT ALL ON *.*和REVOKE ALL ON *.*授予和收回全局权限。
数据库级(Database level)
数据库权限应用于给定数据库的所有对象上。这些权限存储在gbase.db和gbase.host表中。只可以通过GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*授予和收回数据库权限。
表级(Table level)
表权限应用于给定表的所有列。这些权限存储在gbase.tables_priv表中。只可以通过GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name授予和收回表权限。
列级(column level)
列权限应用于表中的指定列。这些权限存储在gbase.tables_priv表中。只可以通过GRANT SELECT,INSERT,UPDATE(column) ON db_name.tb1_name和REVOKE SELECT(column) ON db_name.tb1_name授予和收回列权限。
示例1:为t表中的列a赋予SELECT权限。
gbase> CREATE TABLE t(a int,b varchar(40));
Query OK, 0 rows affected
gbase> INSERT INTO t VALUES (1,'test'),(2,'share');
Query OK, 2 rows affected
Records: 2 Duplicates: 0 Warnings: 0
gbase> GRANT SELECT(a) ON test.t TO admin;
Query OK, 0 rows affected
gbase> SELECT * FROM gbase.tables_priv;
+-----------+----------+----------+---------------+-------------------+
| Host | Db | User | Table_name | Grantor |
+-----------+----------+----------+---------------+-------------------+
| % | test | admin | t | root@192.168.10.115 |
+-----------+----------+----------+---------------+-------------------+
+---------------------+------------+-------------+
| Timestamp | Table_priv | Column_priv |
+---------------------+------------+-------------+
| 2013-10-18 14:52:33 | | Select |
+---------------------+------------+-------------+
示例2:收回t表中列a的SELECT权限。
gbase> REVOKE SELECT(a) ON test.t FROM admin;
Query OK, 0 rows affected
gbase> SELECT * FROM gbase.tables_priv;
Empty set
示例3:为用户赋予优先级权限。
说明:
语法:grant usage on *.* to user_name with task_priority priority_value
priority_value的取值范围为0,1,2,3对应缺省优先级,低优先级、中优先级和高优先级。
权限要求:有grant权限的用户,推荐用户: root
gbase> create user uer1 ;
Query OK, 0 rows affected
gbase> grant usage on *.* to uer1 with task_priority 1;
Query OK, 0 rows affected
注意:对用户赋予某指定权限后,若该对象被删除,而用户的权限未被回收,则新建同名对象后,用户即拥有该对象的权限。




