这是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 ] ...
GRANT和REVOKE语法允许系统管理员增加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.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资料表中。
当后续目标是一个资料表、一个已存储的函数或一个已存储的过程时,object_type子句应被指定为TABLE、FUNCTION或PROCEDURE。当从旧版本的MySQL升级时,要使用本子句,您必须升级您的授权资料表。请参见2.10.2节,“升级授权表”。
要使用GRANT或REVOKE,您必须拥有GRANT OPTION权限,并且您必须用于您正在授予或撤销的权限。
要撤销所有权限,需使用以下语法。此语法用于取消对于已命名的用户的所有全域等级、资料库等级、资料表等级和栏位等级的权限。
REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user ] ...
要使用本REVOKE语法,您必须拥有mysql资料库的全域CREATE USER权限或UPDATE权限。
对于GRANT和REVOKE语句,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 USER和REVOKE ALL PRIVILEGES。 |
| CREATE VIEW | 允许使用CREATE VIEW |
| DELETE | 允许使用DELETE |
| DROP | 允许使用DROP TABLE |
| EXECUTE | 允许用户执行已存储的子程序 |
| FILE | 允许使用SELECT…INTO OUTFILE和LOAD DATA INFILE |
| INDEX | 允许使用CREATE INDEX和DROP 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 LOGS和SET GLOBAL语句,mysqladmin debug命令;允许您连接(一次),即使已达到max_connections。 |
| UPDATE | 允许使用UPDATE |
| USAGE | “无权限”的同义词 |
| GRANT OPTION | 允许授予权限 |
另外如果人客觉得有点复杂,倒是可以先读读深入浅出SQL的第十二章 安全性 保护你的资产这一章,这一章会说明CREATE USER、GRANT、REVOKE、WITH GRANT OPTION、ROLE、WITH ADMIN OPTION等语法,很便利~

2 則留言
Comments are closed.