作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统

上传人:博****1 文档编号:561305777 上传时间:2024-01-07 格式:DOC 页数:15 大小:44KB
返回 下载 相关 举报
作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统_第1页
第1页 / 共15页
作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统_第2页
第2页 / 共15页
作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统_第3页
第3页 / 共15页
作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统_第4页
第4页 / 共15页
作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统》由会员分享,可在线阅读,更多相关《作为一个MySQL的系统管理员你有责任维护你的MySQL数据库系统(15页珍藏版)》请在金锄头文库上搜索。

1、精选优质文档-倾情为你奉上作为一个MySQL的系统管理员,你有责任维护你的MySQL数据库系统的数据安全性和完整性。本文主要主要介绍如何建立一个安全的MySQL系统,从系统内部和外部网络两个角度,为你提供一个指南。 本文主要考虑下列安全性有关的问题: 为什么安全性很重要,你应该防范那些攻击? 服务器面临的风险(内部安全性),如何处理? 连接服务器的客户端风险(外部安全性),如何处理? MySQL管理员有责任保证数据库内容的安全性,使得这些数据记录只能被那些正确授权的用户访问,这涉及到数据库系统的内部安全性和外部安全性。 内部安全性关心的是文件系统级的问题,即,防止MySQL数据目录(DATAD

2、IR)被在服务器主机有账号的人(合法或窃取的)进行攻击。如果数据目录内容的权限过分授予,使得每个人均能简单地替代对应于那些数据库表的文件,那么确保控制客户通过网络访问的授权表设置正确,对此毫无意义。 外部安全性关心的是从外部通过网络连接服务器的客户的问题,即,保护MySQL服务器免受来自通过网络对服务器的连接的攻击。你必须设置MySQL授权表(grant table),使得他们不允许访问服务器管理的数据库内容,除非提供有效的用户名和口令。 下面就详细介绍如何设置文件系统和授权表mysql,实现MySQL的两级安全性。 一、内部安全性-保证数据目录访问的安全MySQL服务器通过在MySQL数据库

3、中的授权表提供了一个灵活的权限系统。你可以设置这些表的内容,允许或拒绝客户对数据库的访问,这提供了你防止未授权的网络访问对你数据库攻击的安全手段,然而如果主机上其他用户能直接访问数据目录内容,建立对通过网络访问数据库的良好安全性对你毫无帮助,除非你知道你是登录MySQL服务器运行主机的唯一用户,否则你需要关心在这台机器上的其他用户获得对数据目录的访问的可能性。以下是你应该保护的内容:数据库文件。很明显,你要维护服务器管理的数据库的私用性。数据库拥有者通常并且应该考虑数据库内容的安全性,即使他们不想,也应该考虑时数据库内容公开化,而不是通过糟糕的数据目录的安全性来暴露这些内容。 日志文件。一般和

4、更新日志必须保证安全,因为他们包含查询文本。对日志文件有访问权限的任何人可以监视数据库进行过的操作。更要重点考虑的日志文件安全性是诸如GRANT和SET PASSWORD等的查询也被记载了,一般和更新日志包含有敏感查询的文本,包括口令(MySQL使用口令加密,但它在已经完成设置后才运用于以后的连接建立。设置一个口令的过程设计象GRANT或SET PASSWORD等查询,并且这些查询以普通文本形式记载在日志文件中)。如果一个攻击者犹如日文件的读权限,只需在日志文件上运行grep寻找诸如GRANT和PASSWORD等词来发现敏感信息。 显然,你不想让服务器主机上的其他用户有数据库目录文件的写权限,

5、因为他们可以重写你的状态文件或数据库表文件,但是读权限也很危险。如果一个数据库表文件能被读取,偷取文件并得到MySQL本身,以普通文本显示表的内容也很麻烦,为什么?因为你要做下列事情:在服务器主机上安装你自己“特制”的MySQL服务器,但是有一个不同于官方服务器版本的端口、套接字和数据目录。 运行mysql_install_db初始化你的数据目录,这赋予你作为MySQL root用户访问你的服务器的权限,所以你有对服务器访问机制的完全控制,它也建立一个test数据库。 将对应于你想偷取得表文件拷贝到你服务器的数据库目录下的test目录。 启动你的服务器。你可以随意访问数据库表,SHOW TAB

6、LES FROM test显示你有一个偷来的表的拷贝,SELECT *显示它们任何一个的全部内容。 如果你确实很恶毒,将权限公开给你服务器的任何匿名用户,这样任何人能从任何地方连接服务器访问你的test数据库。你现在将偷来的数据库表公布于众了。 在考虑一下,从相反的角度,你想让别人对你这样吗?当然不!你可以通过在数据库录下执行ls -l命令确定你的数据库是否包含不安全的文件和目录。查找有“组”和“其他用户”权限设置的文件和目录。下面是一个不安全数据目录的一部分列出:% ls -ltotal 10148drwxrwxr-x11mysqladm wheel1024 May8 12:20 .drwx

7、r-xr-x22rootwheel512 May8 13:31 .drwx-2mysqladm mysqlgrp512 Apr 16 15:57 menageriedrwxrwxr-x2mysqladm wheel512 Jan 25 20:40 mysqldrwxrwxr-x7mysqladm wheel512 Aug 311998 sql-benchdrwxrwxr-x2mysqladm wheel1536 May6 06:11 testdrwx-2mysqladm mysqlgrp 1024 May8 18:43 tmp.正如你看到的,有些数据库有正确的权限,而其他不是。本例的情形是经过

8、一段时间后的结果。较少限制的权限由在权限设置方面比更新版本更不严格的较早版本服务器设置的(注意更具限制的目录menageria和tmp都有较近日期)。MySQL当前版本确保这些文件只能由运行服务器的用户读取。让我们来修正这些权限,使得只用服务器用户可访问它们。你的主要保护工具来自于由UNIX文件系统本身提供的设置文件和目录属主和模式的工具。下面是我们要做的:进入该目录% cd DATADIR设置所有在数据目录下的文件属主为由用于运行服务器的账号拥有(你必须以root执行这步)。在本文使用mysqladm和mysqlgrp作为该账号的用户名和组名。你可以使用下列命令之一改变属主:# chown

9、mysqladm.mysqlgrp .# find . -follow -type d -print | xargs chown mysqladm.mysqlgrp设置你的数据目录和数据库目录的模式使得他们只能由mysqladm读取,这阻止其他用户访问你数据库目录的内容。你可以用下列命令之一以root或mysqladm身份运行。% chmod -R go-rwx.% find . -follow -type d -print | xargs chmod go-rwx数据目录内容的属主和模式为mysqladm设置。现在你应该保证你总是以mysqladm用户运行服务器,因为现在这是唯一由访问数据库

10、目录权限的用户(除root)。 在完成这些设置后,你最终应该得到下面的数据目录权限:% ls -ltotal 10148drwxrwx-11mysqladm mysqlgrp 1024 May8 12:20 .drwxr-xr-x22rootwheel512 May8 13:31 .drwx-2mysqladm mysqlgrp512 Apr 16 15:57 menageriedrwx-2mysqladm mysqlgrp512 Jan 25 20:40 mysqldrwx-7mysqladm mysqlgrp512 Aug 311998 sql-benchdrwx-2mysqladm my

11、sqlgrp 1536 May6 06:11 testdrwx-2mysqladm mysqlgrp 1024 May8 18:43 tmp.二、外部安全性-保证网络访问的安全MySQL的安全系统是很灵活的,它允许你以多种不同方式设置用户权限。一般地,你可使用标准的SQL语句GRANT和REVOKE语句做,他们为你修改控制客户访问的授权表,然而,你可能由一个不支持这些语句的老版本的MySQL(在3.22.11之前这些语句不起作用),或者你发觉用户权限看起来不是以你想要的方式工作。对于这种情况,了解MySQL授权表的结构和服务器如何利用它们决定访问权限是有帮助的,这样的了解允许你通过直接修改授权

12、表增加、删除或修改用户权限,它也允许你在检查这些表时诊断权限问题。关于如何管理用户账号,见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 Us

13、er 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 Selec

14、t_priv Select_priv Update_priv Update_priv Update_priv File_priv Grant_priv Grant_priv Grant_privProcess_privReload_privShutdown_priv 表2 tables_priv和columns_priv属权表结构访问范围列 tables_privcolumns_priv HostHost DbDb UserUser Table_nameTable_name Column_name权限列 Table_privColumn_priv 授权表的内容有如下用途:user表user表列

15、出可以连接服务器的用户及其口令,并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限,并适用于所有数据库。例如,如果你启用了DELETE权限,在这里列出的用户可以从任何表中删除记录,所以在你这样做之前要认真考虑。 db表db表列出数据库,而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。 host表host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限,这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响,所以,你可能发觉你根本不是用它。 tables_priv表tables_priv表指定表级权限,在这里指定的一个权限适用于一个表的所有列。 columns_priv表columns_priv表指定列级权限。这里指定的权限适用于一个表的特定列。 在“不用GRANT设置用户”一节里,我们再讨论GRANT语句如何对修改这些表起作用,和你怎样能通过直接修改授权表达到同样的效果。tables_priv和co

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 教学/培训

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号