首页
|
Vista
|
WinXP
|
Java
|
程序开发
|
SEO优化
|
网络应用
|
硬件资讯
|
计算机等级认证
|
网站建设
|
问题帮助
|
图形图象
|
立珊英语
微软认证
|
思科认证
|
Java认证
|
Linux认证
|
Oracle认证
|
程序员
|
电子商务
|
网络工程
|
信息系统
|
软件设计
|
信息技术
|
网络管理
程序开发
编程语言
|
数据库开发
|
Web开发
|
移动开发
|
软件工程
|
电子商务
您现在的位置:
立珊计算机专业网
>
程序开发
>
数据库开发
>
Mysql
>> 文章内容
G
o
o
g
l
e
MySQL数据库配置技巧
2007-12-08 04:36:16 来源:
推荐给好友
收藏本页
保存本文
用root用户启动远程服务一直是安全大忌,因为如果服务程序出现问题,远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版
本开始时作了小小的改动,默认安装后服务要用mysql用户来启动,不允许root用户启动。如果非要用root用户来启动,必须加上--user=root
的参数(./safe_mysqld --user=root &)。因为MySQL中有LOAD DATA INFILE和SELECT ... INTO OUTFILE的SQL语句,如果是root用户启动了
MySQL服务器,那么,数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的,比如LOAD DATA INFILE只能读全局可读的文件
,SELECT ... INTO OUTFILE不能覆盖已经存在的文件。
本地的日志文件也不能忽视,包括shell的日志和MySQL自己的日志。有些用户在本地登陆或备份数据库的时候为了图方便,有时会在命令行参
数里直接带了数据库的密码,如:
shell>/usr/local/mysql/bin/mysqldump -uroot -ptest test>test.sql
shell>/usr/local/mysql/bin/mysql -uroot -ptest
这些命令会被shell记录在历史文件里,比如bash会写入用户目录的.bash_history文件,如果这些文件不慎被读,那么数据库的密码就会泄漏
。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码,也会
因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码,而是在提示后再输入数据库密码。
另外这两个文件我们也应该不让它记录我们的操作,以防万一。
shell>rm .bash_history .mysql_history
shell>ln -s /dev/null .bash_history
shell>ln -s /dev/null .mysql_history
上门这两条命令把这两个文件链接到/dev/null,那么我们的操作就不会被记录到这两个文件里了。
编程需要注意的一些问题
不管是用哪种程序语言写连接MySQL数据库的程序,有一条准则是永远不要相信用户提交的数据!
对于数字字段,我们要使用查询语句:SELECT * FROM table WHERE ID='234',不要使用SELECT * FROM table WHERE ID=234这样的查询语句
。MySQL会自动把字串转换为数字字符并且去除非数字字符。如果用户提交的数据经过了mysql_escape_string处理,这样我们就可以完全杜绝
了sql inject攻击,关于sql inject攻击请参考下面链接的文章:
http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf
http://www.ngssoftware.com/papers/advanced_sql_injection.pdf
各种编程语言该注意的问题:
1)所有Web程序:
a)尝试在Web表单输入单引号和双引号来测试可能出现的错误,并找出原因所在。
b)修改URL参数带的%22 ('"'), %23 ('#'), 和 %27 ('')。
c)对于数字字段的变量,我们的应用程序必须进行严格的检查,否则是非常危险的。
d)检查用户提交的数据是否超过字段的长度。
e)不要给自己程序连接数据库的用户过多的访问权限。
2)PHP:
a)检查用户提交的数据在查询之前是否经过addslashes处理,在PHP 4.0.3以后提供了基于MySQL C API的函数mysql_escape_string()。
3)MySQL C API:
a)检查查询字串是否用了mysql_escape_string() API调用。
4)MySQL++:
a)检查查询字串是否用了escape和quote处理。
5)Perl DBI:
a)检查查询字串是否用了quote()方法。
6)Java JDBC:
a)检查查询字串是否用了PreparedStatement对象。
4、一些小窍门
1)如果不慎忘记了MySQL的root密码,我们可以在启动MySQL服务器时加上参数--skip-grant-tables来跳过授权表的验证 (./safe_mysqld
--skip-grant-tables &),这样我们就可以直接登陆MySQL服务器,然后再修改root用户的口令,重启MySQL就可以用新口令登陆了。
2)启动MySQL服务器时加上--skip-show-database使一般数据库用户不能浏览其它数据库。
3)启动MySQL服务器时加上--chroot=path参数,让mysqld守护进程运行在chroot环境中。这样SQL语句LOAD DATA INFILE和SELECT ... INTO
OUTFILE就限定在chroot_path下读写文件了。这里有一点要注意,MySQL启动后会建立一个mysql.sock文件,默认是在/tmp目录下。使用了
chroot后,MySQL会在chroot_path/tmp去建立mysql.sock文件,如果没有chroot_path/tmp目录或启动MySQL的用户没有这个目录写权限就不能
建立mysql.sock文件,MySQL会启动失败。比如我们加了--chroot=/usr/local/mysql/启动参数,那么最好建立一个启动MySQL的用户能写的
/usr/local/mysql/tmp目录,当然我们也可以用--socket=path来指定mysql.sock文件的路径,但这个path一定要在chroot_path里面。
4)启动MySQL服务器时加上--log-slow-queries[=file]参数,这样mysqld会把SQL命令执行时间超过long_query_time的写入file文件。如果没
有指定=file,mysqld默认会写到数据目录下的hostname-slow.log。如果只指定了filename,没有指定路径,那么mysqld也会把filename写到
数据目录下。我们通过这个日志文件可以找出执行时间超长的查询语句,然后尽可能的优化它减轻MySQL服务器的负担。
5)如果我们只需本机使用MySQL服务,那么我们还可以加上--skip-networking启动参数使MySQL不监听任何TCP/IP连接,增加安全性
转贴于:立珊网络计算机专业网站
相关关键字:
技巧
配置
数据库
MySQL
用户
文件
启动
我们
如果
root
上一篇:
帮助你开发基于MySQL数据库的论坛设计
下一篇:
如何利用Debugview方式来调试MySQL UDF
【
设为主页
】【
加入收藏
】【
打印本文
】【
回到顶部
】【
关闭此页
】
点击查看
已有
0
位对此新闻感兴趣的网友发表了看法
我的通行证:
密码:
验证码:
匿名
注册通行证
相关文章
·
如何利用Debugview方式来调试MySQL UDF
·
Linux系统下使用Coredump时应注意事项
·
讲解MySQL服务器安装之后如何调节性能
·
MySQL服务器内部安全数据目录如何访问
·
完全优化MySQL数据库性能的八大巧方法
·
MySQL系统服务安装与卸载精彩问题汇总
·
MySQL数据库中SELECT语句快速精细掌握
·
如何利用MySQL加密函数保护Web网站敏感数据
·
MySQL正则表达式的描述
·
MySQL数据库备份
推荐文章
·
MySQL权威指南读书笔记
·
PHP之Smarty指导入门
·
MySQL数据库备份
·
MySQL数据库中SELECT语句快速精细掌握
·
MySQL 5.0 数据库的新特性的存储过程
·
用PHP实现验证码功能
·
数据库新手入门之MySQL中如何定义外键
·
MySQL中多表操作和批处理详细介绍
·
使用批处理对MySQL进行数据批量操作
·
MySQL系统服务安装与卸载精彩问题汇总
Java编程技巧
JSP Servlet JSF异常框架设计
JAVA异常处理方式的区别和分析
java中判断字符串是否数字的两种方法
判断数字、整数的方法 isNumeric()、isIn
Spring破冰之旅 始于足下
为Java程序中添加播放MIDI音乐功能
彻底明白 Java 语言中的IO系统
Java 6.0 操作脚本语言基础
使用Java操作Windows系统注册表
动态调用动态语言之Java脚本API
Spring集成XFire开发WebService
Java对象的序列化和反序列化实践
Java开发中的事件驱动模型实例详解
数据库开发
SQL Server与Oracle并行访问的本质区别
SQL Server2005的XML数据类型
SQL Server2005 SQLCLR代码安全性
SQL Server 查询分析器快捷键
Sql2005如何用dtexec运行ssis(DTS)包
生成100万不重复的8位编号
SELECT 赋值与ORDER BY冲突的问题
将SQL Server中的表变成txt文件
一些异常精妙的"SQL"语句
Microsoft数据平台开发与SQL Server 2008
Web网页系统开发
Javascript IDE Apatana
用json和script标签解决ajax的跨域问题
Javascript技术优化计划
escape、encodeURI、encodeURIComponent
PHP常见图形操作 玩转图像函数库
[原创]用Javascript获取系统日期
PHP中for循环语句的变型
用PHPdig打造属于你自己的Google
使用php作linux自动执行脚本
在PHP中实现进程间通讯
PHP下对缓冲区的控制
在 PHP 中用描点法“绘制”中文
PHP中路径问题的解决途径
使用数据库保存session的方法
PHP和MySQL开发的8个技巧
Delphi程序设计
一个需求分析说明书的例子
软件需求分析方法总结
Java新手上路Flash教程中文版
基于UML的短消息计费系统的分析
网站项目系统分析及软件建模
需求分析
如何进行系统分析
软件工程领域中项目管理实施体会
软件工程之需求分析
Linux操作平台
使用Tftp从网络引导Debian进行系统安装
Shell脚本显示当前网络连接与对应物理地
Linux系统下对文件进行分割与合并的技巧
Linux服务器傻瓜式安装完全接触(下)
Linux服务器傻瓜式安装完全手册
在你的Ubuntu Linux桌面上嵌入终端窗口
Linux操作系统实用技巧精彩汇集
Linux操作系统下虚拟光驱(iso)的挂载
使用Unix命令行模式高效地进行文本编辑
基于SCIM输入法自己配置一个“万能五笔”
如何使Linux系统上的程序开机后自动运行
在Ubuntu系统下安装*.bin程序
关于站点
-
广告服务
-
联系我们
-
版权隐私
-
免责声明
-
网站地图
-
意见反馈
立珊计算机IT网 版权所有. . 对本站有任何建议、意见或投诉,可以联系我们.
Copyright©2007 Www.Lis123.Com All Rights Reserved.