http://blog.itpub.net/7607759/viewspace-675079/
2.2 授予权限
前面提到了grant命令,grant的语法看起来可是相当复杂的呐:
GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user [IDENTIFIED BY [PASSWORD] 'password']
[, user [IDENTIFIED BY [PASSWORD] 'password']] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
加粗的几个子项说明如下:
l object_type:
TABLE
| FUNCTION
| PROCEDURE
l priv_level:
*
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
l ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
l with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
- |
MAX_USER_CONNECTIONS count
priv_type最简单,但可选项最多,官方文档中专门列了个表很清晰:
权限类型 |
简要说明 |
ALL [PRIVILEGES] |
Grant all privileges at specified access level except GRANT OPTION |
ALTER |
Enable use of ALTER TABLE |
ALTER ROUTINE |
Enable stored routines to be altered or dropped |
CREATE |
Enable database and table creation |
CREATE ROUTINE |
Enable stored routine creation |
CREATE TEMPORARY TABLES |
Enable use of CREATE TEMPORARY TABLE |
CREATE USER |
Enable use of CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES |
CREATE VIEW |
Enable views to be created or altered |
DELETE |
Enable use of DELETE |
DROP |
Enable databases, tables, and views to be dropped |
EVENT |
Enable use of events for the Event Scheduler |
EXECUTE |
Enable the user to execute stored routines |
FILE |
Enable the user to cause the server to read or write files |
GRANT OPTION |
Enable privileges to be granted to or removed from other accounts |
INDEX |
Enable indexes to be created or dropped |
INSERT |
Enable use of INSERT |
LOCK TABLES |
Enable use of LOCK TABLES on tables for which you have the SELECT privilege |
PROCESS |
Enable the user to see all processes with SHOW PROCESSLIST |
REFERENCES |
Not implemented |
RELOAD |
Enable use of FLUSH operations |
REPLICATION CLIENT |
Enable the user to ask where master or slave servers are |
REPLICATION SLAVE |
Enable replication slaves to read binary log events from the master |
SELECT |
Enable use of SELECT |
SHOW DATABASES |
Enable SHOW DATABASES to show all databases |
SHOW VIEW |
Enable use of SHOW CREATE VIEW |
SHUTDOWN |
Enable use of mysqladmin shutdown |
SUPER |
Enable use of other adminstrative operations such as CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL, and mysqladmin debug command |
TRIGGER |
Enable triggers to be created or dropped |
UPDATE |
Enable use of UPDATE |
USAGE |
Synonym for “no privileges |
括弧,权限说明的英文语法很简单,俺偷个懒,就不译成中文的。
以上几段加一块基本上就是grant语句的语法,看起来呢是复杂了一点点,不过看不懂没关系,再说就算看懂了也不一定记的住,就像现在人人都知道要先感谢国家,但是人人也都明白不过说说而已(不过百万裸官在海外的亲戚们说这话时应该是真心的),关键还是得动真格的,得会用才行,三思争取后面多弄几个例子,让大家伙都搞明白这个事儿。
提示:
- 不使用grant语句,而通过insert,update方式修改字典表也是靠谱的!
重点说一下with_option的几个选项:
- GRANT OPTION:允许用户再将该权限授予其它用户;
- MAX_QUERIES_PER_HOUR:允许用户每小时执行的查询语句数量;
- MAX_UPDATES_PER_HOUR:允许用户每小时执行的更新语句数量;
- MAX_CONNECTIONS_PER_HOUR:允许用户每小时连接的次数;
- MAX_USER_CONNECTIONS:允许用户同时连接服务器的数量;
这块的内容一看就是给用户设限制使的,我个人认为意义不大,不过简单了解一下也是有必要的,万一哪天对某用户看着不爽,DBA心里应该明白,还是有法子限制该用户能够使用的资源的。
其它部分就先不多说了,何况这个事儿也不能说的太细,主要是太细的东西三思也不懂,不懂装懂这个事儿俺脸皮虽然已经很厚,但做这类事儿的时候表情总是不够自然,不过请童鞋们放心,俺一定会继续努力,争取早日成功复制那谁的成功,用俺的真诚蒙到别人,蒙到所有的人~~~
2.3 收回权限
要收回用户权限,与之对应的命令是revoke,它的语法从定义上分为两种:
- REVOKE priv_type [(column_list)] [, priv_type [(column_list)]] ... ON [object_type] priv_level FROM user [, user] ...
- REVOKE ALL PRIVILEGES, GRANT OPTION FROM user [, user] ...
前者用来处理指定的权限,后者去掉所有权限。Revoke语法的子句定义与grant中同名子句定义一模一样,这里不再复述。
如果想确定用户当前都拥有什么权限,可以使用show grants语句,例如,查看用户jss_grant@10.0.0.99都拥有哪些权限,执行语句如下:
mysql> show grants for jss_grant@10.0.0.99;
+------------------------------------------------------------------------------------------------------------------+
| Grants for jss_grant@10.0.0.99 |
+------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'jss_grant'@'10.0.0.99' IDENTIFIED BY PASSWORD '*284578888014774CC4EF4C5C292F694CEDBB5457' |
| GRANT SELECT ON `mysql`.`user` TO 'jss_grant'@'10.0.0.99' |
+------------------------------------------------------------------------------------------------------------------+
- 2 rows in set (0.00 sec)
从上述返回的结果可以看到,用户jss_grant@10.0.0.99拥有两个权限,查询mysql.user表的查询,以及登录MySQL数据库的权限。一般用户只要创建,就会拥有usage on *.*的权限,该权限无法通过revoke语句收回,切记切记。
尝试,收回jss_grant用户对mysql.user的select权限,操作如下:
mysql> revoke select on mysql.user from jss_grant@10.0.0.99;
- Query OK, 0 rows affected (0.00 sec)
2.4 删除用户
删除用户的语法非常简单:
- DROP USER user [, user] ...
从语法上看与ORACLE有一点点不同,这个我感觉还是有必要提一下,比如ORACLE中的删除用户(或其它对象比如表空间),如果该用户下有别的对象,那么默认删除操作会失败,ORACLE提示需要先清理一下该用户下的对象,如果强制删除的话呢,它提供了一个CASCADE子句,附加该子句后就不再提示,即使存在关联对象也将自动将其删除。
MySQL的删除用户语法中就不存在CASCADE的子句,为什么不存在呢,并不是MySQL对数据的保护不如ORACLE那么上心,而是由于最重要的一条与ORACLE不同的机制决定,MySQL数据库中的对象保存并不是依赖于用户,而是依赖于库(db),用户被删除没有任何关系,对象仍在,好好的保存在其所存储的数据库中,因此,MySQL数据库中的用户删了就删了,如果外部应用不使用该用户的话,那么我们可以认为该用户被删除无影响。即使发现真的删错了,该用户其实早就立志将一生奉献给镰刀斧头帮,并且作风过硬,对party和国家无限忠诚,party让咬谁就咬谁。想给它恢复身份的话也很简单,这不就是组织上一句话的事儿嘛,只要重新向mysql.user表重新插入记录(注册建档),并授予所需权限即可(授予官阶),至于底层数据的意见那是完全可以忽视的。
提示:
- DROP USER不会自动中止已连接的用户会话,也就是说被删的用户如果在删前已经连接上了服务器,并且没有尚未中断,那它此时还能继续执行一定的操作,只是,它的身份已经变成了黑户。
=======================================