(1)CREATE 和 DROP权限,可以创建新数据库和表,或删除已有数据库和表。
(2)SELECT、INSERT、UPDATE 和 DELETE 权限,允许在数据库表上进行操作
(3)INDEX 权限允许创建或删除索引 ,适用于已有的表。·
(4)ALTER,使用 ALTER TABBLE 允许更改表的结构和重命名表
(5)CREATE ROUTINE,创建保存的函数和程序 ALTER ROUTINE 权限用来更改和删除保存的程序,EXECUTE 权限用来执行保存的程序。
(6)GRANT,允许授权给其他用户
(7)FILE 权限可以使用 LOAD DATA INFILE 和 SELECT ... INTO OUTFILE 语句读或写服务器上的文件,任何被授予FILE 权限的用户都能读或写 MySQL 服务器上的任何文件(说明用户可以读任何数据库目录下的文件,因为服务器可以访问这些文件)。FILE 权限允许用户在 MySQL 服务器具有写权限的目录下创建新文件,但不能覆盖已有文件。
其余的权限用于管理性操作,通过 mysqladmin 程序或 SQL 语句实施。下表列出了不同权限允许执行的 mysqladmin 命令。
权限 | 权限拥有者允许执行的命令 |
reload | flush-hosts, flush-logs, fiush-privileges, flush-status, flush- tables, flush-threads,refresh,reload |
shutdown | shutdown |
process | processlist |
super | kill |
总的来说,只授予权限给需要他们的那些用户。
授权就是为某个用户授予权限。在 MySQL 中可以使用 GRANT 语句为用户授予权限。授予的权限可以分为多个层级:
(1)全局层级
全局权限适用于一个给定服务器中的所有数据库,权限存储在 mysql.user 表中,
GRANT ALL ON *.* 和 REVOKE ALL ON *.* 只授予和撤销全局权限。
(2)数据库层级
数据库权限用于一个给定数据库中的所有目标。这些权限存储在 mysql.db 和 mysql.host 表中。
GRANT ALL ON db_name.* 和 REVOKE ALL ON db_name.* 只授予和撤销数据库权限
(3)表层级
表权限适用于一个给定表中的所有列。这些权限存储在 mysql.tables_priv 表中。
GRANT ALL ON db_name.tbl_name 和 REVOKE ALL ON db_name.tbl_name 只授予和撤销表权限
(4)列层级
列权限适用于一个给定表中的单一列。这些权限存储在 mysql.columns_priv 表中。当使用 REVOKE 时,必须指定与被授权列相同的列。
(5)子程序层级
CREATE ROUTINE、 ALTER ROUTINE、EXECUTE 和 GRANT 权限适用于已存储的子程序,这些权限可以被授于全局层级和数据库层级。而且,除了 CREATE ROUTINE 之外,这些权限还可以被授予子程序层级,井存储在 mysql.procs_priv 表中。
在 MySOL 中,必须是拥有 GRANT 权限的用户才可以执行 GRANT 语句。要使用 GRANT 或 REVOKE,必须拥有GRANT OPTION 权限。
GRANT 语法如下:
GRANT pri_type [ ( columns ) ] [ , pri_type [ ( columns ) ] ] ...
ON [ object_type ] table1, table2, ... , tablen
TO user [ IDENTIFIED BY [ PASSWORD ] 'password' ]
[ , user [ IDENTIFIED BY [ PASSWORD ] 'password' ] ] ...
[ WITH GRANT OPTION]
object_type = TABLE | FUNCTION | PROCEDURE
GRANT OPTION 取值
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count
priv_type 参数表示权限类型: columns 参数表示权限作用于哪些列上,不指定该参数则表示作用于整个表; table1, table2, ... , tablen 表示授予权限的列所在的表; object_type指定授权作用的对象类型包括 TABLE(表)、FUNCTION(函数) 和PROCEDURE(存储过程),当从旧版本的 MySQL 升级时,要使用 object_type 子句,必须升级授权表; user 参数表示用户账户,由用户名和主机名构成,形式是 ”'username@hostname' " ; IDENTIFIED BY 参数用于设置密码。
WITH 关键字后可以跟一个或多个 GRANT OPTION 。 GRANT OPTION的取值有5个,意义如下:
MAX_USER_CONNECTIONS count 设置单个用户可以同时建立 count 个连接。
【例】使用 GRANT 语句创建一个新的用户 zth 密码为 zth。用户 zth 对所有的数据有查询、插入权限,并授子 GRANT权限。GRANT 语句及其执行结果如下:
mysql> GRANT SELECT, INSERT ON *.* TO 'zth'@'localhost'
-> IDENTIFIED BY 'zth'
-> WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.08 sec)
使用 SELECT 语句查询用户 zth 的权限:
mysql> SELECT Host, User, Select_priv , Insert_priv, Grant_priv FROM mysql.user where user='zth';
+-----------+------+-------------+-------------+------------+
| Host | User | Select_priv | Insert_priv | Grant_priv |
+-----------+------+-------------+-------------+------------+
| localhost | zth | Y | Y | Y |
+-----------+------+-------------+-------------+------------+
收回权限就是取消已经赋予用户的某些权限。收回用户不必要的权限可以在一定程度上保证系统的安全性。MySQL 中使用REVOKE 语句取消用户的某些权限。使用 REVOKE 收回权限之后,用户账户的记录将从 db、host、tables_priv 和 columns_priv 表中删除,但是用户账号记录仍然在 user 表中保存 (删除 user 表中的账户记录,可以使用 DROP USER 语句)。
在将用户账户从 user 表删除之前,应该收回相应用户的所有权限,REVOKE 语句有两种语法格式,第一种语法是收回所有用户的所有权限,此语法可以取消用户的所有全局层级、数据库层级、表层级和列层级的权限,其语法如下:
REVOKE ALL PRIVILEGES , GRANT OPTION
FROM 'user'@'host' [ , 'user'@'host' ... ]
REVOKE 语句必须和 FROM 语句一起使用,FROM 语句指明需要收回权限的账户。
另一种为长格式的 REVOKE 语句,基本语法如下:
REVOKE pri_type [ ( columns ) ] [ , pri_type [ ( columns ) ] ] ...ON [ object_type ] table1, table2, ... , tablen
FROM 'user'@'host' [ , 'user'@'host' ... ]
【例】使用 REVOKE 语句取消用户 zth 的更新插入权限。REVOKE 语句及其执行结果如下:
mysql> REVOKE INSERT ON *.* FROM 'zth'@'localhost';
Query OK, 0 rows affected (0.00 sec)
使用 SELECT 语句查询用户 zth 的权限:
mysql> SELECT Host, User, Select_priv , Insert_priv, Grant_priv FROM mysql.user where user='zth';
+-----------+------+-------------+-------------+------------+
| Host | User | Select_priv | Insert_priv | Grant_priv |
+-----------+------+-------------+-------------+------------+
| localhost | zth | Y | N | Y |
+-----------+------+-------------+-------------+------------+
SHOW GRANTS 语句可以显示指定用户的权限信息。语法格式如下:
SHOH GRANTS FOR 'user'@'host';
user 表示登录用户的名称,host 表示登录的主机名称或者 IP 地址。在使用该语句时,指定的用户名和主机名都要用单引号括起来,并使用@符号将两个名字分隔开。
【例】使用 SHOW GRANTS 语句查询用户 zth 的权限信息。SHOW GRANTS 语句及其执行结果如下:
mysql> SHOW GRANTS FOR 'zth'@'localhost';
+------------------------------------------------------------+
| Grants for zth@localhost |
+------------------------------------------------------------+
| GRANT SELECT ON *.* TO 'zth'@'localhost' WITH GRANT OPTION |
+------------------------------------------------------------+
通过 SELECT 语句也可以查看 user 表中的各个权限字段以确定用户的权限信息,语法格式如下:
SELECT privileges_list FROM user WHERE user='username', host=' hostname';
privileges_list 想要直看的权限字段,可以为 Select_priv 、Insert_priv 等。【注】参考于清华大学出版社《MySQL数据库应用案例课堂》2016年1月第1版