网络编程
位置:首页>> 网络编程>> 数据库>> MySQL安全大讲堂:MySQL数据库安全配置(5)

MySQL安全大讲堂:MySQL数据库安全配置(5)

 来源:asp之家 发布时间:2009-10-18 11:24:00 

标签:MySQL,安全,MySQL数据库,安全配置

2)MySQL授权表运行机制

MySQL的访问控制分两个步骤:


a)服务器检查是否允许该用户连接。

b)如果该用户有权连接,那么服务器还会检查它的每一个请求是否有足够的权限。比如:用户检索数据库中的一个表需要有这个数据库的select权限,用户删除数据库中的一个表需要有这个数据库的drop权限。

授权表的user, db, host表使用这两个步骤,tables_priv和columns_priv表只使用第二步(检查请求)。每个授权表包含决定一个权限何时运用的范围列和决定授予哪种权限的权限列。

范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列,如db表包含一个Db列指出权限运用于哪个数据库。类似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。

下面是user表的Host字段和User字段组合的一些例子:

+-----------------------------+--------+--------------------------------------------------------+

| Host值 | User值 | 匹配的连接 |

+-----------------------------+--------+--------------------------------------------------------+

| 'x.y.z' | 'test' | test用户只能从x.y.z连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| 'x.y.z' | '' | 任何用户可以从x.y.z连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| '%' | 'test' | test用户可以从任意主机连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| '' | '' | 任何用户可以从任意主机连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| '%.y.z' | 'test' | test用户可以从y.z域的任意主机连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| 'x.y.% ' | 'test' | test用户可以从x.y.net, x.y.com, x.y.edu等主机连接数据库|

+-----------------------------+--------+--------------------------------------------------------+

| '192.168.1.1' | 'test' | test用户可以从IP地址为192.168.1.1的主机连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| '192.168.1.% ' | 'test' | test用户可以从C类子网192.168.1中的任意主机连接数据库 |

+-----------------------------+--------+--------------------------------------------------------+

| '192.168.1.0/255.255.255.0' | 'test' | 同上 |

+-----------------------------+--------+--------------------------------------------------------+

SQL的字符串通配符%表示匹配任意字符,可以是0个字符,通配符_表示匹配一个字符。

权限列指出在范围列中指定的用户拥有何种权限。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称与GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。




3)授权表使用举例

grant用于给增加用户和创建权限,revoke用于删除用户权限。

下面是一些用grant增加用户和创建权限的例子:

mysql> grant all privileges on *.* to test@localhost identified by 'test' with grant option;

这句增加一个本地具有所有权限的test用户(超级用户),密码是test。ON子句中的*.*意味着"所有数据库、所有表"。with grant option表示它具有grant权限。

mysql> grant select,insert,update,delete,create,drop privileges on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test';

这句是增加了一个test1用户,口令是test,但是它只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限。

用grant语句创建权限是不需要再手工刷新授权表的,因为它已经自动刷新了。

给用户创建权限还可以通过直接修改授权表:

mysql> insert into user values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");

mysql> flush privileges;

这两句和上面第一句grant的效果是一样的,也是增加了一个本地的test超级用户。我们看到用grant方便多了,而且还不需flush privileges。

mysql> insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test"));

mysql> insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N")

mysql> flush privileges;

这三句和上面第二句grant的效果也是一样的,也是增加了一个只能从C类子网192.168.1连接,对test库有select,insert,update,delete,create,drop操作权限的test1用户,口令是test。

要取消一个用户的权限,使用revoke语句。revoke的语法非常类似于grant语句,除了to用from取代并且没有identified by和with grant option子句,下面是用revoke删除用户权限的例子:

mysql> revoke all on test.* from test1@'192.168.1.0/255.255.255.0';

这句revoke就撤消了上面第二句grant创建的权限,但是test1用户并没有被删除,必须手工从user表删除:


mysql> delete from user where user='test1';

mysql> flush privileges;

这样,test1用户就彻底删除了。

这些只是MySQL授权表的简单使用,更多详细的资料请见MySQL提供的手册。

0
投稿

猜你喜欢

手机版 网络编程 asp之家 www.aspxhome.com