涂抹MySQL--第5章 MySQL数据库中的权限体系 - 5.2权限授予与回收(2)

5.2.2 授予权限

用户管理的核心就是权限分配,MySQL数据库中授予权限有专用命令GRANT,它不仅能够授予权限,甚至还能创建用户(前面小节中演示过)。严谨些描述,它能在创建用户的同时授予权限,看起来授权操作倒像是顺带的功能一样。

GRANT命令的语法看起来可是相当复杂的呐:

GRANT

    priv_type [(column_list)]

      [, priv_type [(column_list)]] ...

    ON [object_type] priv_level

    TO user [IDENTIFIED BY [PASSWORD] 'password'] ...

    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]

    [WITH with_option ...]

除了priv_type,其它几个加粗的几个子项详细语法如下:

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选项,放心我没忘,最重要的priv_type需要放在最显著的地方解说,它看起来最简单,但可选项也最多,用于指定可授予(或收回)的权限类型,对此官方文档中,针对可授予的权限,专门列了个表罗列的很清晰:

权限类型

简要说明

ALL [PRIVILEGES]

授予除 GRANT OPTION 外的所有权限

ALTER

允许执行ALTER TABLE操作

ALTER ROUTINE

允许修改或删除存储过程和函数

CREATE

允许创建数据库和创建表对象

CREATE ROUTINE

允许创建存储过程和函数

CREATE TABLESPACE

允许创建/修改或删除表空间及日志文件组

CREATE TEMPORARY TABLES

允许执行CREATE TEMPORARY TABLE语句创建临时表

CREATE USER

允许执行CREATE USER, DROP USER, RENAME USER, and REVOKE ALL PRIVILEGES语句

CREATE VIEW

允许创建/修改视图

DELETE

允许执行DELETE语句

DROP

允许删除数据库/表或视图

EVENT

允许使用Event对象

EXECUTE

允许用户执行存储程序

FILE

允许用户读写文件

GRANT OPTION

允许将授予的权限再由该用户授予其它用户

INDEX

允许创建/删除索引

INSERT

允许执行INSERT语句

LOCK TABLES

允许对拥有SELECT权限的表对象执行LOCK TABLES

PROCESS

允许用户执行SHOW PROCESSLIST命令查看当前所有连接

PROXY

允许使用PROXY

REFERENCES

尚未应用

RELOAD

允许执行FLUSH操作

REPLICATION CLIENT

允许用户连接复制环境中的Master/Slave

REPLICATION SLAVE

允许复制环境的slave端从master端读取数据

SELECT

允许执行SELECT语句

SHOW DATABASES

允许执行SHOW DATABASES语句显示所有数据库

SHOW VIEW

允许执行SHOW CREATE VIEW查看视图定义

SHUTDOWN

允许通过mysqladmin命令关闭数据库

SUPER

允许执行管理操作,比如CHANGE MASTER TO, KILL, PURGE BINARY LOGS, SET GLOBAL等语句

TRIGGER

允许创建或删除触发器

UPDATE

允许执行UPDATE操作

USAGE

意指没有权限(no privileges)

表5-2 MySQL用户权限

这个表罗列了所有可授予给用户的权限,不管针对什么用户,授予哪个对象,什么粒度的权限,都是从上面列表中的关键字中选择。

 

以上几段加一块基本上就是grant语句的语法,看起来呢是复杂了一点点,不过不懂也没关系,再说就算懂了也不一定记的住,就算记住了也不一定真能理解它在说什么,就像现在人人都知道要先感谢国家,你懂的,人人都明白那不过就是说说(不过海外各种二代及二代亲戚们说这话时应该是真心的),关键时刻得动真格的,得会用才行,三思争取后面多弄几个例子,让大家伙都搞明白这个事儿。

下面先举个最简单的例子帮助大家理解,我们要授予jss_grant@'192.168.30.203'用户查询mysql.user表的权限,执行语句如下:

(system@localhost) [(none)]> grant select on mysql.user to jss_grant@'192.168.30.203';

Query OK, 0 rows affected (0.00 sec)

其中"select"对应的就是priv_type中的权限,"mysql.user"对应priv_level中的db_name.tbl_name,这是一个最简单的示例,当然啦,不使用grant语句,而通过insert,update方式修改字典表也是靠谱的!

话说MySQL数据库中有些权限的设计也很有意思,值得说道几句。

首先是关于CREATE /DROP这类权限,这是个很有意思的设定,拿CREATE权限来说,如果一个用户拥有了建库的权限,那么它也一定能创建表(但不能创建视图),此处的粒度设计没有那么细,MySQL数据库并没有将建库和建表设计成两种权限,而是合二为一。DROP权限也是类似的设计,不过与CREATE权限有所不同的是,DROP权限也能删除视图对象。其实其它数据库中也有类似的设定,比如对于Oracle数据库环境,某个用户拥有创建对象的权限的话,那么它就一定拥有删除这个对象的权限。在Oracle看来,能创建就应该能删除,这两者是一体的,无法单独剥离。就我个人看来,Oracle的设定明显更为老道,而且符合逻辑,MySQL在这方面的设计还是显的规划有些不够清晰。

其次关于ALL [PRIVILEGES]和GRANT OPTION两种权限,这是两种比较特殊的权限,甚至在授予或收回这两类权限时都不能与其它权限同时操作,并且这两个权限并不像它们名字显示的那样是"全部"的权限,后面的示例中会演示这一点。

最后关于USAGE权限,按照上表的描述中所示,这个权限的功能就是"没有权限",但其实它不是完全没有权限,至少它还有一项权限,就是"登录权限",对于使用CREATE USER语句创建的用户,该用户默认就会拥有USAGE权限,但是,又的确像描述中所说的那样,这个用户除了能够登录数据库,别的什么也做不了,因此就像是"没有权限"。

另外,还得再简要说一下with_option的几个选项:

l GRANT OPTION:允许用户再将该权限授予其它用户;

l MAX_QUERIES_PER_HOUR:允许用户每小时执行的查询语句数量;

l MAX_UPDATES_PER_HOUR:允许用户每小时执行的更新语句数量;

l MAX_CONNECTIONS_PER_HOUR:允许用户每小时连接的次数;

l MAX_USER_CONNECTIONS:允许用户同时连接服务器的数量;

这块的内容一看就是给用户设限制使的,我个人认为意义不大,不是说没有这类需求,而是这些选项的粒度仍然不够细致,不易碰到适合的应用场景,不过简单了解一下也是有必要的,万一哪天对某用户看着不爽,Dbaer心里应该明白,还是有法子限制该用户能够使用的资源的。

其它部分就先不多说了,何况这个事儿也不能说的太细,主要是太细的东西三思也不懂,不懂装懂这个事儿俺脸皮虽然已经很厚,但做这类事儿的时候表情总是不够自然,不过请童鞋们放心,俺一定会继续努力,争取早日复制粘贴那谁的成功,用俺的真诚蒙到别人,蒙到所有的人~~~

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/7607759/viewspace-1199559/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/7607759/viewspace-1199559/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值