大雀软件园

首页 软件下载 安卓市场 苹果市场 电脑游戏 安卓游戏 文章资讯 驱动下载
技术开发 网页设计 图形图象 数据库 网络媒体 网络安全 站长CLUB 操作系统 媒体动画 安卓相关
当前位置: 首页 -> 数据库 -> MySQL -> MYSQL数据库的用户帐号管理基础知识

MYSQL数据库的用户帐号管理基础知识

时间: 2021-08-13 作者:daque

mysql处置员该当领会还好吗经过指定哪些用户可贯穿到效劳器、从何处举行贯穿,以及在贯穿时做什么,来树立mysql用户账号。mysql3.22.11引入了两个更简单举行这项处事的语句:grant 语句创造mysql用户并指定其权力,revoke 语句简略权力。这两个语句充任mysql数据库中的受权表的前者,并供给径直安排那些表实质的可采用的本领。grant 和revoke 语句感化以次四个表:

受权表 实质user 可贯穿到效劳器的用户和她们具有的任何全部特权db 数据库级的特权tables _ priv 表级特权c o l um n s _ priv 列级特权再有第六个受权表( host),但它不受grant 或revoke的感化。

  当您为某个用户颁布grant 语句时,应在user表中为该用户创造一个项。即使该语句指定了一切全部特权(处置权力或用来一切数据库的权力),则那些指定也被记载在user表中。即使指定了数据库、表或列的权力,它们将记载在db、tables_priv 和columns_priv表中。       运用grant 和revoke语句比径直窜改受权表更简单。然而,倡导您最佳经过观赏第12章来弥补本章的实质,第12章中精细计划了受权表。那些表特殊要害,动作一位处置员该当领会那些表是还好吗在grant 和revoke 语句级上处事的。        本节底下的局部将计划怎样树立mysql用户的账号和受权,还将引见怎样废除权力以及从受权表中简略十足用户,而且将商量一个搅扰很多新的mysql处置员的困难。        您还要商量运用mysqlaccess 和mysql_setpermission 剧本,它们是mysql散发包的构成局部。那些是perl 的剧本,它们供给了树立用户账号的grant 语句的代用品。mysql_setpermission 须要具备dbi 的扶助情况。

  创造新用户和受权

  grant 语句的语法如次:

  grant privileges (columns)

  on what

  to user identifiedby "password"

  with grant option

  要运用该语句,须要填写以次局部:

  privileges 调配给用户的权力。下表列出了可在grant 语句中运用的权力证明符:

  权力证明符权力承诺的操纵

[page_break]

上表表露的第一组权力证明符实用于数据库、表和列。第二组证明符是处置特权。常常,那些权力的赋予十分顽固,由于它们会感化效劳器的操纵(比方, shutdown 特权不是按每天来散发的权力)。第三组证明符是特出的。all的道理是“一切的权力”,而usage 的道理是“无权力”─即创造用户,但不赋予任何的权力。

  columns 权力实用的列。这是可选的,只来树立列私有的权力。即使定名多于一个列,则用逗点划分。

  what 权力运用的级别。权力不妨是全部的(实用于一切数据库和一切的表)、数据库私有的(实用于某个数据库中的一切表),或表私有的。不妨经过指定一个c o l u m n s子句将权力赋予一定的列。        user 运用权力的用户。它由用户名和长机名构成。在mysql中,不只指定谁举行贯穿,还要指定从何处贯穿。它承诺您具有两个带有沟通名字的、从各别场所贯穿的用户。mysql承诺在它们之间举行辨别并彼此独登时调配权力。

  mysql的用户名即是您在贯穿到效劳器时指定的名字。该名字与您的unix 备案名或windows 名的没有必定连系。缺省树立时,存户机步调将运用您备案的名字动作mysql的用户名(即使您不精确指定一个名字的话),但这不过一个商定。相关将root动作不妨操纵十足mysql的超等用户名也是如许,即是一种商定。您也不妨在受权表中将此名窜改成nobody,而后动作nobody 用户举行贯穿,以实行须要超等用户特权的操纵。

mysql数据库的用户帐号管理基础知识图1

  password 调配给该用户的口令。这是可选的。即使您不给新用户指定identifiedby子句,该用户不调配口令(利害安定的)。对于已有的用户,任何指定的口令将代替旧口令。即使不指定新口令,用户的旧口令仍旧维持静止。当您真实要运用id e n t i f i e dby 时,该口令串该当是径直量,grant 将对口令举行源代码。当用set pa s s w o r d语句时,不要运用password() 因变量。

  with grant option 子句是可选的。即使包括该子句,该用户不妨将grant 语句赋予的任何权力赋予其余的用户。不妨运用该子句将受权的本领赋予其余的用户。

mysql数据库的用户帐号管理基础知识图2

  用户名、口令以及数据库和表的称呼在受权表项中是辨别巨细写的,而长机名和列名则不是。

  经过查问某些题目,常常不妨估计出所需的grant 语句的典型:         谁不妨举行贯穿,从何处贯穿?         用户应具备什么级其余权力,那些权力实用于什么?         承诺用户处置权力吗?

  让咱们来发问那些题目,同声看少许运用grant 语句树立mysql用户账号的例子。

  1. 谁不妨举行贯穿,从何处贯穿

  您不妨承诺用户在一定的长机或波及范畴很宽的一组长机中举行贯穿。在一个极其,即使领会用户将仅从谁人长机中举行贯穿,则可控制对单个长机的考察:

  grant all on samp_db.* to boris@localhost identfiedby "ruby"

  grant all on samp_db.* to fred@ares.mars.net identfiedby "quartz"

  (标记samp_db.* 含意是“在samp_db 数据库中的一切表”)在另一个极其,您大概会有一个用户m a x,他漫游寰球并须要不妨从寰球各地的长机中举行贯穿。在这种情景下,不管他从何处贯穿您都将承诺:

  grant all on samp_db.* to max@% identfiedby "diamond"

 ‘%’字符起通配符的效率,与like形式配合的含意沟通,在上个语句中,它的道理是“任何长机”。即使您基础不给出长机名局部,则它与指定“ %”的含意沟通。所以, max和max@%是等价的。这是树立一个用户最简单的本领,但安定性最小。

  要想采用协调的方法,可承诺用户在一组有限的长机中举行贯穿。比方,要使mary 从snake.net 域的任何长机中举行贯穿,可运用%.snake.net 长机证明符:

  grant all on samp_db.* to mary@%.snake.net identfiedby "topaz"

  该用户操作符的长机局部可用ip 地方而不是长机名给出(即使承诺的话)。不妨指定一个径直的ip 地方或包括形式字符的地方。同样,自mysql3.23 起,不妨用一个搜集掩码来指定ip 号,搜集掩码表领会用来该搜集号的二进制位数:

  grant all on samp_db.* to joe@192.168.0.3 identifiedby "water"

  grant all on samp_db.* to ardis@192.168.128.% identifiedby "snow"

  grant all on samp_db.* to rex@192.168.128.0/17 identifiedby "ice"

  第一条语句指明用户可举行贯穿的一定的长机。第二条语句指定129.168.128 class c 子网的ip 形式。在第三条语句中, 192.168.128.0/17 指定一个17 位二进制的搜集号,并将任何长机与其ip 地方的前17 个二进制位中的192.168.128.0/17 举行配合。

  即使mysql埋怨您指定的用户值,则大概须要运用引号(但对用户名和长机名辨别加引号):

  grant all on samp_db.president to "my friend"@"boa.snake.net"

[page_break]2. 用户应具备什么级其余权力,那些权力实用于什么

  您可赋予各别级其余权力。全部权力的功效最强,由于它们实用于任何数据库。为了使ethel 变成不妨举行十足操纵的超等用户(个中囊括不妨对其余用户受权),颁布下列语句:

  grant all on *.* to ethel@localhost identifiedby "coffee"

  with grant option

mysql数据库的用户帐号管理基础知识图3

  on 子句中*.* 证明符的道理是“一切数据库,一切的表”,为保障起见,咱们仍旧指定ethel 只能从当地长机中贯穿。控制超等用户从哪些长机长进行贯穿常常是聪明的做法,由于它控制住了其余用户对口令举行摸索。

  有些权力( f i l e、p r o c e s s、reload 和s h u t d o w n)是处置权力,只能用no *.* 全部权力证明符来赋予。即使蓄意的话,也不妨不必赋予数据库级的权力来赋予那些权力。比方,下列语句创造了一个flush 用户,它除去颁布flush语句外不做其余任何工作。在处置剧本中这大概是有效的,由于须要在那些剧本中实行诸如在日记文献轮回功夫革新日记的操纵:

  grant reload on *.* to flush@localhost identifiedby "flushpass"

  常常赋予处置权力该当是顽固的,由于具备那些权力的用户大概感化效劳器的操纵。

  数据库级的权力实用于特定命据库中的一切表。那些权力运用on db_name.* 子句举行赋予:

  grant all on samp_db.* to bill@racer.snake.net identifiedby "rock"

  grant select on menagerie.* to ro_user@% identifiedby "dirt"

  第一条语句将bill 的一切权力赋予samp_db 数据库的任何表。第二条语句创造一个控制考察的用户r o _ user(只读用户),它不妨考察menagerie 数据库的一切表,但只能读取。也即是说,该用户只能颁布select 语句。

  还好吗在受权表项中指定当地长机名

  即使您运用效劳器的长机名而非localhost,常常生存从该效劳器长机贯穿的题目。这大概是因为在受权表中指命名字的本领和名字领会器例程( name reslover routine)向步调汇报名字的本领之间的缺点配合。即使领会器汇报了一个非控制的名字(如p i t - v i per),但受权表包括了具备全控制的名字的项(如p i t - v i per. s n a k e . n e t,反之亦然),则爆发缺点配合。

  为了决定这种情景能否正在体例中爆发,可试着用-h 选项贯穿到当地效劳器,该选项指定了长机的名字。而后察看效劳器的惯例日记文献。它是还好吗汇报长机名的?是以非控制情势仍旧控制情势?不管它是哪种情势,都将报告您在颁布grant 语句时须要还好吗指定用户证明符的长机名局部。

  不妨同声列出很多被赋予的单个权力。比方,即使想让用户能读取和窜改已有表的实质,但又不承诺创造新表或简略表,可按如次受权:

  grant select,insert,delete,update on samp_db.* to jennie@%

  identifiedby "boron"

  对于更小粒度( f i n e - g r a i n e d)的考察遏制,不妨在单个表上受权,以至在表的单个列上受权。当生存要对用户湮没的表时,大概,当只承诺用户窜改一定列时,列私有的权力是有效的。假设汗青联盟会中有少许理想者运用您动作联盟会文牍应实行的工作来扶助您处事。这是一个好动静,但您确定开始给新的帮忙赋予对member 表只读的权力(该表中包括了会员资历的消息),而后再对她们减少赋予该表的expiration 列的列私有update权力。也即是说,您的帮忙不妨在人们革新其会员资历时举行变动

第一条语句赋予对所有member 表的读考察权并树立口令。第二条语句减少update权力,但不过对expiration 列。此时不需要再指定口令,由于在第一条语句中仍旧实行了。 截至日子的处事。树立此mysql用户的语句如次:

[page_break] 即使想要为多个列赋予列私有的权力,可指定一个列清单,并用逗点将那些列分割。比方,为了给assistant 用户减少对member 表地方列的update权力,不妨运用下列语句。新的权力将被减少到对该用户来说仍旧生存的一切列上:   grant update (street,city,state,zip) on samp_db.member   to assistant@localhost   常常,不要给用户赋予比本质须要更大的权力。然而,当您想要运用户不妨创造保存中央截止的偶尔表,而又不承诺用户在包括有她们不许窜改的数据的数据库中如许做时,就有了要在数据库上赋予十分多的承诺权力的来由。您不妨创造一个独立的数据库(笔者称它为t m p)并赋予用户该数据库的一切权力。比方,即使想要mars.net 域的长机中的任何用户都不妨运用tmp 数据库,可颁布下列grant语句:  grant all on tmp.* to ""@%.mars.net   在实行那些之后,用户可运用tmp.tbl_name 方法的名字创造和援用tmp 数据库中的表(用户证明符中的“” 创造一个隐姓埋名用户项,任何用户都与空缺用户名相配合)。   3. 承诺用户处置权力吗  经过赋予数据库一切者数据库的一切权力并在操纵时指定with grant option,不妨承诺数据库一切者遏制对该数据库的考察。比方,即使要让alicia 能在big.corp.com 域的一切长机中举行贯穿并处置sales 数据库中一切表的权力,应运用下列grant语句:

mysql数据库的用户帐号管理基础知识图4

本质上,with grant option 子句承诺将考察的权力赋予给另一个用户。要领会,具备grant 权力的两个用户不妨彼此赋予本人的权力。即使只给一个用户赋予select 权力而给另一个用户除select 外还赋予了grant 和其余的权力,则第二个用户不妨使第一个用户“宏大”起来。

  废除权力和简略用户

  为了收回某个用户的权力,可运用revoke 语句。除去要用from 替代to 而且没有identifiedby 或with grant option 子句外,revoke 的语法与grant 语句特殊一致:

  revoke privileges (columns) on what from user

  user 局部必需与您想要废除其权力的用户的原始grant 语句的user 局部相配合。priv i l e g e s 局部不须要配合,您可用grant 语句受权,而后用revoke 语句废除个中的一局部。revoke 语句只简略权力,不简略用户。用户的项仍旧保持在user 表中,纵然您废除了该用户的一切权力也是如许。这表示着该用户仍旧可贯穿到效劳器上。要想简略所有用户,必需用delete 语句将该用户的记载从user 表市直接简略:

 delete 语句简略该用户的项, flush 语句报告效劳珍视新加载受权表(当运用grant 或revoke 语句,而不是径直窜改受权表时,那些表将机动从新加载)。 一个权力困难,第一局部  底下是一个在mysql邮件清单中重复展示的情景:一位新的mysql处置员给某用户减少一个项,运用了长机名局部,该局部是用一个形式来指定的。比方:   grant all on samp_db.* to fred@%.snake.net identifiedby "cocoa"   这边的企图是承诺用户fred 从snake.net 域的一切长机中举行贯穿,而且具备对samp_db 数据库的一切权力。究竟上, fred 不妨从那些长机中贯穿(除去效劳器长机自己外)。当fred 试着从效劳器长机中举行贯穿时,该计划以“考察被中断”的动静而告波折。即运用户指定了精确的口令也是如许。  即使受权表中包括了由mysql_install_db 安置剧本安置的缺省项,这种情景也会爆发。其因为是,当效劳器考证fred 贯穿的计划时,一个隐姓埋名用户项( anonymous-user entry)比fred 项优先。隐姓埋名用户项诉求该用户不必口令来贯穿,而且一个口令缺点配合爆发。   该题目的另一个后台将在第12章“权力困难,第二局部”中给出。暂时,只有说矫正此题目的本领是从user 表中简略隐姓埋名用户项就充满了,咱们不许用r e v o k e,由于该吩咐只简略权力。要想实足解脱那些隐姓埋名项,实行如次操纵:   % mysql-uroot mysql mysql> delete from user where user="";   mysql>flush privileges;   此刻,当fred 试图从当地长机贯穿时胜利了。

热门阅览

最新排行

Copyright © 2019-2021 大雀软件园(www.daque.cn) All Rights Reserved.