| 网站首页 | JAVA文章 | AppServers | Web开发 | 应用开发 | 资源下载 |
    想学好编程,外语很重要,最新的编程技术还是在国外  [enadd  2006年12月25日]        
设为首页 加入收藏 联系站长
您现在的位置: 编程笔记网 >> 数据库 >> mysql >> 使用实例 >> 文章正文
Mysql权限系统工作原理            【字体:
Mysql权限系统工作原理
作者:不详    文章来源:网络    点击数:    更新时间:2007-1-21
MySQL权限系统保证所有的用户可以严格地做他们假定被允许做的事情。当你连接一个MySQL服务器时, 你的身份由你从那连接的主机和你指定的用户名来决定,系统根据你的身份和你想做什么来授予权限。

MySQL在认定身份中考虑你的主机名和用户名字,是因为有很小的原因假定一个给定的用户在因特网上属于同一个人。例如,用户从whitehouse.gov连接的bill不必和从mosoft.com连接bill是同一个人。 MySQL通过允许你区分在不同的主机上碰巧有同样名字用户来处理它:你可以对从whitehouse.gov连接授与bill一个权限集,而为从microsoft.com的连接授予一个不同的权限集。

MySQL存取控制包含2个阶段:

阶段1:服务器检查你是否允许连接。
阶段2:假定你能连接,服务器检查你发出的每个请求。看你是否有足够的权限实施它。例如,如果你从数据库中一个表精选(select)行或从数据库抛弃一个表,服务器确定你对表有select权限或对数据库有drop权限。
服务器在存取控制的两个阶段使用在sql/Index.html'>mysql数据库中的user、db和host表,在这些授权表中字段如下:

表名称  user  db  host  
范围字段  Host  Host  Host  
User  Db  Db  
Password  User   
权限字段  Select_priv  Select_priv  Select_priv  
Insert_priv  Insert_priv  Insert_priv  
Update_priv  Update_priv  Update_priv  
Delete_priv  Delete_priv  Delete_priv  
Index_priv  Index_priv  Index_priv  
Alter_priv  Alter_priv  Alter_priv  
Create_priv  Create_priv  Create_priv  
Drop_priv  Drop_priv  Drop_priv  
Grant_priv  Grant_priv  Grant_priv  
Reload_priv    
Shutdown_priv    
Process_priv    
File_priv    

对存取控制的第二阶段(请求证实),如果请求涉及表,服务器可以另外参考tables_priv和columns_priv表。这些表的字段如下:

表名称 tables_priv  columns_priv  
范围字段  Host  Host  
Db  Db  
User  User  
Table_name  Table_name  
  Column_name  
权限字段  Table_priv  Column_priv  
Column_priv   
其他字段  Timestamp  Timestamp  
Grantor   

每个授权表包含范围字段和权限字段。

范围字段决定表中每个条目的范围,即,条目适用的上下文。例如, 一个user表条目的Host和User值为'thomas.loc.gov'和'bob'将被用于证实来自主机thomas.loc.gov的bob对服务器的连接。同样,一个db表条目的Host、User和Db字段的值是'thomas.loc.gov'、'bob'和'reports'将用在bob从主机联接thomas.loc.gov存取reports数据库的时候。 tables_priv和columns_priv表包含范围字段,指出每个条目适用的表或表/列的组合。

对于检查存取的用途,比较Host值是忽略大小写的。User、Password、Db和Table_name值是区分大小写的。Column_name值在MySQL3.22.12或以后版本是忽略大小写的。

权限字段指出由一个表条目授予的权限,即,可实施什么操作。服务器组合各种的授权表的信息形成一个用户权限的完整描述。为此使用的规则在6.8 存取控制, 阶段2:请求证实描述。

范围字段是字符串,如下所述;每个字段的缺省值是空字符串:

字段名  类型  
Host  CHAR(60)  
User  CHAR(16)  
Password  CHAR(16)  
Db  CHAR(64)  (tables_priv和columns_priv表为CHAR(60))

在user、db和host表中,所有权限字段被声明为ENUM('N','Y')--每一个都可有值'N'或'Y',并且缺省值是'N'.

在tables_priv和columns_priv表中,权限字段被声明为SET字段:

表名  字段名  可能的集合成员  
tables_priv  Table_priv  'Select', 'Insert', 'Update', 'Delete', 'Create', 'Drop', 'Grant', 'References', 'Index', 'Alter'  
tables_priv  Column_priv  'Select', 'Insert', 'Update', 'References'  
columns_priv  Column_priv  'Select', 'Insert', 'Update', 'References'  

简单地说,服务器使用这样的授权表:

user表范围字段决定是否允许或拒绝到来的连接。对于允许的连接,权限字段指出用户的全局(超级用户)权限。
db和host表一起使用:
db表范围字段决定用户能从哪个主机存取哪个数据库。权限字段决定允许哪个操作。
当你想要一个给定的db条目应用于若干主机时,host表作为db表的扩展被使用。例如,如果你想要一个用户能在你的网络从若干主机使用一个数据库,在用户的db表的Host条目设为空值,然后将那些主机的每一个移入host表。这个机制详细描述在6.8 存取控制, 阶段2:请求证实。
tables_priv和columns_priv表类似于db表,但是更精致:他们在表和列级应用而非在数据库级。
注意管理权限(reload, shutdown, 等等)仅在user表中被指定。这是因为管理性操作是服务器本身的操作并且不是特定数据库,因此没有理由在其他授权表中列出这样的权限。事实上,只需要请教user表来决定你是否执行一个管理操作。

file权限也仅在user表中指定。它不是管理性权限,但你读或谢在服务器主机上的文件的的能力独立于你正在存取的数据库

[1] [2] [3] [4] 下一页  

文章录入:enadd    责任编辑:enadd 
  • 上一篇文章:

  • 下一篇文章:
  • 发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
    最新热点 最新推荐 相关文章
  • MySQL数据的导出和导入工具:…

  • mysql授课大纲

  • mysql技巧总结

  • PPTP + MPPE + RADIUS + MyS…

  • 使用函数递归实现基于php和M…

  • 基于MySQL的高性能数据库应用…

  • Mysql日期和时间函数

  • 深圳讯天 mysql 服务器错误分…

  • 几分钟让你走进mysql的门

  • 针对 Apache 2.x 的 MySQL 用…

  •   网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)
    | 设为首页 | 加入收藏 | 联系站长 | 友情链接 | 版权申明 | 管理登录 |