天天看点

mysql 的权限体系介绍

mysql 的权限体系大致分为5个层级:

全局层级

全局权限适用于一个给定服务器中的所有数据库。这些权限存储在mysql.user表中。GRANT ALL ON *.*和REVOKE ALL ON *.*只授予和撤销全局权限。

数据库层级

数据库权限适用于一个给定数据库中的所有目标。这些权限存储在mysql.db和mysql.host表中。GRANT ALL ON db_name.*和REVOKE ALL ON db_name.*只授予和撤销数据库权限。

表层级

表权限适用于一个给定表中的所有列。这些权限存储在mysql.talbes_priv表中。GRANT ALL ON db_name.tbl_name和REVOKE ALL ON db_name.tbl_name只授予和撤销表权限。

列层级

列权限适用于一个给定表中的单一列。这些权限存储在mysql.columns_priv表中。当使用REVOKE时,您必须指定与被授权列相同的列。

子程序层级

CREATE ROUTINE, ALTER ROUTINE, EXECUTE和GRANT权限适用于已存储的子程序。这些权限可以被授予为全局层级和数据库层级。而且,除了CREATE ROUTINE外,这些权限可以被授予为子程序层级,并存储在mysql.procs_priv表中。

这些权限信息存储在下面的系统表中:

mysql.user

mysql.db

mysql.host

mysql.table_priv

mysql.column_priv

当用户连接进来,mysqld会通过上面的这些表对用户权限进行验证!

注意:

当后续目标是一个表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权表。请

我们可以用 CREATE USER 或 GRANT 创建用户,后者还同时分配相关权限。而 REVOKE 则用于删除用户权限,DROP USER 删除账户。

MySQL 赋予用户权限命令语法为:

grant 权限 on 数据库对象 to 用户;

grant 权限 on 数据库对象 to 用户 identified by "密码";

grant 权限 on 数据库对象 to 用户@"ip" identified by "密码"

GRANT 语法:

GRANT privileges (columns)

  ON what

  TO user IDENTIFIED BY "password"

  WITH GRANT OPTION;

privileges 列表:

* ALTER: 修改表和索引。

* CREATE: 创建数据库和表。

* DELETE: 删除表中已有的记录。

* DROP: 抛弃(删除)数据库和表。

* INDEX: 创建或抛弃索引。

* INSERT: 向表中插入新行。

* REFERENCE:未使用。

* SELECT: 检索表中的记录。

* UPDATE: 修改现存表记录。

* FILE: 读或写服务器上的文件。

* PROCESS: 查看服务器中执行的线程信息或杀死线程。

* RELOAD: 重载授权表或清空日志、主机缓存或表缓存。

* SHUTDOWN: 关闭服务器。

* ALL: 所有权限,ALL PRIVILEGES同义词。

* USAGE: 特殊的 "无权限" 权限。

子句 "WITH GRANT OPTION" 表示该用户可以为其他用户分配权限。使用grant 命令创建用户或者进行授权之后,需要使用flush privileges刷新MySQL的系统权限相关表,否则会出现拒绝访问,或者重新启动mysql服务器,来使新设置生效。当然后者并不是一种好想法!

比如:

一 grant普通数据用户yangql402查询、插入、更新、删除 数据库(test)中所有表数据的权利。

二 grant数据库开发人员(yangql402),创建表、索引、视图、存储过程、函数。。。等权限。 

grant创建、修改、删除 MySQL 数据表结构权限。

grant 操作 MySQL 外键权限,官方文档上说未使用!

grant 操作 MySQL 临时表权限。

grant 操作 MySQL 索引权限。

grant 操作 MySQL 视图、查看视图源代码 权限。

grant 操作 MySQL 存储过程、函数 权限。

三 grant 普通DBA管理某个MySQL数据库(test)的权限。

其中,关键字 “privileges” 可以省略。

四 grant 高级 DBA 管理 MySQL 中所有数据库的权限。

五 MySQL grant 权限,分别可以作用在多个层次上。

a. grant 作用在整个 MySQL 服务器上:

b. grant 作用在单个数据库上:

c. grant 作用在单个数据表上:

d. grant 作用在表中的列上:

e. grant 作用在存储过程、函数上:

六 查看用户权限

查看当前用户自己的权限:

show grants;

查看其他 MySQL 用户权限:

七 撤销用户权限

使用revoke 命令来注销用户的权限,具体语法:

要撤销所有权限,需使用以下语法。此语法用于取消对于已命名的用户的所有全局层级、数据库层级、表层级和列层级的权限。

REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...

也可以指定具体的权限比如:

1 使用GRANT或REVOKE,操作者必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。

2 使用REVOKE撤销全部权限,操作者必须拥有mysql数据库的全局CREATE USER权限或UPDATE权限。

八 删除用户:

DROP USER user;

mysql> drop user yangql402;

Query OK, 0 rows affected (0.01 sec)

本文转自 wws5201985 51CTO博客,原文链接:http://blog.51cto.com/wws5201985/785377,如需转载请自行联系原作者