注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

php开发lamp

《西安--木木》-经历丰富了生活。 架构师QQ群: 246695517

 
 
 

日志

 
 

MySQL 权限系统详解  

2013-05-30 02:43:16|  分类: mysql |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

一.权限系统概述
MySQL的权限信息主要存放在以下几个授权表中:mysql.User,mysql.db,mysql.Host,mysql.table_priv
和 mysql.columm_priv 。由于这些表的信息比较小,MySQL在启动时会将这些表信息LOAD到内存,所以才有我们每次手工
修改了权限相关的表之后,都需要执行“FLUSH PRIVILEGES”命令重新加载MySQL的权限信息 。

执行GRANT,REVOKE或者DROP USER命令来修改相关权限,则不需要手工执行FLUSH PRIVILEGES命令,因为通过
GRANT,REVOKE或者DROP USER命令所做的权限修改在修改系统表的同时也会更新内存结构中的权限信息。MySQL 5.0.2
还增加了 CREATE USER 命令,创建一个具有初始最低权限的用记。

1. 授权与回收权限
授权使用:GRANT 命令,回收权限使用 REVOKE 命令。还有一种比较暴力的方法是直接修改授权表。授权和回收权限时,
需要指定用户名和主机名,如果不指定主机名,MySQL 会认为是 'username'@'%' 的形式。

查询某个用户的所拥有的权限使用:show grants for 'username'@'hostname' 的形式,如:
mysql>SHOW GRANTS FOR 'root'@'127.0.0.1';
别一种获得用户权限信息的方法是直接查询授权表。
2.权限级别
权限是向下覆盖的,范围越来越少。

(1)Global Level
称为全局权限控制,作用于整个mysqld,所有权限信息保存在mysql.user 表中,优先级最高。会覆盖其他级别的权限。
授予权限时,执行GRANT命令的时候,用“*.*”来指定适用范围是Global Level 。

(2) Databae Level
其作用域是整个数据库的对像,它能覆盖比他更下层的Table,Column和Routine这三层的权限,可以通过两种方法
来授予:
使用"database.*" 的形式:
MySQL>GRANT DROP ON test.* TO 'root'@'localhost';

先使用 use 选择数据库,再使用 * 授权。实际上是当前的整个数据库。
MySQL>use test;
MySQL>GRANT ALTER ON * TO root@'localhost';

将授权和回收权限给多个用户时,用户之间使用逗号分隔:
MySQL>GRANT ALTER ON test.* TO root@'localhost',user@'192.168.1.1';
(3) Table Level
Table Level权限能覆盖Column Level和Routine Level的权限。作用范围是数据库指定的表。例如:
MySQL>GRANT DELETE,ALTER ON mydb.userinfo to 'root'@'%.unixvip.com';
Table Level 仅有ALTER,CREATE,DELETE,DROP,INDEX,INSERT,SELECT UPDATE八种权限。
(4)Column Level
Columm Level 针对列的权限,Column Level级别的权限仅有INSERT,SELECT和UPDATE这三种,它和Routine Level 的权限没有重合部分,和Routine Level不存要覆盖问题。Columm Level 授予权限和Table Level 差不多,需要用() 将列括起来:
MySQL> GRANT SELECT(id,value) ON test.t1 TO 'abc'@'%.unixvip.com';

注意:当某个用户在向某个表插入(INSERT)数据的时候,如果该用户在该表中某列上面没有INSERT权限,
则该列的数据将以默认值填充。
(5) Routine Level
Routine Level的权限主要只有EXECUTE和ALTER ROUTINE两种,主要针对的对象是procedure和function
这两种对象,在授予Routine Level权限的时候,需要指定数据库和相关对象,如:
MySQL>GRANT EXECUTE ON test.p1 to 'abc'@'localhost';

还且些其他的特殊选项:
(1)WITH GRANT OPTION
在语句加上该字段,表示可以将权限再授予其他用户。
(2)all 关键字表示全部权限,如:
MySQL> grant all on test.t1 to 'sailing';


  评论这张
 
阅读(155)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017