|
ixdba.net技术社区mysql技术专题栏目:如果对这些技术问题有任何疑问,请给我们在文章后面留言:
实际上,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 试图从本地主机连接时成功了。
|