仓酷云

标题: PHP网站制作之Mysql权限体系任务道理 [打印本页]

作者: 活着的死人    时间: 2015-2-4 00:21
标题: PHP网站制作之Mysql权限体系任务道理
熟悉HTML/CSS/JS等网页基本元素,完成阶段可自行制作完整的网页,对元素属性达到熟悉程度mysql   权限体系任务道理
MySQL权限体系包管一切的用户可以严厉地做他们假定被答应做的工作。当你毗连一个MySQL办事器时, 你的身份由你从那毗连的主机和你指定的用户名来决意,体系依据你的身份和你想做甚么来授与权限。

MySQL在认定身份中思索你的主机名和用户名字,是由于有很小的缘由假定一个给定的用户在因特网上属于统一团体。例如,用户从whitehouse.gov毗连的bill不用和从mosoft.com毗连bill是统一团体。 MySQL经由过程答应你辨别在分歧的主机上可巧有一样名字用户来处置它:你可以对从whitehouse.gov毗连授予bill一个权限集,而为从microsoft.com的毗连授与一个分歧的权限集。

MySQL存取掌握包括2个阶段:

阶段1:办事器反省你是不是答应毗连。
阶段2:假定你能毗连,办事器反省你收回的每一个恳求。看你是不是有足够的权限实行它。例如,假如你从数据库中一个表精选(select)行或从数据库丢弃一个表,办事器肯定你对表有select权限或对数据库有drop权限。
办事器在存取掌握的两个阶段利用在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表中指定。它不是办理性权限,但你读或谢在办事器主机上的文件的的才能自力于你正在存取的数据库。

当mysqld办事器启动时,读取一次受权表内容。对受权表的更改失效在6.9 权限更改什么时候失效描写。

当你修正受权表的内容时,确保你按你想要的体例更改权限设置是一个好主张。为匡助诊断成绩,见6.13 “存取回绝引发”毛病的缘由。关于平安成绩上的忠言,见6.14 怎样对使MySQL平安匹敌解密高手。

一个有效的诊断东西是mysqlaccess剧本,由Carlier Yves 供应给MySQL分发。利用--help选项挪用mysqlaccess查明它如何任务。注重:mysqlaccess仅用user、db和host表仅反省存取。它不反省表或列级权限。

6.7 存取掌握, 阶段1:毗连证明
当你试图联接一个MySQL办事器时,办事器基于你的身份和你是不是能经由过程供给准确的口令验证身份来承受或回绝毗连。假如不是,办事器完整具结你的存取,不然,办事器承受毗连,然落后入阶段2而且守候恳求。

你的身份基于2个信息:

你从谁人主机毗连
你的MySQL用户名
身份反省利用3个user表(Host, User和Password)局限字段履行。办事器只要在一个user表条目婚配你的主机名和用户名而且你供应了准确的口令时才承受毗连。

在user表局限字段可以以下被指定:

一个Host值可所以主机名或一个IP数字,或'localhost'指出当地主机。
你可以在Host字段里利用通配符字符“%”和“_”。
一个Host值'%'婚配任何主机名,一个空白Host值等价于'%'。注重这些值婚配能创立一个毗连到你的办事器的任何主机!
通配符字符在User字段中不答应,然而你能指定空白的值,它婚配任何名字。假如user表婚配到来的毗连的条目有一个空白的用户名,用户被以为是匿名用户(没着名字的用户),而非客户实践指定的名字。这意味着一个空白的用户名被用于在毗连时代的进一步的存取反省(即,在阶段2时代)。
Password字段可所以空白的。这不料味着婚配任何口令,它意味着用户必需不指定一个口令停止毗连。
非空白Password值代表加密的口令。 MySQL不以任何人可以看的纯文本格局存储口令,相反,正在试图联接的一个用户供应的口令被加密(利用PASSWORD()函数),而且与存储了user表中的已加密的版本对照。假如他们婚配,口令是准确的。

上面的例子显示出各类user表中Host和User条目标值的组合若何使用于到来的毗连:

Host 值  User 值  被条目婚配的毗连  
'thomas.loc.gov'  'fred'  fred, 从thomas.loc.gov 毗连
'thomas.loc.gov'  ''  任何用户, 从thomas.loc.gov毗连  
'%'  'fred'  fred, 从任何主机毗连
'%'  ''  任何用户, 从任何主机毗连
'%.loc.gov'  'fred'  fred, 从在loc.gov域的任何主机毗连
'x.y.%'  'fred'  fred, 从x.y.net、x.y.com,x.y.edu等联接。(这也许无用)
'144.155.166.177'  'fred'  fred, 从有144.155.166.177 IP 地址的主机毗连
'144.155.166.%'  'fred'  fred, 从144.155.166 C类子网的任何主机毗连

既然你能在Host字段利用IP通配符值(例如,'144.155.166.%'婚配在一个子网上的每台主机),有能够或人能够妄图探求这类才能,经由过程定名一台主机为144.155.166.somewhere.com。为了禁止如许的妄图,MySQL不答应婚配以数字和一个点肇端的主机名,如许,假如你用一个定名为相似1.2.foo.com的主机,它的名字决不会婚配受权表中Host列。只要一个IP数字能婚配IP通配符值。

一个到来的毗连可以被在user表中的超越一个条目婚配。例如,一个由fred从thomas.loc.gov的毗连婚配多个条目如上所述。假如超越一个婚配,办事器怎样选择利用哪一个条目呢?办事器在启动时读入user表后经由过程排序来处理这个成绩,然后当一个用户试图毗连时,以排序的按次阅读条目,第一个婚配的条目被利用。

user表排序任务以下,假定user表看起来像如许:

+-----------+----------+-
| Host      | User     | ...
+-----------+----------+-
| %         | root     | ...
| %         | jeffrey  | ...
| localhost | root     | ...
| localhost |          | ...
+-----------+----------+-

当办事器在表中读取时,它以最特定的Host值为先的次第分列('%'在Host列里意味着“任何主机”而且是最不特定的)。有不异Host值的条目以最特定的User值为先的次第分列(一个空白User值意味着“任何用户”而且是最不特定的)。终究排序的user表看起来像如许:

+-----------+----------+-
| Host      | User     | ...
+-----------+----------+-
| localhost | root     | ...
| localhost |          | ...
| %         | jeffrey  | ...
| %         | root     | ...
+-----------+----------+-

当一个毗连被测验考试时,办事器阅读排序的条目并利用找到的第一个婚配。关于由jeffrey从localhost的一个毗连,在Host列的'localhost'条目起首婚配。那些有空白用户名的条目婚配毗连的主机名和用户名。('%'/'jeffrey'条目也将婚配,然而它不是在表中的第一婚配。)

这是别的一个例子。假定user桌子看起来像如许:

+----------------+----------+-
| Host           | User     | ...
+----------------+----------+-
| %              | jeffrey  | ...
| thomas.loc.gov |          | ...
+----------------+----------+-

排序后的表看起来像如许:

+----------------+----------+-
| Host           | User     | ...
+----------------+----------+-
| thomas.loc.gov |          | ...
| %              | jeffrey  | ...
+----------------+----------+-

一个由jeffrey从thomas.loc.gov的毗连被第一个条目婚配,而一个由jeffrey从whitehouse.gov的毗连被第二个婚配。

广泛的曲解是以为,对一个给定的用户名,当办事器试图对毗连寻觅婚配时,明白定名谁人用户的一切条目将起首被利用。这分明不是现实。先前的例子申明了这点,在那边一个由jeffrey从thomas.loc.gov的毗连没被包括'jeffrey'作为User字段值的条目婚配,然而由没有效户名的标题婚配!

假如你有办事器毗连的成绩,打印出user表而且手工排序它看看第一个婚配在哪儿停止。

6.8 存取掌握,阶段2:恳求证明
一旦你创立了一个毗连,办事器进入阶段2。对在此毗连长进来的每一个恳求,办事器反省你是不是有足够的权限来履行它,它基于你但愿履行的操作类型。这恰是在受权表中的权限字段发扬感化的中央。这些权限可以来子user、db、host、tables_priv或columns_priv表的任何一个。受权表用GRANT和REVOKE号令操作。见7.26 GRANT和REVOKE 句法。(你可以觉察参考6.6 权限体系如何任务很有匡助,它列出了在每一个权限表中出现的字段。)

user表在一个全局基本上授与付与你的权限,该权限不论以后的数据库是甚么均合用。例如,假如user表授与你delete权限, 你可以删除在办事器主机上从任何数据库删除行!换句话说,user表权限是超等用户权限。只把user表的权限授与超等用户如办事器或数据库主管是明智的。对其他用户,你应当把在user表中的权限设成'N'而且仅在一个特定命据库的基本上受权, 利用db和host表。

db和host表授与数据库特定的权限。在局限字段的值可以以下被指定:

通配符字符“%”和“_”可被用于两个表的Host和Db字段。
在db表的'%'Host值意味着“任何主机”,在db表中一个空白Host值意味着“对进一步的信息征询host表”。
在host表的一个'%'或空白Host值意味着“任何主机”。
在两个表中的一个'%'或空白Db值意味着“任何数据库”。
在两个表中的一个空白User值婚配匿名用户。
db和host表在办事器启动时被读取和排序(同时它读user表)。db表在Host、Db和User局限字段上排序,而且host表在Host和Db局限字段上排序。关于user表,排序起首放置最特定的值然后最初最不特定的值,而且当办事器寻觅婚配入条目时,它利用它找到的第一个婚配。

tables_priv和columns_priv表授与表和列特定的权限。在局限字段的值可以以下被指定:

通配符“%”和“_”可用在利用在两个表的Host字段。
在两个表中的一个'%'或空白Host意味着“任何主机”。
在两个表中的Db、Table_name和Column_name字段不克不及包括通配符或空白。
tables_priv和columns_priv表在Host、Db和User字段上被排序。这相似于db表的排序,虽然由于只要Host字段可以包括通配符,但排序更复杂。

恳求证明历程鄙人面描写。(假如你熟习存取反省的源代码,你会注重到这里的描写与在代码利用的算法略有分歧。描写等价于代码实践做的器材;它只是分歧于使注释更复杂。)

对办理恳求(shutdown、reload等等),办事器仅反省user表条目,由于那是独一指定办理权限的表。假如条目允许恳求的操作,存取被受权了,不然回绝。例如,假如你想要履行mysqladmin shutdown,然而你的user表条目没无为你授与shutdown权限,存取乃至不必反省db或host表就被回绝。(由于他们不包括Shutdown_priv行列,没有如许做的需要。)

对数据库有关的恳求(insert、update等等),办事器起首经由过程查找user表条目来反省用户的全局(超等用户)权限。假如条目答应恳求的操作,存取被受权。假如在user表中全局权限不敷,办事器经由过程反省db和host表肯定特定的用户数据库权限:

办事器在db表的Host、Db和User字段上查找一个婚配。 Host和User对应毗连用户的主机名和MySQL用户名。Db字段对使用户想要存取的数据库。假如没有Host和User的条目,存取被回绝。
假如db表中的条目有一个婚配并且它的Host字段不是空白的,该条目界说用户的数据库特定的权限。
假如婚配的db表的条目标Host字段是空白的,它暗示host表罗列主机应当被答应存取数据库的主机。在这类情形下,在host表中作进一步查找以发明Host和Db字段上的婚配。假如没有host表条目婚配,存取被回绝。假如有婚配,用户数据库特定的权限以在db和host表的条目标权限,即在两个条目都是'Y'的权限的交集(而不是并集!)盘算。(如许你可以授与在db表条目中的普通权限,然后用host表条目按一个主机一个主机为基本地有选择地限制它们。)
在肯定了由db和host表条目授与的数据库特定的权限后,办事器把他们加到由user表授与的全局权限中。假如了局答应恳求的操作,存取被受权。不然,办事器反省在tables_priv和columns_priv表中的用户的表和列权限并把它们加到用户权限中。基于此了局答应或回绝存取。

用布尔术语暗示,后面关于一个用户权限若何盘算的描写可以如许总结:

global privileges
OR (database privileges AND host privileges)
OR table privileges
OR column privileges

它能够不分明,为何呢,假如全局user条目标权限最后发明对恳求的操作不敷,办事器今后把这些权限加到数据库、表和列的特定权限。缘由是一个恳求能够请求超越一品种型的权限。例如,假如你履行一个INSERT ... SELECT语句,你就都要insert和select权限。你的权限必需如斯以便user表条目授与一个权限而db表条目授与另外一个。在这类情形下,你有需要的权限履行恳求,然而办事器不克不及本人把两个表区分开来;两个条目授与的权限必需组合起来。

host表能被用来保护一个“平安”办事器列表。在TcX,host表包括一个在当地的收集上一切的机械的表,这些被授与一切的权限。

你也能够利用host表指定不平安的主机。假定你有一台机械public.your.domain,它位于你不以为是平安的一个公共区域,你可以用以下的host表条目子答应除那台机械外的收集上一切主机的存取:

+--------------------+----+-
| Host               | Db | ...
+--------------------+----+-
| public.your.domain | %  | ... (一切权限设为 'N')
| %.your.domain      | %  | ... (一切权限设为 'Y')
+--------------------+----+-

固然,你应当老是测试你在受权表中的条目(例如,利用mysqlaccess)让你确保你的存取权限实践上以你以为的体例被设置。
  学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...
作者: 山那边是海    时间: 2015-2-4 12:27
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者: 活着的死人    时间: 2015-2-5 04:34
基础有没有对学习php没有太大区别,关键是兴趣。
作者: 乐观    时间: 2015-2-9 07:34
实践是检验自己会不会的真理。
作者: 谁可相欹    时间: 2015-2-13 12:03
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
作者: 只想知道    时间: 2015-3-3 20:44
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 因胸联盟    时间: 2015-3-4 11:26
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 飘飘悠悠    时间: 2015-3-13 02:10
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
作者: 若天明    时间: 2015-3-17 11:10
多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。
作者: 再见西城    时间: 2015-3-17 20:09
先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。
作者: 若相依    时间: 2015-3-20 08:07
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
作者: 精灵巫婆    时间: 2015-3-25 08:49
写的比较杂,因为我也是个新手,不当至于大家多多指正。
作者: 柔情似水    时间: 2015-3-27 16:51
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
作者: 不帅    时间: 2015-4-4 08:28
兴趣是最好的老师,百度是最好的词典。
作者: 金色的骷髅    时间: 2015-4-11 05:09
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
作者: 愤怒的大鸟    时间: 2015-4-15 02:26
当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标,
作者: 小妖女    时间: 2015-4-16 16:11
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
作者: 小女巫    时间: 2015-4-17 16:56
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
作者: 兰色精灵    时间: 2015-4-25 20:12
最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2