一般都知道MySQL创建用户和赋权限是用

  1. GRANT ... ON *.* TO 'myname'@'%.mydomain.com' IDENTIFIED BY 'mypass'
  2.  
  3. GRANT ... ON mydatabase.* TO 'myname'@'%.mydomain.com' IDENTIFIED BY 'mypass'

撤销权限是用

  1. REVOKE ... FROM 'myname'

今天遇到一个情况,数据库games,只允许用户myname对players表的id和name这两个字段有SELECT权限,在查阅了MySQL的参考手册后,发现GRANT和REVOKE命令是可以针对不同字段来设置权限的,完整的命令应该是:

  1. GRANT priv_type [(column_list)] [, priv_type [(column_list)]] ... 
  2.     ON [object_type] {tbl_name | * | *.* | db_name.*} 
  3.     TO user [IDENTIFIED BY [PASSWORD'password'
  4.         [, user [IDENTIFIED BY [PASSWORD'password']] ... 
  5.     [REQUIRE 
  6.         NONE | 
  7.         [{SSL| X509}] 
  8.         [CIPHER 'cipher' [AND]] 
  9.         [ISSUER 'issuer' [AND]] 
  10.         [SUBJECT 'subject']] 
  11.     [WITH with_option [with_option] ...] 
  12.  
  13. object_type = 
  14.     TABLE 
  15.   | FUNCTION 
  16.   | PROCEDURE 
  17.  
  18. with_option = 
  19.     GRANT OPTION 
  20.   | MAX_QUERIES_PER_HOUR count 
  21.   | MAX_UPDATES_PER_HOUR count 
  22.   | MAX_CONNECTIONS_PER_HOUR count 
  23.   | MAX_USER_CONNECTIONS count 
  24.  
  25. REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... 
  26.     ON [object_type] {tbl_name | * | *.* | db_name.*} 
  27.     FROM user [, user] ... 
  28.  
  29. REVOKE ALL PRIVILEGESGRANT OPTION FROM user [, user] ... 

我的情况赋权限应该是:

  1. GRANT SELECT (id, nameON games.players TO 'myname'@'%.mydomain.com';
  2. FLUSH PRIVILEGES;

参考文档:

http://dev.mysql.com/doc/refman/5.1/zh/sql-syntax.html#drop-user