服务器 频道

MySQL数据库的用户账号管理基础知识

MySQL的用户名就是您在连接到服务器时指定的名字。该名字与您的UNIX 注册名或Windows 名的没有必然连系。缺省设置时,客户机程序将使用您注册的名字作为MySQL的用户名(如果您不明确指定一个名字的话),但这只是一个约定。有关将root作为可以操作一切MySQL的超级用户名也是这样,就是一种约定。您也可以在授权表中将此名修改成nobody,然后作为nobody 用户进行连接,以执行需要超级用户特权的操作。

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 语句授予的任何权限授予其他的用户。可以使用该子句将授权的能力授予其他的用户。

用户名、口令以及数据库和表的名称在授权表项中是区分大小写的,而主机名和列名则不是。

通过查询某些问题,通常可以推断出所需的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"
0
相关文章