日期:2014-05-16 浏览次数:20934 次
GRANT
和REVOKE
句法GRANT priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} TO user_name [IDENTIFIED BY 'password'] [, user_name [IDENTIFIED BY 'password'] ...] [WITH GRANT OPTION] REVOKE priv_type [(column_list)] [, priv_type [(column_list)] ...] ON {tbl_name | * | *.* | db_name.*} FROM user_name [, user_name ...]
GRANT
在MySQL
3.22.11或以后版本中实现。对于更早MySQL版本,GRANT
语句不做任何事情。
GRANT
和REVOKE
命令允许系统主管在4个权限级别上授权和撤回赋予MySQL用户的权利:
mysql.user
表中。
mysql.db
和mysql.host
表中。
mysql.tables_priv
表中。
mysql.columns_priv
表中。 对于GRANT
如何工作的例子,见6.11 为MySQL增加新的用户权限。
对于GRANT
和REVOKE
语句,priv_type
可以指定下列的任何一个:
ALL PRIVILEGES FILE RELOAD ALTER INDEX SELECT CREATE INSERT SHUTDOWN DELETE PROCESS UPDATE DROP REFERENCES USAGE
ALL
是ALL
PRIVILEGES
的一个同义词,REFERENCES
还没被实现,USAGE
当前是“没有权限”的一个同义词。它能用在你想要创建一个没有权限用户的时候。
为了从一个用户撤回grant的权限,使用GRANT
OPTION
的一个priv_type
值:
REVOKE GRANT OPTION ON ... FROM ...;
对于表,你能指定的唯一priv_type
值是SELECT
、INSERT
、UPDATE
、DELETE
、CREATE
、DROP
、GRANT
、INDEX
和ALTER
。
对于列,你能指定的唯一priv_type
值是(即,当你使用一个column_list
子句时)是SELECT
、INSERT
和UPDATE
。
你能通过使用ON *.*
语法设置全局权限,你能通过使用ON
db_name.*
语法设置数据库权限。如果你指定ON
*
并且你有一个当前数据库,你将为该数据库设置权限。(警告:如果你指定ON
*
而你没有一个当前数据库,你将影响全局权限!)
为了容纳对任意主机的用户授予的权利,MySQL支持以user@host
格式指定user_name
值。如果你想要指定一个特殊字符的一个user
字符串(例如“-”),或一个包含特殊字符或通配符的host
字符串(例如“%”),你可以用括号括起能用户或主机名字
(例如,'test-user'@'test-hostname'
)。
你能在主机名中指定通配符。例如,user@"%.loc.gov"
适用于在loc.gov
域中任何主机的user
,并且user@"144.155.166.%"
适用于在144.155.166
类
C 子网中任何主机的user
。
简单形式的user
是user@"%"
的一个同义词。注意:如果你允许匿名用户连接MySQL服务器(它是缺省的),你也应该增加所有本地用户如user@localhost
,因为否则,当用户试图从本地机器上登录到MySQL服务器时,对于mysql.user
表中的本地主机的匿名用户条目将被使用!匿名用户通过插入有User=''
的条目到mysql.user
表中来定义。通过执行这个查询,你可以检验它是否作用于你:
mysql> SELECT Host,User FROM mysql.user WHERE User='';
目前,GRANT
仅支持最长60个字符的主机、表、数据库和列名。一个用户名字能最多到16个字符。
对与一个表或列的权限是由4个权限级别的逻辑或形成的。例如,如果mysql.user
表指定一个用户有一个全局select权限,它不能被数据库、表或列的一个条目否认。
对于一个列的权限能如下计算:
global privileges OR (database privileges AND host privileges) OR table privileges OR column privileges
在大多数情况下,你只授予用户一个权限级别上的权限,因此现实通常不象上面所说的那样复杂。:) 权限检查过程的细节在6 MySQL 存取权限系统中给出。
如果你为一个在mysql.user
表中不存在的用户/主机名组合授权,一个条目被增加并且保留直到用一个DELETE
命令删除。换句话说,GRANT
可以创建user
表的条目,但是REVOKE
将不删除;你必须明确地使用DELETE
删除.
在MySQL
3.22.12或以后,如果创建一个新用户或如果你有全局授予权限,用户的口令将被设置为由IDENTIFIED
BY
子句指定的口令,如果给出一个。如果用户已经有了一个口令,它被一个