MySQL GRANT及REVOKE语法

2013-03-14_085405

这是MySQL 5实力养成暨评量里的3-85.下列哪些项目属于GRANT指令可以设定的权限值?

[adsense][/adsense]

答案:(A)CREATE (B)DROP (C) INSERT (D)DELETE

读者可以参考MySQL 5.6 Reference Manual :: 13 SQL Statement Syntax :: 13.7 Database Administration Statements :: 13.7.1 Account Management Statements :: 13.7.1.4 GRANT Syntax

或简体中文手册 MySQL 5.1参考手册 :: 13. SQL语句语法::13.5. 数据库管理语句::13.5.1. 账户管理语句::13.5.1.3. GRANT和REVOKE语法这里,ㄚ琪转译成繁体中文略述于下:

GRANT priv_type [( column_list )] [, priv_type [( column_list )]] ...
    ON [ object_type ] { tbl_name | * | *.* | db_name .*}
    TO user [IDENTIFIED BY [PASSWORD] ' password ']
        [, user [IDENTIFIED BY [PASSWORD] ' password ']] ...
    [REQUIRE
        NONE |
        [{SSL| X509}]
        [CIPHER ' cipher ' [AND]]
        [ISSUER ' issuer ' [AND]]
        [SUBJECT ' subject ']]
    [WITH with_option [ with_option ] ...]

object_type =
    TABLE
  | FUNCTION
  | PROCEDURE

with_option =
    GRANT OPTION
  | MAX_QUERIES_PER_HOUR count
  | MAX_UPDATES_PER_HOUR count
  | MAX_CONNECTIONS_PER_HOUR count
  | MAX_USER_CONNECTIONS count
REVOKE priv_type [( column_list )] [, priv_type [( column_list )]] ...
    ON [ object_type ] { tbl_name | * | *.* | db_name .*}
    FROM user [, user ] ...

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

GRANTREVOKE语法允许系统管理员增加MySQL用户帐户,授予权限和撤销权限。

MySQL帐户资讯存储在mysql资料库的资料表中。第5章:数据库管理中对本资料库和访问控制系统进行了详尽的讨论。要了解更多详细信息,您应该查询此章。

如果授权表拥有含有mixed-case资料库或资料表名称的权限记录,并且lower_case_table_names系统变数已设置,则不能使用REVOKE撤销权限,必须直接操纵授权表。(当lower_case_table_names已设置时,GRANT将不会创建此类记录,但是此类记录可能已经在设置变数之前被创建了。)

授予的权限可以分为多个层级:

·          全域等级

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

·          资料库等级

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

·          资料表等级

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

·          栏位等级

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

·          子程序等级

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

当后续目标是一个资料表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLEFUNCTIONPROCEDURE当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权资料表。请参见2.10.2节,“升级授权表”

要使用GRANTREVOKE,您必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。

要撤销所有权限,需使用以下语法。此语法用于取消对于已命名的用户的所有全域等级、资料库等级、资料表等级和栏位等级的权限。

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

要使用本REVOKE语法,您必须拥有mysql资料库的全域CREATE USER权限或UPDATE权限。

对于GRANTREVOKE语句,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 USERREVOKE ALL PRIVILEGES
CREATE VIEW 允许使用CREATE VIEW
DELETE 允许使用DELETE
DROP 允许使用DROP TABLE
EXECUTE 允许用户执行已存储的子程序
FILE 允许使用SELECT…INTO OUTFILELOAD DATA INFILE
INDEX 允许使用CREATE INDEXDROP INDEX
INSERT 允许使用INSERT
LOCK TABLES 允许对您拥有SELECT权限的表使用LOCK TABLES
PROCESS 允许使用SHOW FULL PROCESSLIST
REFERENCES 未被实施
RELOAD 允许使用FLUSH
REPLICATION CLIENT 允许用户询问从属伺服器或主伺服器的地址
REPLICATION SLAVE 用于复制从属伺服器(从主服务器中读取二进制日志事件)
SELECT 允许使用SELECT
SHOW DATABASES SHOW DATABASES显示所有资料库
SHOW VIEW 允许使用SHOW CREATE VIEW
SHUTDOWN 允许使用mysqladmin shutdown
SUPER 允许使用CHANGE MASTER, KILL, PURGE MASTER LOGSSET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections
UPDATE 允许使用UPDATE
USAGE “无权限”的同义词
GRANT OPTION 允许授予权限 

另外如果人客觉得有点复杂,倒是可以先读读深入浅出SQL的第十二章 安全性 保护你的资产这一章,这一章会说明CREATE USER、GRANT、REVOKE、WITH GRANT OPTION、ROLE、WITH ADMIN OPTION等语法,很便利~