正在阅读:MySQL安全性指南MySQL安全性指南

2004-04-01 13:26 出处:PConline 作者:晏子 责任编辑:pjl
二、外部安全性-保证网络访问的安全 MySQL的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。 关于如何管理用户账号,见《MySQL的用户管理》。而对GRANT和REVOKE语句详细描述,见《MySQL参考手册》。 2.1 MySQL授权表的结构和内容 通过网络连接服务器的客户对MySQL数据库的访问由授权表内容来控制。这些表位于mysql数据库中,并在第一次安装MySQL的过程中初始化(运行mysql_install_db脚本)。授权表共有5个表:user、db、host、tables_priv和columns_priv。 表1 user、db和host授权表结构 访问范围列 user db host Host Host Host User Db Db Password User 数据库/表权限列 Alter_priv Alter_priv Alter_priv Create_priv Create_priv Create_priv Delete_priv Delete_priv Delete_priv Drop_priv Drop_priv Drop_priv Index_priv Index_priv Index_priv Insert_priv Insert_priv Insert_priv References_priv References_priv References_priv Select_priv Select_priv Select_priv Update_priv Update_priv Update_priv File_priv Grant_priv Grant_priv Grant_priv Process_priv Reload_priv Shutdown_priv   表2 tables_priv和columns_priv属权表结构 访问范围列 tables_priv columns_priv Host Host Db Db User User Table_name Table_name Column_name 权限列 Table_priv Column_priv 授权表的内容有如下用途: ·user表 user表列出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 ·db表 db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。 ·host表 host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。 ·tables_priv表 tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。 ·columns_priv表 columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。 在“不用GRANT设置用户”一节里,我们再讨论GRANT语句如何对修改这些表起作用,和你怎样能通过直接修改授权表达到同样的效果。 tables_priv和columns_priv表在MySQL 3.22.11版引进(与GRANT语句同时)。如果你有较早版本的MySQL,你的mysql数据库将只有user、db和host表。如果你从老版本升级到3.22.11或更新,而没有tables_priv和columns_priv表,运行mysql_fix_privileges_tables脚本创建它们。 MySQL没有rows_priv表,因为它不提供记录级权限,例如,你不能限制用户于表中包含特定列值的行。如果你确实需要这种能力,你必须用应用编程来提。如果你想执行建议的记录级锁定,你可用GET_LOCK()函数做到。 授权表包含两种列:决定一个权限何时运用的范围列和决定授予哪种权限的权限列。 2.1.1 授权表范围列 授权表范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列,如db表包含一个Db列指出权限运用于哪个数据库。类似地,tables_priv和columns_priv表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。 2.1.2 授权表权限列 授权表还包含权限列,他们指出在范围列中指定的用户拥有何种权限。由MySQL支持的权限如下表所示。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称与GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。 2.1.3 数据库和表权限 下列权限运用于数据库和表上的操作。 ·ALTER 允许你使用ALTER TABLE语句,这其实是一个简单的第一级权限,你必须由其他权限,这看你想对数据库实施什么操作。 ·CREATE 允许你创建数据库和表,但不允许创建索引。 ·DELETE 允许你从表中删除现有记录。 ·DROP 允许你删除(抛弃)数据库和表,但不允许删除索引。 ·INDEX 允许你创建并删除索引。 ·REFERENCES 目前不用。 ·SELECT 允许你使用SELECT语句从表中检索数据。对不涉及表的SELECT语句就不必要,如SELECT NOW()或SELECT 4/2。 ·UPDATE 允许你修改表中的已有的记录。 2.1.4 管理权限 下列权限运用于控制服务器或用户授权能力的操作的管理性操作。 ·FILE 允许你告诉服务器读或写服务器主机上的文件。该权限不应该随便授予,它很危险,见“回避授权表风险”。服务器确实较谨慎地保持在一定范围内使用该权限。你只能读任何人都能读的文件。你正在写的文件必须不是现存的文件,这防止你迫使服务器重写重要文件,如/etc/passwd或属于别人的数据库的数据目录。 如果你授权FILE权限,确保你不以UNIX的root用户运行服务器,因为root可在文件系统的任何地方创建新文件。如果你以一个非特权用户运行服务器,服务器只能在给用户能访问的目录中创建文件。 ·GRANT 允许你将你自己的权限授予别人,包括GRANT。 ·PROCESS 允许你通过使用SHOW PROCESS语句或mysqladmin process命令查看服务器内正在运行的线程(进程)的信息。这个权限也允许你用KILL语句或mysqladmin kill命令杀死线程。 你总是能看到或杀死你自己的线程。PROCESS权限赋予你对任何线程做这些事情的能力。 ·RELOAD 允许你执行大量的服务器管理操作。你可以发出FLUSH语句,你也能指性mysqladmin的reload、refresh、flush-hosts、flush-logs、flush-privileges和flush-tables等命令。
键盘也能翻页,试试“← →”键

相关文章

关注我们

最新资讯离线随时看 聊天吐槽赢奖品