PHP教程之MySQL用户办理
要想从事软件开发工作,那么,还有很多的知识要学习,其实,不管是以后想去从事哪个工作,都需要自己去利用空闲的时间去不断的学习新的知识,不断的充实自己。mysql|用户办理 MySQL办理员应当晓得若何设置MySQL用户账号,指出哪一个用户可以毗连办事器,从哪里毗连,毗连后能做甚么。MySQL 3.22.11入手下手引入两条语句使得这项任务更轻易做:GRANT语句创立MySQL用户并指定其权限,而REVOKE语句删除权限。两条语句饰演了mysql数据库的前端脚色,并供应与直接操作这些表的内容分歧的另外一种办法。CREATE和REVOKE语句影响4个表:受权表内容
user 能毗连办事器的用户和他们具有的任何全局权限
db 数据库级权限
tables_priv 表级权限
columns_priv 列级权限
还有第5个受权表(host),但它不受GRANT和REVOKE的影响。
当你对一个用户收回一条GRANT语句时,在user表中为该用户创立一笔记录。假如语句指定任何全局权限(办理权限或合用于一切数据库的权限),这些也纪录在user表中。假如你指定命据库、表和列级权限,他们被分离纪录在db、tables_priv和columns_priv表中。
用GRANT和REVOKE比直接修正受权表更轻易些,但是,建议你浏览一下《MySQL平安性指南》。这些表异常主要,并且作为一位办理员,你应当了解它们若何超出GRANT和REVOKE语句的功效程度。
鄙人面的章节中,咱们将引见若何设置MySQL用户账号并受权。咱们也触及若何撤权和从受权表中删除用户。
你能够也想思索利用mysqlaccess和mysql_setpermission剧本,它是MySQL分发的一局部,它们是Perl剧本,供应GRANT语句的另外一种选择设置用户账号。mysql_setpermission需求装置DBI撑持。
1 创立用户并受权
GRANT语句的语法看上去像如许:
GRANT privileges (columns) ON what TO user IDENTIFIED BY "password" WITH GRANT OPTION
要利用该语句,你需求填写以下局部:
privileges
授与用户的权限,下表列出可用于GRANT语句的权限指定符:
权限指定符
权限答应的操作
ALTER 修正表和索引
CREATE 创立数据库和表
DELETE 删除表中已有的纪录
DROP 丢弃(删除)数据库和表
INDEX 创立或丢弃索引
INSERT 向表中拔出新行
REFERENCE 未用
SELECT 检索表中的纪录
UPDATE 修正现存表纪录
FILE 读或写办事器上的文件
PROCESS 检查办事器中履行的线程信息或杀逝世线程
RELOAD 重载受权表或清空日记、主机缓存或表缓存。
SHUTDOWN 封闭办事器
ALL 一切;ALL PRIVILEGES同义词
USAGE 特别的“无权限”权限
上表显示在第一组的权限指定符合用于数据库、表和列,第二组数办理权限。普通,这些被绝对严厉地受权,由于它们答应用户影响办事器的操作。第三组权限特别,ALL意味着“一切权限”,UASGE意味着无权限,即创立用户,但不授与权限。
columns
权限应用的列,它是可选的,而且你只能设置列特定的权限。假如号令有多于一个列,应当用逗号分隔它们。
what
权限应用的级别。权限可所以全局的(合用于一切数据库和一切表)、特定命据库(合用于一个数据库中的一切表)或特定表的。可以经由过程指定一个columns字句是权限是列特定的。
user
权限授与的用户,它由一个用户名和主机名构成。在MySQL中,你不但指定谁能毗连,还有从哪里毗连。这答应你让两个同名用户从分歧中央毗连。MySQL让你辨别他们,并彼此自力地付与权限。
MySQL中的一个用户名就是你毗连办事器时指定的用户名,该名字不用与你的Unix登录名或Windows名接洽起来。缺省地,假如你不明白指定一个名字,客户法式将利用你的登录名作为MySQL用户名。这只是一个商定。你可以在受权表中将该名字改成nobody,然后以nobody毗连履行需求超等用户权限的操作。
password
付与用户的口令,它是可选的。假如你对新用户没有指定IDENTIFIED BY子句,该用户不赋给口令(不平安)。对现有效户,任何你指定的口令将取代老口令。假如你不指定口令,老口令坚持不变,当你用IDENTIFIED BY时,口令字符串用改用口令的字面寄义,GRANT将为你编码口令,不要象你用SET PASSWORD 那样利用password()函数。
WITH GRANT OPTION子句是可选的。假如你包括它,用户可以授与权限经由过程GRANT语句受权给其它用户。你可以用该子句授与其它用户受权的才能。
用户名、口令、数据库和表名在受权表纪录中是巨细写敏感的,主机名和列名不是。
普通地,你可以经由过程扣问几个复杂的成绩来辨认GRANT语句的品种:
谁能毗连,从那儿毗连?
用户应当有甚么级其余权限,他们合用于甚么?
用户应当答应办理权限吗?
上面就会商一些例子。
1.1 谁能毗连,从那儿毗连?
你可以答应一个用户从特定的或一系列主机毗连。有一个极端,假如你晓得晋升从一个主机毗连,你可以将权限局限于单个主机:
GRANT ALL ON samp_db.* TO boris@localhost IDENTIFIED BY "ruby"GRANT ALL ON samp_db.* TO fred@res.mars.com IDENTIFIED BY "quartz"
(samp_db.*意思是“samp_db数据库的一切表)另外一个极端是,你能够有一个常常游览并需求能从世界各地的主机毗连的用户max。在这类情形下,你可以答应他不管从哪里毗连:
GRANT ALL ON samp_db.* TO max@% IDENTIFIED BY "diamond"
“%”字符起通配符感化,与LIKE形式婚配的寄义不异。在上述语句中,它意味着“任何主机”。所以max和max@%等价。这是创立用户最复杂的办法,但也是最不平安的。
取个中,你可以答应一个用户从一个受限的主机纠合会见。例如,要答应mary从snake.net域的任何主机毗连,用一个%.snake.net主机指定符:
GRANT ALL ON samp_db.* TO mary@.snake.net IDENTIFIED BY "quartz";
假如你喜好,用户标识符的主机局部可以用IP地址而不是一个主机名来给定。你可以指定一个IP地址或一个包括形式字符的地址,并且,从MySQL 3.23,你还可以指定具有指出用于收集号的位数的收集掩码的IP号:
GRANT ALL ON samp_db.* TO boris@192.168.128.3 IDENTIFIED BY "ruby" GRANT ALL ON samp_db.* TO fred@192.168.128.% IDENTIFIED BY "quartz" GRANT ALL ON samp_db.* TO rex@192.168.128.0/17 IDENTIFIED BY "ruby"
第一个例子指出用户能从其毗连的特定主机,第二个指定关于C类子网192.168.128的IP形式,而第三条语句中,192.168.128.0/17指定一个17位收集号并婚配具有192.168.128头17位的IP地址。
假如MySQL埋怨你指定的用户值,你能够需求利用引号(只将用户名和主机名局部分隔加引号)。
GRANT ALL ON samp_db.president TO "my friend"@"boa.snake.net"
1.2 用户应当有甚么级其余权限和它们应当合用于甚么?
你可以受权分歧级其余权限,全局权限是最壮大的,由于它们合用于任何数据库。要使ethel成为可做任何工作的超等用户,包含能受权给其它用户,收回以下语句:
GRANT ALL ON *.* TO ethel@localhost IDENTIFIED BY "coffee" WITH GRANT OPTION
ON子句中的*.*意味着“一切数据库、一切表”。从平安思索,咱们指定ethel只能从当地毗连。限制一个超等用户可以毗连的主机凡是是明智的,由于它限制了试图破解口令的主机。
有些权限(FILE、PROCESS、RELOAD和SHUTDOWN)是办理权限而且只能用"ON *.*"全局权限指定符受权。假如你情愿,你可以受权这些权限,而不受权数据库权限。例如,以下语句设置一个flush用户,他只能收回flush语句。这能够在你需求履行诸如清空日记等的办理剧本中会有效:
GRANT RELOAD ON *.* TO flushl@localhost IDENTIFIED BY "flushpass"
普通地,你想受权办理权限,小气点,由于具有它们的用户可以影响你的办事器的操作。
数据库级权限合用于一个特定命据库中的一切表,它们可经由过程利用ON db_name.*子句授与:
GRANT ALL ON samp_db TO bill@racer.snake.net INDETIFIED BY "rock" GRANT SELECT ON samp_db TO ro_user@% INDETIFIED BY "rock"
第一条语句向bill受权samp_db数据库中一切表的权限,第二条创立一个严厉限制会见的用户ro_user(只读用户),只能会见samp_db数据库中的一切表,但只要读取,即用户只能收回SELECT语句。
你可以列出一系列同时授与的各个权限。例如,假如你想让用户能读取并能修正现无数据库的内容,但不克不及创立新表或删除表,以下授与这些权限:
GRANT SELECT,INSERT,DELETE,UPDATE ON samp_db TO bill@snake.net INDETIFIED BY "rock"
关于更精细的会见掌握,你可以在各个表上受权,或乃至在表的每一个列上。当你想向用户埋没一个表的局部时,或你想让一个用户只能修正特定的列时,列特定权限十分有效。如:
GRANT SELECT ON samp_db.member TO bill@localhost INDETIFIED BY "rock"GRANT UPDATE (expiration) ON samp_db. member TO bill@localhost
第一条语句授与对全部member表的读权限并设置了一个口令,第二条语句增添了UPDATE权限,当只对expiration列。没需要再指定口令,由于第一条语句已指定了。
假如你想对多个列授与权限,指定一个用逗号分隔的列表。例如,对assistant用户增添member表的地址字段的UPDATE权限,利用以下语句,新权限将加到用户已有的权限中:
GRANT UPDATE (street,city,state,zip) ON samp_db TO assistant@localhost
凡是,你不想授与任何比用户的确需求的权限宽的权限。但是,当你想让用户能创立一个一时表以保留两头了局,但你又不想让他们在一个包括他们不该修正内容的数据库中如许做时,产生了要授与在一个数据库上的绝对宽松的权限。你可以经由过程创立一个分隔的数据库(如tmp)并授与开数据库上的一切权限来停止。例如,假如你想让来自mars.net域中主机的任何用户利用tmp数据库,你可以收回如许的GRANT语句:
GRANT ALL ON tmp.* TO ""@mars.net
在你做完以后,用户可以创立并用tmp.tbl_name模式援用tmp中的表(在用户指定符中的""创立一个匿名用户,任何用户均婚配空白用户名)。
1.3 用户应当被答应办理权限吗?
你可以答应一个数据库的具有者经由过程授与数据库上的一切具有者权限来掌握数据库的会见,在受权时,指定WITH GRANT OPTION。例如:假如你想让alicia能从big.corp.com域的任何主机毗连并具有sales数据库中一切表的办理员权限,你可以用以下GRANT语句:
GRANT ALL ON sales.* TO alicia@%.big.corp.com INDETIFIED BY "applejuice" WITH GRANT OPTION
在后果上WITH GRANT OPTION子句答应你把会见受权的权力授与另外一个用户。要注重,具有GRANT权限的两个用户可以彼此受权。假如你只赐与了第一个用户SELECT权限,而另外一个用户有GRANT加上SELECT权限,那末第二个用户可所以第一个用户更“壮大”。
2 撤权并删除用户
要作废一个用户的权限,利用REVOKE语句。REVOKE的语法十分相似于GRANT语句,除TO用FROM代替而且没有INDETIFED BY和WITH GRANT OPTION子句:
REVOKE privileges (columns) ON what FROM user
user局部必需婚配本来GRANT语句的你想撤权的用户的user局部。privileges局部不需婚配,你可以用GRANT语句受权,然后用REVOKE语句只撤消局部权限。
REVOKE语句只删除权限,而不删除用户。即便你撤消了一切权限,在user表中的用户纪录仍然保存,这意味着用户依然可以毗连办事器。要完整删除一个用户,你必需用一条DELETE语句明白从user表中删除用户纪录:
%mysql -u root mysqlmysql>DELETE FROM user ->WHERE User="user_name" and Host="host_name";mysql>FLUSH PRIVILEGES;
DELETE语句删除用户纪录,而FLUSH语句告知办事重视载受权表。(当你利用GRANT和REVOKE语句时,表主动重载,而你直接修正受权表时不是。)
对于PHP的语法结构,刚开始真的很不习惯,真搞不懂为什么每个变量之前都要加个“$”符号,每个语句写完之后都必须加上“分号”来表示此句已经结束,还有,PHP对字母的大小写是敏感的,写的时候一定要注意大小写的区别。 有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了, 多看优秀程序员编写的代码,仔细理解他们解决问题的方法,对自身有很大的帮助。 遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。 ,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。 先学习php和mysql,还有css(html语言很简单)我认为现在的效果比以前的方法好。 刚开始安装php的时候,我图了个省事,把php的扩展全都打开啦(就是把php.ini 那一片 extension 前面的冒号全去掉啦),这样自然有好处,以后不用再需要什么功能再来打开。 微软最近出的新字体“微软雅黑”,虽然是挺漂亮的,不过firefox支持的不是很好,所以能少用还是少用的好。 基础有没有对学习php没有太大区别,关键是兴趣。 首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。 个人呢觉得,配wamp 最容易漏的一步就是忘了把$PHP$目录下的libmysql.dll拷贝到windows系统目录的system32目录下,还有重启apache。 说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。 作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。 当留言板完成的时候,下步可以把做1个单人的blog程序,做为目标, php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 如果你已经到这种程度了,那么你已经可以做我的老师了。其实php也分很多的区域, 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
页:
[1]