MySql用户权限配置管理--查看,赋予,回收(GRANT,REVOKE)_MySQL, Oracle及数据库讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  MySQL, Oracle及数据库讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 2013 | 回复: 0   主题: MySql用户权限配置管理--查看,赋予,回收(GRANT,REVOKE)        下一篇 
liandong
注册用户
等级:新兵
经验:51
发帖:61
精华:0
注册:2011-11-14
状态:离线
发送短消息息给liandong 加好友    发送短消息息给liandong 发消息
发表于: IP:您无权察看 2014-12-16 10:51:05 | [全部帖] [楼主帖] 楼主

    MySql用户管理使用CREATE USER,DROP USER,RENAME USER,SET PASSWORD等语法来完成,而MySql中用户权限配置管理中大部分都可以使用GRANT(赋予权限)和REVOKE(撤销权限)这两个语法来操作。其中,需要注意的是GRANT语句来赋予权限时,当被赋予权限的用户在系统中不存在时,会创建该用户,而后对该用户进行权限赋予。而REVOKE语句用来权限回收(撤销权限)时,即使被操作的用户所有的权限都被回收,但该用户并不会删除,要删除用户,请使用DROP USER或者直接到mysql.user中删除该用户。

  GRANT语法:

GRANT
priv_type [(column_list)]
[, priv_type [(column_list)]] ...
ON [object_type] priv_level
TO user_specification [, user_specification] ...
[REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
[WITH with_option ...]
object_type:
TABLE
| FUNCTION
| PROCEDURE
priv_level:
| *.*
| db_name.*
| db_name.tbl_name
| tbl_name
| db_name.routine_name
user_specification:
user [IDENTIFIED BY [PASSWORD] 'password']
ssl_option:
SSL
| X509
| CIPHER 'cipher'
| ISSUER 'issuer'
| SUBJECT 'subject'
with_option:
GRANT OPTION
| MAX_QUERIES_PER_HOUR count
| MAX_UPDATES_PER_HOUR count
| MAX_CONNECTIONS_PER_HOUR count
| MAX_USER_CONNECTIONS count


  看起来有点复杂,对吧,这是标准的帮助文档,我们简而言之,一般语法格式是这样的:

-- GRANT基本的权限赋予语法
GRANT 权限类型1 [(要赋予的对象,列列表)][, 权限类型2[(要赋予的对象,列列表)]]... ON [对象类型] 权限级别 TO 用户1 IDENTIFIED BY '密码' [, 用户2 IDENTIFIED BY '密码' ]...
-- 中括号内的可以忽略。
这样是不是清楚很多,其中GRANT能够赋予的权限类型有以下这些(Tips:注意ALL PRIVILEGES):

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


允许授予权限
来栗子才能吃饱,没例子,没真相,下面我们使用几个简单的GRANT语句来为特定用户赋予权限:

===================================================
; blog.useasp.net
; Mitchell Chu


; MySql用户权限配置管理
; GRANT 语法示例
; 下面语法并不是一起的,每个示例为单独说明某一问题而存在

===================================================
-- 1.赋予someuser@somehost这个用户全局所有权限
-- 如果用户不存在,创建该用户,但该用户没有密码
-- 所以这样使用需要特别慎重
GRANT ALL ON *.* TO 'someuser'@'somehost';
-- 2.赋予someuser@somehost这个用户在myDatabase上所有权限
-- 如果用户不存在,创建该用户,但该用户没有密码
-- 所以这样使用需要特别慎重
GRANT ALL ON myDatabase.* TO 'someuser'@'somehost';
-- 3.赋予someuser@somehost这个用户在myDatabase上的所有权限
-- 如果用户不存在,则创建用户,密码为:somepassword
GRANT ALL ON myDatabasse.* TO 'someuser'@'somehost' IDENTIFIED BY 'somepassword';
-- 4. 赋予someuser@somehost这个用户在myDatabase上的权限
-- 该用户仅有SELECT和INSERT权限
GRANT SELECT, INSERT ON myDatabase.* TO 'someuser'@'somehost';
-- 5. 赋予someuser@somehost这个用户在myDatabase上myTbl表的权限
-- 该用户仅有myDatabase。myTbl上的SELECT和INSERT权限
GRANT SELECT, INSERT ON myDatabase.myTbl TO 'someuser'@'somehost';
-- 6. 赋予someuser@somehost这个用户在myDatabase上myTbl表的权限
-- 该用户仅有myDatabase.myTbl上某些列上有权限:
-- myTbl的colName1有SELECT和INSERT权限
-- myTbl的colName2只有INSERT权限
GRANT SELECT (colName1), INSERT(ColName1,ColName2) ON myDatabase.myTbl TO 'someuser'@'somehost';


怎么样,权限粒度可大可小吧,大至全局,小至单列,设置运用都能自如,很有成就感吧?不过需要注意,权限设置完毕之后,如果要马上生效,记得FLUSH PRIVILEGES一下哦。

REVOKE 作为权限撤消语句,和GRANT语句匹配,自然使用的权限列表和GRANT要一样。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常用的语法格式就好了,当然,这只是为了快速理解语法,如果在实际使用中,碰到实际问题,建议还是要深读官方晦涩的标准文档的:

REVOKE 权限类型1[(回收权限的列对象列表)], 权限类型2[(要回收权限的列对象列表)]... ON [对象类型] 权限级别 FROM 要回收权限的用户1 [,要回收权限的用户2]..
REVOKE直接回收FROM后面的用户的权限,要咋回收,就要靠ON指定回收区域,而后REVOKE在根据要回收的权限类型,在这个区域进行回收用户的权限。如果你要回收某用户的所有权限,那么可以简单的使用下面这样的语句:

REVOKE ALL PRIVILEGES, GRANT OPTION FROM 要回收权限的用户
 为什么要ALL PRIVILEGES之后还要GRANT OPTION? —— 请参见前面的权限列表哦。

好了,来几个例子享受下:

===================================================
; blog.useasp.net
; Mitchell Chu


; MySql用户权限配置管理
; REVOKE 语法示例
; 下面语法并不是一起的,每个示例为单独说明某一问题而存在

===================================================
-- 1.回收someuser@somehost这个用户所有权限
-- 注意: REVOKE并不会删除用户,即使权限被你扒光
-- 另外:如果你没有指定@后面的host,默认是使用%
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'someuser'@'somehost';
-- 2.回收someuser@somehost这个用户在myDatabase上的DROP权限
REVOKE DROP ON myDatabase.* FROM 'someuser'@'somehost';
-- 3.更多示例 —— 没有更多了
-- 请参见GRANT中的信息,自己自由组合:D


 记住:在回收完用户权限之后,如果是要删除用户,还需要DROP USER或者到mysql.user中DELETE 一下,不然用户还存在的。要立即生效,也要记得FLUSH PRIVILEGES哦。为什么要使用FLUSH PRIVILEGES?这个是告诉系统,我们已经更改了权限,请你清除缓存,重新到用户权限表中获取新的权限的意思。

说了上面这么一些,有人就要问了,我该怎么知道现在某个用户有什么权限呢?Good question!这个问题也困扰了菜鸟级的我,后来才发现,应该使用的是SHOW GRANTS语句,语法如下:

SHOW GRANTS FOR user;


user就是你要查看权限的用户,如果你不使用@host的方式,默认host是%。如果要查看当前登录用户的权限你就可以使用下面这些语句中的任意一个了:

SHOW GRANTS;
SHOW GRANTS FOR CURRENT_USER;
SHOW GRANTS FOR CURRENT_USER();


 而如果你是要查看当前系统下,所有用户的权限分配情况,怎么处理呢?可以试试下面的语句:

===================================================
; blog.useasp.net
; Mitchell Chu


; MySql用户权限配置管理
; SHOW GRANTS 语法示例
; 下面语法并不是一起的,每个示例为单独说明某一问题而存在

===================================================
-- 如果是Linux下,可参照下面的语句,也可参照Windows下的写法,带上其他参数.
mysql -Bse "SELECT DISTINCT CONCAT('SHOW GRANTS FOR \'', user ,'\'@\'', host, '\';') FROM mysql.user" | mysql -Bs | sed 's/$/;/g'
-- Windows下,用下面的方法试试咯,没有sed嘛
mysql -Bse "SELECT DISTINCT CONCAT('SHOW GRANTS FOR \'', user, '\'@\'', host, '\';') FROM mysql.user" -uroot -p |mysql -Bs -uroot -p


 怎么样,所有的用户权限都出来了吧。

--转自 北京联动北方科技有限公司




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论