WEB开发网
开发学院数据库MySQL MYSQL数据库的用户帐号管理基础知识 阅读

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

 2007-11-11 15:11:16 来源:WEB开发网   
核心提示: 如果想要为多个列授予列专有的权限,可指定一个列清单,MYSQL数据库的用户帐号管理基础知识(4),并用逗号将这些列分隔,例如,要想完全摆脱这些匿名项,执行如下操作: % MySQL(和PHP搭配之最佳组合)-uroot MySQL(和PHP搭配之最佳组合) MySQL(和PHP搭配之最佳组合)> DELETE

 如果想要为多个列授予列专有的权限,可指定一个列清单,并用逗号将这些列分隔。例如,为了给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<font class=reblank  style=(和PHP搭配之最佳组合)数据库的用户帐号管理基础知识(图三)" />

实际上,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 表中直接删除:

MySQL<font class=reblank  style=(和PHP搭配之最佳组合)数据库的用户帐号管理基础知识(图四)" />

 DELETE 语句删除该用户的项, FLUSH 语句告诉服务器重新加载授权表(当使用GRANT 或REVOKE 语句,而不是直接修改授权表时,这些表将自动重新加载)。

一个权限难题,第一部分

  下面是一个在MySQL(和PHP搭配之最佳组合)邮件清单中反复出现的情况:一位新的MySQL(和PHP搭配之最佳组合)管理员给某用户增加一个项,使用了主机名部分,该部分是用一个模式来指定的。例如:

  GRANT ALL ON samp_db.* TO fred@%.snake.net IDENTIFIEDBY "cocoa"

  这里的意图是允许用户fred 从snake.net 域的所有主机中进行连接,并且具有对samp_db 数据库的所有权限。事实上, fred 能够从那些主机中连接(除了服务器主机本身外)。当fred 试着从服务器主机中进行连接时,该企图以“访问被拒绝”的消息而告失败。即使用户指定了正确的口令也是如此。

  如果授权表中包含了由MySQL(和PHP搭配之最佳组合)_install_db 安装脚本安装的缺省项,这种情况也会发生。其原因是,当服务器验证fred 连接的企图时,一个匿名用户项( anonymous-user entry)比fred 项优先。匿名用户项要求该用户不用口令来连接,并且一个口令错误匹配发生。

  该问题的另一个背景将在第12章“权限难题,第二部分”中给出。目前,只要说修正此问题的方法是从user 表中删除匿名用户项就足够了,我们不能用R E V O K E,因为该命令只删除权限。要想完全摆脱这些匿名项,执行如下操作:

   % MySQL(和PHP搭配之最佳组合)-uroot MySQL(和PHP搭配之最佳组合) MySQL(和PHP搭配之最佳组合)> DELETE FROM user where User="";

  MySQL(和PHP搭配之最佳组合)>FLUSH PRIVILEGES;

  现在,当fred 试图从本地主机连接时成功了。

上一页  1 2 3 4 

Tags:MYSQL 数据库 用户

编辑录入:coldstar [复制链接] [打 印]
赞助商链接