- MySQL 中可授予的权限有如下几组:
权限分类 |
描述 |
列权限 |
和表中的一个具体列相关。例如,可以使用 UPDATE 语句更新表 students 中 name 列的值 |
表权限 |
和一个具体表中的所有数据相关。例如,可以使用 SELECT 语句查询表 students 的所有数据 |
数据库权限 |
和一个具体的数据库中的所有表相关。例如,可以在已有的数据库 mytest 中创建新表 |
用户权限 |
和 MySQL 中所有的数据库相关。例如,可以删除已有的数据库或者创建一个新的数据库 |
授权分布
- 授予数据库权限时,权限类型可以指定为以下值:
权限名称 |
user表中的字段 |
说明 |
SELECT |
Select_priv |
表示授予用户可以使用 SELECT 语句访问特定数据库中所有表和视图的权限。 |
INSERT |
Insert_priv |
表示授予用户可以使用 INSERT 语句向特定数据库中所有表添加数据行的权限。 |
DELETE |
Delete_priv |
表示授予用户可以使用 DELETE 语句删除特定数据库中所有表的数据行的权限。 |
UPDATE |
Update_priv |
表示授予用户可以使用 UPDATE 语句更新特定数据库中所有数据表的值的权限。 |
REFERENCES |
References_priv |
表示授予用户可以创建指向特定的数据库中的表外键的权限。 |
CREATE |
Create_priv |
表示授权用户可以使用 CREATE TABLE 语句在特定数据库中创建新表的权限。 |
ALTER |
Alter_priv |
表示授予用户可以使用 ALTER TABLE 语句修改特定数据库中所有数据表的权限。 |
SHOW VIEW |
Show_view_priv |
表示授予用户可以查看特定数据库中已有视图的视图定义的权限。 |
CREATE ROUTINE |
Create_routine_priv |
表示授予用户可以为特定的数据库创建存储过程和存储函数的权限。 |
ALTER ROUTINE |
Alter_routine_priv |
表示授予用户可以更新和删除数据库中已有的存储过程和存储函数的权限。 |
INDEX |
Index_priv |
表示授予用户可以在特定数据库中的所有数据表上定义和删除索引的权限。 |
DROP |
Drop_priv |
表示授予用户可以删除特定数据库中所有表和视图的权限。 |
CREATE TEMPORARY TABLES |
Create_tmp_table_priv |
表示授予用户可以在特定数据库中创建临时表的权限。 |
CREATE VIEW |
Create_view_priv |
表示授予用户可以在特定数据库中创建新的视图的权限。 |
EXECUTE ROUTINE |
Execute_priv |
表示授予用户可以调用特定数据库的存储过程和存储函数的权限。 |
LOCK TABLES |
Lock_tables_priv |
表示授予用户可以锁定特定数据库的已有数据表的权限。 |
ALL ALL PRIVILEGES SUPER |
Super_priv |
表示以上所有权限/超级权限 |
授予表权限时,权限类型可以指定为以下值:
权限名称 |
user表中的字段 |
说明 |
SELECT |
Select_priv |
授予用户可以使用 SELECT 语句进行访问特定表的权限 |
INSERT |
Insert_priv |
授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限 |
DELETE |
Delete_priv |
授予用户可以使用 DELETE 语句从一个特定表中删除数据行的权限 |
DROP |
Drop_priv |
授予用户可以删除数据表的权限 |
UPDATE |
Update_priv |
授予用户可以使用 UPDATE 语句更新特定数据表的权限 |
ALTER |
Alter_priv |
授予用户可以使用 ALTER TABLE 语句修改数据表的权限 |
REFERENCES |
References_priv |
授予用户可以创建一个外键来参照特定数据表的权限 |
CREATE |
Create_priv |
授予用户可以使用特定的名字创建一个数据表的权限 |
INDEX |
Index_priv |
授予用户可以在表上定义索引的权限 |
ALL ALL PRIVILEGES SUPER |
Super_priv |
所有的权限名 |
- 授予列权限时,权限类型的值只能指定为 SELECT、INSERT 和 UPDATE,同时权限的后面需要加上列名列表 column-list。
权限名称 |
user表中的字段 |
说明 |
SELECT |
Select_priv |
授予用户可以使用 SELECT 语句进行访问特定表的权限 |
INSERT |
Insert_priv |
授予用户可以使用 INSERT 语句向一个特定表中添加数据行的权限 |
UPDATE |
Update_priv |
授予用户可以使用 UPDATE 语句更新特定数据表的权限 |
ALL |
Super_priv |
表示以上所有权限 |
- 授予用户权限时,权限类型除了可以指定为授予数据库权限时的所有值之外,还可以是下面这些值:
权限名 |
说明 |
CREATE USER |
表示授予用户可以创建和删除新用户的权限。 |
SHOW DATABASES |
表示授予用户可以使用 SHOW DATABASES 语句查看所有已有的数据库的定义的权限 |
用户权限层级
全局层级
- 全局权限适用于一个给定MySQL Server中的所有数据库,这些权限存储在mysql.user表中。
# *.* 表示数据库库的所有库和表,对应权限存储在mysql.user表
GRANT ALL ON *.* TO 'user'@'host';
数据库层级
- 数据库权限适用于一个给定数据库中的所有目标,这些权限存储在mysql.db表中。
#mydb.* 表示mysql数据库下的所有表,对应权限存储在mysql.db表中
GRANT ALL ON mydb.* TO 'user'@'host';
表层级
- 表权限适用于一个给定表中的所有列,这些权限存储在mysql.tables_priv表中
#mydb.mytable 表示mysql数据库下的mytable表,对应权限存储在mysql.tables_priv表
GRANT ALL ON mydb.mytable TO 'user'@'host';
列层级
- 列权限使用于一个给定表中的单一列,这些权限存储在mysql.columns_priv表中
#mydb.mytable 表示mysql数据库下的mytable表, col1, col2, col3表示mytable表中的列名
GRANT ALL (col1, col2, col3) ON mydb.mytable TO 'user'@'host';
子程序层级
- CREATE ROUTINE、ALTER ROUTINE、EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。
#mydb.mytable 表示mysql数据库下的mytable表,PROCEDUR表示存储过程
GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'user'@'host';