权限分布

Exisi 2023-01-25 09:26:31
Categories: Tags:
  • 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

所有的权限名

 

  • 授予列权限时,权限类型的值只能指定为 SELECTINSERT 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 ROUTINEALTER ROUTINEEXECUTEGRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予子程序层级,并存储在mysql.procs_priv表中。

#mydb.mytable 表示mysql数据库下的mytable表,PROCEDUR表示存储过程

GRANT EXECUTE ON PROCEDURE mydb.myproc TO 'user'@'host';