网络安全 频道

Mysql数据库的安全配置、实用技巧

| Process | Process_priv| 允许查看和终止MySQL服务器正在运行的线程(进程)以及正在执行的查询语句 |

  | | | ,包括执行修改密码的查询语句。该权限比较危险,不应该随便授予。 |

  +-----------+-------------+-----------------------------------------------------------------------+ | File | File_priv | 允许从服务器上读全局可读文件和写文件。该权限比较危险,不应该随便授予。| +-----------+-------------+-----------------------------------------------------------------------+

  mysql> desc db;

  +-----------------+-----------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra |

  +-----------------+-----------------+------+-----+---------+-------+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | |

  | User | char(16) binary | | PRI | | |

  | Select_priv | enum(‘N‘,‘Y‘) | | | N | | | Insert_priv | enum(‘N‘,‘Y‘) | | | N | | | Update_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Delete_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Create_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Drop_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Grant_priv | enum(‘N‘,‘Y‘) | | | N | |

  | References_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Index_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Alter_priv | enum(‘N‘,‘Y‘) | | | N | |

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

  13 rows in set (0.01 sec)

  db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。

  mysql> desc host;

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

  | Field | Type | Null | Key | Default | Extra |

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

  | Host | char(60) binary | | PRI | | |

  | Db | char(64) binary | | PRI | | |

  | Select_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Insert_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Update_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Delete_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Create_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Drop_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Grant_priv | enum(‘N‘,‘Y‘) | | | N | |

  | References_priv | enum(‘N‘,‘Y‘) | | | N | | | Index_priv | enum(‘N‘,‘Y‘) | | | N | |

  | Alter_priv | enum(‘N‘,‘Y‘) | | | N | |

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

  12 rows in set (0.01 sec)

  host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响 ,所以,你可能发觉你根本不是用它。

  mysql> desc tables_priv;

  +-------------+-----------------------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra |

  +-------------+-----------------------------+------+-----+---------+-------+ | Host | char(60) binary | | PRI | | | | Db | char(64) binary | | PRI | | |

  | User | char(16) binary | | PRI | | | | Table_name | char(60) binary | | PRI | | | | Grantor | char(77) | | MUL | | |

  | Timestamp | timestamp(14) | YES | | NULL | |

  | Table_priv | set(‘Select‘,‘Insert‘, | | | | |

  | | ‘Update‘,‘Delete‘,‘Create‘, | | | | |

  | | ‘Drop‘,‘Grant‘,‘References‘,| | | | |

  | | ‘Index‘,‘Alter‘) | | | | |

  | Column_priv | set(‘Select‘,‘Insert‘, | | | | |

  | | ‘Update‘,‘References‘) | | | | |

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

  8 rows in set (0.01 sec)

  tables_priv表指定表级权限。在这里指定的一个权限适用于一个表的所有列。

  mysql> desc columns_priv;

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

  | Field | Type | Null | Key | Default | Extra |

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

  | Host | char(60) binary | | PRI | | |

  | Db | char(64) binary | | PRI | | |

  | User | char(16) binary | | PRI | | |

  | Table_name | char(64) binary | | PRI | | |

  | Column_name | char(64) binary | | PRI | | |

  | Timestamp | timestamp(14) | YES | | NULL | |

  | Column_priv | set(‘Select‘,‘Insert‘, | | | | |

  | | ‘Update‘,‘References‘) | | | | | +-------------+------------------------+------+-----+---------+-------+

  7 rows in set (0.00 sec)

  columns_priv表指定列级权限。在这里指定的权限适用于一个表的特定列。

  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等主机连接数据库| +-----------------------------+--------+----------------------------------------------+

0
相关文章