学习网考试学习资料

Gzu521.com

MySQL安全性指南(2)

MySQL教程   点击:次   发布时间:2006-7-6   【字体: 】   来源:Gzu521.com
贵州学习网—属于你的学习中心


二、外部安全性-保证网络访问的安全 
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表包含范围字段,缩小范围到一个数据库中的特定表或一个表的特定列。 

上 一 页 下 一 页
文共8页:第 【1】 【2】 【3】 【4】 【5】 【6】 【7】 【8】

责任编辑:gzu521