<?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>思维 &#187; 数据相关</title>
	<atom:link href="http://blog.acmind.com/archives/tag/database/feed" rel="self" type="application/rss+xml" />
	<link>http://blog.acmind.com</link>
	<description>Acme of Mind</description>
	<lastBuildDate>Mon, 19 Apr 2010 02:23:51 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>WordPress 数据库清理插件 &#8211; Clean Options Plugin</title>
		<link>http://blog.acmind.com/archives/571</link>
		<comments>http://blog.acmind.com/archives/571#comments</comments>
		<pubDate>Mon, 01 Jun 2009 01:21:57 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[博建专区]]></category>
		<category><![CDATA[clean options plugin]]></category>
		<category><![CDATA[插件]]></category>
		<category><![CDATA[清理]]></category>
		<category><![CDATA[数据相关]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=571</guid>
		<description><![CDATA[WordPress 博客程序有许多优秀的插件可以拓展博客的功能，但也会在你的数据库里插入大量的数据，包括一些可能会拖垮你的博客的垃圾数据。如何清理这些插件产生的数据呢？尤其是当你不想再使用这些 WordPress 插件和主题之后。今天这篇文章将是你所需要的：WordPress 数据库清理插件 – Clean Options Plugin。
在使用Wordpress的过程中，我们常常在启用或停用某些插件或是主题。
当你停用并删除某些插件或是主题的时候，也许你会认为它们已经彻底被删除，并远离你的博客。其实不然，还有或多或少的残留文件还悄悄地隐藏在你Wordpress数据库中的wp_options表中！长此以往，在不知不觉中你的数据库就会越来越臃肿！
不但如此，在WordPress管理后台的首页或其他页面，还会自动生成一些rss的缓存，并保存到wp_options里面，而这些内容往往很多很庞大！
当你打开每一个页面时，就会通过get_option()函数查询wp_options表里的数据！因此wp_options里多余的数据不仅是垃圾数据，而且严重影响你博客的速度！
哈哈！是不是越听越可怕，越听越严重？
没有关系，今天就给你介绍一款数据库清道夫——Clean Options plugin
Clean Options plugin 为广大 Wordpress Bloggers 提供了一个管理他们数据库中wp_options数据表的简便方法。并且它有许多内置的安全机制，这将有助于防止因意外删除的表行而造成博客运行的错误。它的目的就是让插件用户轻松和安全地维护wp_options数据表，从而提高其博客运行的速度，并保持这种状态！
它不但提供预警信息，以提醒用户可能会遇到的潜在问题。还可以通过链接wp-admin/options.php网页，或使用谷歌搜索链接双重检查选项名称。另外你还可以通过搜索wp-content文件夹中不被get_option()函数查询的数据名称。
Clean Options plugin 工作环境： PHP &#62;= 4.2.0 或 PHP 5

上图是城市@后在使用 Clean Options plugin 插件优化数据库前后，数据库大小的对比情况，竟然缩减了104kb，数据库体积减小33%！优化效果毋庸置疑！
Clean Options plugin 的使用：
1.下载插件-&#62;解压缩-&#62;上传’cleanoptions.php’文件到你的插件库中
2.在后台激活插件后，你可以在&#34;Tools&#34;栏中找到&#34;CleanOptions&#34;选项
3.进入选项，按提示进行优化即可
插件下载：
1.官方原版英文下载：下载
2.由于某些同学的英文不太好,我把插件关键地方简单的汉化了一下,你可以下载这个汉化版先进行使用,熟悉后再换成官方原版使用(如有翻译错误,还请指正)：城市@后汉化版下载：下载
&#160;
摘自：http://wpchina.org/wordpress-clean-options-plugin-509/
]]></description>
			<content:encoded><![CDATA[<p><a href="http://wpchina.org/">WordPress</a> 博客程序有许多优秀的插件可以拓展博客的功能，但也会在你的数据库里插入大量的数据，包括一些可能会拖垮你的博客的垃圾数据。如何清理这些插件产生的数据呢？尤其是当你不想再使用这些 WordPress 插件和主题之后。今天这篇文章将是你所需要的：WordPress 数据库清理插件 – Clean Options Plugin。</p>
<p>在使用Wordpress的过程中，我们常常在启用或停用某些插件或是主题。</p>
<p>当你停用并删除某些插件或是主题的时候，也许你会认为它们已经彻底被删除，并远离你的博客。其实不然，还有或多或少的残留文件还悄悄地隐藏在你Wordpress数据库中的wp_options表中！长此以往，在不知不觉中你的数据库就会越来越臃肿！</p>
<p>不但如此，在WordPress管理后台的首页或其他页面，还会自动生成一些rss的缓存，并保存到wp_options里面，而这些内容往往很多很庞大！</p>
<p>当你打开每一个页面时，就会通过get_option()函数查询wp_options表里的数据！因此wp_options里多余的数据不仅是垃圾数据，而且严重影响你博客的速度！</p>
<p>哈哈！是不是越听越可怕，越听越严重？</p>
<p>没有关系，今天就给你介绍一款<strong>数据库清道夫——Clean Options plugin</strong></p>
<p>Clean Options plugin 为广大 Wordpress Bloggers 提供了一个管理他们数据库中wp_options数据表的简便方法。并且它有许多内置的安全机制，这将有助于防止因意外删除的表行而造成博客运行的错误。它的目的就是让插件用户轻松和安全地维护wp_options数据表，从而提高其博客运行的速度，并保持这种状态！</p>
<p>它不但提供预警信息，以提醒用户可能会遇到的潜在问题。还可以通过链接wp-admin/options.php网页，或使用谷歌搜索链接双重检查选项名称。另外你还可以通过搜索wp-content文件夹中不被get_option()函数查询的数据名称。</p>
<p>Clean Options plugin 工作环境： PHP &gt;= 4.2.0 或 PHP 5</p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001.jpg" class="highslide-image" onclick="return hs.expand(this);"><img title="clip_image001" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="70" alt="clip_image001" src="http://blog.acmind.com/wp-content/uploads/2009/06/clip-image001-thumb.jpg" width="517" border="0" /></a></p>
<p>上图是<a href="http://www.aftertown.cn/">城市@后</a>在使用 Clean Options plugin 插件优化数据库前后，数据库大小的对比情况，竟然缩减了104kb，<strong>数据库体积减小33%！</strong>优化效果毋庸置疑！</p>
<p><strong>Clean Options plugin </strong><strong>的使用：</strong></p>
<p>1.下载插件-&gt;解压缩-&gt;上传’cleanoptions.php’文件到你的插件库中</p>
<p>2.在后台激活插件后，你可以在&quot;Tools&quot;栏中找到&quot;CleanOptions&quot;选项</p>
<p>3.进入选项，按提示进行优化即可</p>
<p><strong>插件下载：</strong></p>
<p>1.官方原版英文下载：<a href="http://downloads.wordpress.org/plugin/clean-options.zip">下载</a></p>
<p>2.由于某些同学的英文不太好,我把插件关键地方简单的汉化了一下,你可以下载这个汉化版先进行使用,熟悉后再换成官方原版使用(如有翻译错误,还请指正)：城市@后汉化版下载：<a href="http://www.box.net/shared/aq9m32ljil">下载</a></p>
<p>&#160;</p>
<p>摘自：<a title="http://wpchina.org/wordpress-clean-options-plugin-509/" href="http://wpchina.org/wordpress-clean-options-plugin-509/">http://wpchina.org/wordpress-clean-options-plugin-509/</a></p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/571/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>MySQL数据库安全配置</title>
		<link>http://blog.acmind.com/archives/348</link>
		<comments>http://blog.acmind.com/archives/348#comments</comments>
		<pubDate>Wed, 27 May 2009 07:39:32 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[数据相关]]></category>
		<category><![CDATA[安全]]></category>
		<category><![CDATA[配置]]></category>
		<category><![CDATA[MySQL]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=348</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&#160;&#160;&#160; 2 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb [...]]]></description>
			<content:encoded><![CDATA[<p>1、前言   </p>
<p>MySQL 是完全网络化的跨平台关系型数据库系统，同时是具有客户机/服务器体系结构的分布式数据库管理系统。它具有功能强、使用简便、管理方便、运行速度快、安全可靠性强等优点，用户可利用许多语言编写访问MySQL 数据库的程序，特别是与PHP更是黄金组合，运用十分广泛。    <br />由于MySQL是多平台的数据库，它的默认配置要考虑各种情况下都能适用，所以在我们自己的使用环境下应该进行进一步的安全加固。作为一个MySQL的系统管理员，我们有责任维护MySQL数据库系统的数据安全性和完整性。    <br />MySQL数据库的安全配置必须从两个方面入手，系统内部安全和外部网络安全，另外我们还将简单介绍编程时要注意的一些问题以及一些小窍门。    </p>
<p>2、系统内部安全    </p>
<p>首先简单介绍一下MySQL数据库目录结构。MySQL安装好，运行了mysql_db_install脚本以后就会建立数据目录和初始化数据库。如果我们用MySQL源码包安装，而且安装目录是/usr/local/mysql，那么数据目录一般会是/usr/local/mysql/var。数据库系统由一系列数据库组成，每个数据库包含一系列数据库表。MySQL是用数据库名在数据目录建立建立一个数据库目录，各数据库表分别以数据库表名作为文件名，扩展名分别为MYD、MYI、frm的三个文件放到数据库目录中。    <br />MySQL的授权表给数据库的访问提供了灵活的权限控制，但是如果本地用户拥有对库文件的读权限的话，攻击者只需把数据库目录打包拷走，然后拷到自己本机的数据目录下就能访问窃取的数据库。所以MySQL所在的主机的安全性是最首要的问题，如果主机不安全，被攻击者控制，那么MySQL的安全性也无从谈起。其次就是数据目录和数据文件的安全性，也就是权限设置问题。    <br />从MySQL主站一些老的binary发行版来看，3.21.xx版本中数据目录的属性是775，这样非常危险，任何本地用户都可以读数据目录，所以数据库文件很不安全。3.22.xx版本中数据目录的属性是770，这种属性也有些危险，本地的同组用户既能读也能写，所以数据文件也不安全。3.23.xx 版本数据目录的属性是700，这样就比较好，只有启动数据库的用户可以读写数据库文件，保证了本地数据文件的安全。    <br />如果启动MySQL数据库的用户是mysql，那么象如下的目录和文件的是安全的，请注意数据目录及下面的属性：    <br />shell&gt;ls -l /usr/local/mysql    <br />total 40    <br />drwxrwxr-x&#160;&#160;&#160; 2 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 bin    <br />drwxrwxr-x&#160;&#160;&#160; 3 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 include    <br />drwxrwxr-x&#160;&#160;&#160; 2 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 info    <br />drwxrwxr-x&#160;&#160;&#160; 3 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 lib    <br />drwxrwxr-x&#160;&#160;&#160; 2 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 libexec    <br />drwxrwxr-x&#160;&#160;&#160; 3 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 man    <br />drwxrwxr-x&#160;&#160;&#160; 6 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 mysql-test    <br />drwxrwxr-x&#160;&#160;&#160; 3 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 share    <br />drwxrwxr-x&#160;&#160;&#160; 7 root&#160;&#160;&#160;&#160; root&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 sql-bench    <br />drwx&#8212;&#8212;&#160;&#160;&#160; 4 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:07 var    <br />shell&gt;ls -l /usr/local/mysql/var    <br />total 8    <br />drwx&#8212;&#8212;&#160;&#160;&#160; 2 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:08 mysql    <br />drwx&#8212;&#8212;&#160;&#160;&#160; 2 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 4096 Feb 27 20:08 test    <br />shell&gt;ls -l /usr/local/mysql/var/mysql    <br />total 104    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0 Feb 27 20:08 columns_priv.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1024 Feb 27 20:08 columns_priv.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8778 Feb 27 20:08 columns_priv.frm    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 302 Feb 27 20:08 db.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 3072 Feb 27 20:08 db.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8982 Feb 27 20:08 db.frm    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0 Feb 27 20:08 func.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1024 Feb 27 20:08 func.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8641 Feb 27 20:08 func.frm    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0 Feb 27 20:08 host.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1024 Feb 27 20:08 host.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8958 Feb 27 20:08 host.frm    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 0 Feb 27 20:08 tables_priv.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 1024 Feb 27 20:08 tables_priv.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 8877 Feb 27 20:08 tables_priv.frm    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 428 Feb 27 20:08 user.MYD    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 2048 Feb 27 20:08 user.MYI    <br />-rw&#8212;&#8212;-&#160;&#160;&#160; 1 mysql&#160;&#160;&#160; mysql&#160;&#160;&#160;&#160;&#160;&#160;&#160; 9148 Feb 27 20:08 user.frm    <br />如果这些文件的属主及属性不是这样，请用以下两个命令修正之：    <br />shell&gt;chown -R mysql.mysql /usr/local/mysql/var    <br />shell&gt;chmod -R go-rwx /usr/local/mysql/var    <br />用root用户启动远程服务一直是安全大忌，因为如果服务程序出现问题，远程攻击者极有可能获得主机的完全控制权。MySQL从3.23.15版本开始时作了小小的改动，默认安装后服务要用mysql用户来启动，不允许root用户启动。如果非要用root用户来启动，必须加上-user=root的参数 (./safe_mysqld -user=root &amp;)。因为MySQL中有LOAD DATA INFILE和SELECT &#8230; INTO OUTFILE的SQL语句，如果是root用户启动了MySQL服务器，那么，数据库用户就拥有了root用户的写权限。不过MySQL还是做了一些限制的，比如LOAD DATA INFILE只能读全局可读的文件，SELECT &#8230; INTO OUTFILE不能覆盖已经存在的文件。    <br />本地的日志文件也不能忽视，包括shell的日志和MySQL自己的日志。有些用户在本地登陆或备份数据库的时候为了图方便，有时会在命令行参数里直接带了数据库的密码，如：    <br />shell&gt;/usr/local/mysql/bin/mysqldump -uroot -ptest test&gt;test.sql    <br />shell&gt;/usr/local/mysql/bin/mysql -uroot -ptest    <br />这些命令会被shell记录在历史文件里，比如bash会写入用户目录的.bash_history文件，如果这些文件不慎被读，那么数据库的密码就会泄漏。用户登陆数据库后执行的SQL命令也会被MySQL记录在用户目录的.mysql_history文件里。如果数据库用户用SQL语句修改了数据库密码，也会因.mysql_history文件而泄漏。所以我们在shell登陆及备份的时候不要在-p后直接加密码，而是在提示后再输入数据库密码。    <br />另外这两个文件我们也应该不让它记录我们的操作，以防万一。    <br />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    <br />上门这两条命令把这两个文件链接到/dev/null，那么我们的操作就不会被记录到这两个文件里了。    <br />外部网络安全    <br />MySQL数据库安装好以后，Unix平台的user表是这样的：    <br />mysql&gt; use mysql;    <br />Database changed    <br />mysql&gt; select Host,User,Password,Select_priv,Grant_priv from user;    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />| Host&#160;&#160;&#160;&#160;&#160; | User | Password | Select_priv | Grant_priv |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />| localhost | root |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| redhat&#160;&#160;&#160; | root |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| localhost |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| redhat&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />4 rows in set (0.00 sec)    <br />Windows平台的user表是这样的：    <br />mysql&gt; use mysql;    <br />Database changed    <br />mysql&gt; select Host,User,Password,Select_priv,Grant_priv from user;    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />| Host&#160;&#160;&#160;&#160;&#160; | User | Password | Select_priv | Grant_priv |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />| localhost | root |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| %&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | root |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| localhost |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Y&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| %&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;+    <br />4 rows in set (0.00 sec)    <br />我们先来看Unix平台的user表。其中redhat只是我试验机的机器名，所以实际上Unix平台的MySQL默认只允许本机才能连接数据库。但是缺省root用户口令是空，所以当务之急是给root用户加上口令。给数据库用户加口令有三种方法：    <br />1)在shell提示符下用mysqladmin命令来改root用户口令    <br />shell&gt;mysqladmin -uroot password test    <br />这样，MySQL数据库root用户的口令就被改成test了。（test只是举例，我们实际使用的口令一定不能使用这种易猜的弱口令）    <br />2)用set password修改口令：    <br />mysql&gt; set password for root@localhost=password(&#8216;test&#8217;);    <br />这时root用户的口令就被改成test了。    <br />3)直接修改user表的root用户口令    <br />mysql&gt; use mysql;    <br />mysql&gt; update user set password=password(&#8216;test&#8217;) where user=&#8217;root&#8217;;    <br />mysql&gt; flush privileges;    <br />这样，MySQL数据库root用户的口令也被改成test了。其中最后一句命令flush privileges的意思是强制刷新内存授权表，否则用的还是缓冲中的口令，这时非法用户还可以用root用户及空口令登陆，直到重启MySQL服务器。    <br />我们还看到user为空的匿名用户，虽然它在Unix平台下没什么权限，但为了安全起见我们应该删除它：    <br />mysql&gt; delete from user where user=&#8221;;    <br />Windows版本MySQL的user表有很大不同，我们看到Host字段除了localhost还有是%。这里%的意思是允许任意的主机连接MySQL服务器，这是非常不安全的，给攻击者造成可乘之机，我们必须删除Host字段为%的记录：    <br />mysql&gt;delete from user where host=&#8217;%';    <br />默认root用户的空密码也是必须修改，三种修改方法和Unix平台一样。    <br />我们注意到Host字段为localhost的匿名用户拥有所有的权限！就是说本地用户用空的用户名和空的口令登陆MySQL数据库服务器可以得到最高的权限！所以匿名用户必须删除！    <br />mysql&gt; delete from user where user=&#8221;;    <br />对user表操作以后不要忘了用flush privileges来强制刷新内存授权表，这样才能生效。    <br />默认安装的Windows版MySQL存在的不安全因素太多，我们在安装后一定要进一步配置！    <br />MySQL的5个授权表：user, db, host, tables_priv和columns_priv提供非常灵活的安全机制，从MySQL 3.22.11开始引入了两条语句GRANT和REVOKE来创建和删除用户权限，可以方便的限制哪个用户可以连接服务器，从哪里连接以及连接后可以做什么操作。作为MySQL管理员，我们必须了解授权表的意义以及如何用GRANT和REVOKE来创建用户、授权和撤权、删除用户。    <br />在3.22.11版本以前的MySQL授权机制不完善，和新版本也有较大的不同，建议升级到最新版本的MySQL。（本书的操作例子是以MySQL 3.23.49为样本）    <br />我们先来了解授权表的结构。    <br />1)MySQL授权表的结构与内容：    <br />mysql&gt; desc user;    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Field&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Null | Key | Default | Extra |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Host&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(60) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| User&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(16) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Password&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(16) binary |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Select_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Insert_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Update_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Delete_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Create_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Drop_priv&#160;&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Reload_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Shutdown_priv&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Process_priv&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| File_priv&#160;&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Grant_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| References_priv | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Index_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Alter_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />17 rows in set (0.01 sec)    <br />user表是5个授权表中最重要的一个，列出可以连接服务器的用户及其加密口令，并且它指定他们有哪种全局（超级用户）权限。在user表启用的任何权限均是全局权限，并适用于所有数据库。所以我们不能给任何用户访问mysql.user表的权限！    <br />权限说明：    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| 权限指定符| 列名&#160;&#160;&#160;&#160;&#160;&#160;&#160; |权限操作&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Select&#160;&#160;&#160; | Select_priv | 允许对表的访问，不对数据表进行访问的select语句不受影响，比如select 1+1|    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Insert&#160;&#160;&#160; | Insert_priv | 允许对表用insert语句进行写入操作。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Update&#160;&#160;&#160; | Update_priv | 允许用update语句修改表中现有记录。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Delete&#160;&#160;&#160; | Delete_priv | 允许用delete语句删除表中现有记录。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Create&#160;&#160;&#160; | Create_priv | 允许建立新的数据库和表。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Drop&#160;&#160;&#160;&#160;&#160; | Drop_priv&#160;&#160; | 允许删除现有的数据库和表。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Index&#160;&#160;&#160;&#160; | Index_priv&#160; | 允许创建、修改或删除索引。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Alter&#160;&#160;&#160;&#160; | Alter_priv&#160; | 允许用alter语句修改表结构。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Grant&#160;&#160;&#160;&#160; | Grant_priv&#160; | 允许将自己拥有的权限授予其它用户，包括grant。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Reload&#160;&#160;&#160; | Reload&#160;&#160;&#160;&#160;&#160; | 允许重载授权表，刷新服务器等命令。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Shutdown&#160; | Shudown_priv| 允许用mysqladmin shutdown命令关闭MySQL服务器。该权限比较危险，&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | 不应该随便授予。&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Process&#160;&#160; | Process_priv| 允许查看和终止MySQL服务器正在运行的线程（进程）以及正在执行的查询语句 |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | ，包括执行修改密码的查询语句。该权限比较危险，不应该随便授予。&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| File&#160;&#160;&#160;&#160;&#160; | File_priv&#160;&#160; | 允许从服务器上读全局可读文件和写文件。该权限比较危险，不应该随便授予。|    <br />+&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />mysql&gt; desc db;    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Field&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Null | Key | Default | Extra |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Host&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(60) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Db&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(64) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| User&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(16) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Select_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Insert_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Update_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Delete_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Create_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Drop_priv&#160;&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Grant_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| References_priv | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Index_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Alter_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />13 rows in set (0.01 sec)    <br />db表列出数据库，而用户有权限访问它们。在这里指定的权限适用于一个数据库中的所有表。    <br />mysql&gt; desc host;    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Field&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Null | Key | Default | Extra |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Host&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(60) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Db&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(64) binary |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Select_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Insert_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Update_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Delete_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Create_priv&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Drop_priv&#160;&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Grant_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| References_priv | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Index_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Alter_priv&#160;&#160;&#160;&#160;&#160; | enum(&#8216;N&#8217;,'Y&#8217;)&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; | N&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />12 rows in set (0.01 sec)    <br />host表与db表结合使用在一个较好层次上控制特定主机对数据库的访问权限，这可能比单独使用db好些。这个表不受GRANT和REVOKE语句的影响，所以，你可能发觉你根本不是用它。    <br />mysql&gt; desc tables_priv;    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Field&#160;&#160;&#160;&#160;&#160;&#160; | Type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Null | Key | Default | Extra |    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Host&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(60) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Db&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(64) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| User&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(16) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Table_name&#160; | char(60) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Grantor&#160;&#160;&#160;&#160; | char(77)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | MUL |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Timestamp&#160;&#160; | timestamp(14)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | YES&#160; |&#160;&#160;&#160;&#160; | NULL&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Table_priv&#160; | set(&#8216;Select&#8217;,'Insert&#8217;,&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;Update&#8217;,'Delete&#8217;,'Create&#8217;, |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;Drop&#8217;,'Grant&#8217;,'References&#8217;,|&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;Index&#8217;,'Alter&#8217;)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Column_priv | set(&#8216;Select&#8217;,'Insert&#8217;,&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;Update&#8217;,'References&#8217;)&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />8 rows in set (0.01 sec)    <br />tables_priv表指定表级权限。在这里指定的一个权限适用于一个表的所有列。    <br />mysql&gt; desc columns_priv;    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Field&#160;&#160;&#160;&#160;&#160;&#160; | Type&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | Null | Key | Default | Extra |    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />| Host&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(60) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Db&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(64) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| User&#160;&#160;&#160;&#160;&#160;&#160;&#160; | char(16) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Table_name&#160; | char(64) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Column_name | char(64) binary&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160; | PRI |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Timestamp&#160;&#160; | timestamp(14)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | YES&#160; |&#160;&#160;&#160;&#160; | NULL&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />| Column_priv | set(&#8216;Select&#8217;,'Insert&#8217;, |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />|&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;Update&#8217;,'References&#8217;) |&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;-+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;+&#8212;&#8212;+&#8212;&#8211;+&#8212;&#8212;&#8212;+&#8212;&#8212;-+    <br />7 rows in set (0.00 sec)    <br />columns_priv表指定列级权限。在这里指定的权限适用于一个表的特定列。    <br />2)MySQL授权表运行机制    <br />MySQL的访问控制分两个步骤：    <br />a)服务器检查是否允许该用户连接。    <br />b)如果该用户有权连接，那么服务器还会检查它的每一个请求是否有足够的权限。比如：用户检索数据库中的一个表需要有这个数据库的select权限，用户删除数据库中的一个表需要有这个数据库的drop权限。    <br />授权表的user, db, host表使用这两个步骤，tables_priv和columns_priv表只使用第二步（检查请求）。每个授权表包含决定一个权限何时运用的范围列和决定授予哪种权限的权限列。    <br />范围列指定表中的权限何时运用。每个授权表条目包含User和Host列来指定权限何时运用于一个给定用户从给定主机的连接。其他表包含附加的范围列，如 db表包含一个Db列指出权限运用于哪个数据库。类似地，tables_priv和columns_priv表包含范围字段，缩小范围到一个数据库中的特定表或一个表的特定列。    <br />下面是user表的Host字段和User字段组合的一些例子：    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| Host值&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | User值 | 匹配的连接&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;x.y.z&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户只能从x.y.z连接数据库&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;x.y.z&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8221;&#160;&#160;&#160;&#160; | 任何用户可以从x.y.z连接数据库&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;%&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户可以从任意主机连接数据库&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8221;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8221;&#160;&#160;&#160;&#160; | 任何用户可以从任意主机连接数据库&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;%.y.z&#8217;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户可以从y.z域的任意主机连接数据库&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;x.y.% &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户可以从x.y.net, x.y.com, x.y.edu等主机连接数据库|    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;192.168.1.1&#8242;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户可以从IP地址为192.168.1.1的主机连接数据库&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;192.168.1.% &#8216;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; | &#8216;test&#8217; | test用户可以从C类子网192.168.1中的任意主机连接数据库&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />| &#8216;192.168.1.0/255.255.255.0&#8242; | &#8216;test&#8217; | 同上&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; |    <br />+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+&#8212;&#8212;&#8211;+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+    <br />SQL的字符串通配符%表示匹配任意字符，可以是0个字符，通配符_表示匹配一个字符。    <br />权限列指出在范围列中指定的用户拥有何种权限。该表使用GRANT语句的权限名称。对于绝大多数在user、db和host表中的权限列的名称与GRANT语句中有明显的联系。如Select_priv对应于SELECT权限。    <br />3)授权表使用举例    <br />grant用于给增加用户和创建权限，revoke用于删除用户权限。    <br />下面是一些用grant增加用户和创建权限的例子：    <br />mysql&gt; grant all privileges on *.* to test@localhost identified by &#8216;test&#8217; with grant option;    <br />这句增加一个本地具有所有权限的test用户（超级用户），密码是test。ON子句中的*.*意味着&quot;所有数据库、所有表&quot;。with grant option表示它具有grant权限。    <br />mysql&gt; grant select,insert,update,delete,create,drop privileges on test.* to test1@&#8217;192.168.1.0/255.255.255.0&#8242; identified by &#8216;test&#8217;;    <br />这句是增加了一个test1用户，口令是test，但是它只能从C类子网192.168.1连接，对test库有select,insert,update,delete,create,drop操作权限。    <br />用grant语句创建权限是不需要再手工刷新授权表的，因为它已经自动刷新了。    <br />给用户创建权限还可以通过直接修改授权表：    <br />mysql&gt; insert into user values(&quot;localhost&quot;,&quot;test&quot;,password(&quot;test&quot;),&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;);    <br />mysql&gt; flush privileges;    <br />这两句和上面第一句grant的效果是一样的，也是增加了一个本地的test超级用户。我们看到用grant方便多了，而且还不需flush privileges。    <br />mysql&gt; insert into user (host,user,password) values(&quot;192.168.1.0/255.255.255.0&quot;,&quot;test1&quot;,PASSWORD(&quot;test&quot;));    <br />mysql&gt; insert into db values(&quot;192.168.1.0/255.255.255.0&quot;,&quot;test&quot;,&quot;test1&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;Y&quot;,&quot;N&quot;,&quot;N&quot;,&quot;N&quot;,&quot;N&quot;)    <br />mysql&gt; flush privileges;    <br />这三句和上面第二句grant的效果也是一样的，也是增加了一个只能从C类子网192.168.1连接，对test库有select,insert,update,delete,create,drop操作权限的test1用户，口令是test。    <br />要取消一个用户的权限，使用revoke语句。revoke的语法非常类似于grant语句，除了to用from取代并且没有identified by和with grant option子句，下面是用revoke删除用户权限的例子：    <br />mysql&gt; revoke all on test.* from test1@&#8217;192.168.1.0/255.255.255.0&#8242;;    <br />这句revoke就撤消了上面第二句grant创建的权限，但是test1用户并没有被删除，必须手工从user表删除：    <br />mysql&gt; delete from user where user=&#8217;test1&#8242;;    <br />mysql&gt; flush privileges;    <br />这样，test1用户就彻底删除了。    <br />这些只是MySQL授权表的简单使用，更多详细的资料请见MySQL提供的手册。    </p>
<p>3、编程需要注意的一些问题    </p>
<p>不管是用哪种程序语言写连接MySQL数据库的程序，有一条准则是永远不要相信用户提交的数据！    <br />对于数字字段，我们要使用查询语句：SELECT * FROM table WHERE ID=&#8217;234&#8242;，不要使用SELECT * FROM table WHERE ID=234这样的查询语句。MySQL会自动把字串转换为数字字符并且去除非数字字符。如果用户提交的数据经过了 mysql_escape_string处理，这样我们就可以完全杜绝了sql inject攻击，关于sql inject攻击请参考下面链接的文章：    <br /><a href="http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf">http://www.spidynamics.com/papers/SQLInjectionWhitePaper.pdf</a>    <br /><a href="http://www.ngssoftware.com/papers/advanced_sql_injection.pdf">http://www.ngssoftware.com/papers/advanced_sql_injection.pdf</a>    <br />各种编程语言该注意的问题：    <br />1)所有Web程序：    <br />a)尝试在Web表单输入单引号和双引号来测试可能出现的错误，并找出原因所在。    <br />b)修改URL参数带的%22 (&#8216;&quot;&#8217;), %23 (&#8216;#&#8217;), 和 %27 (&#8221;&#8217;)。    <br />c)对于数字字段的变量，我们的应用程序必须进行严格的检查，否则是非常危险的。    <br />d)检查用户提交的数据是否超过字段的长度。    <br />e)不要给自己程序连接数据库的用户过多的访问权限。    <br />2)PHP：    <br />a)检查用户提交的数据在查询之前是否经过addslashes处理，在PHP 4.0.3以后提供了基于MySQL C API的函数mysql_escape_string()。    <br />3)MySQL C API：    <br />a)检查查询字串是否用了mysql_escape_string() API调用。    <br />4)MySQL++：    <br />a)检查查询字串是否用了escape和quote处理。    <br />5)Perl DBI：    <br />a)检查查询字串是否用了quote()方法。    <br />6)Java JDBC：    <br />a)检查查询字串是否用了PreparedStatement对象。    </p>
<p>4、一些小窍门    </p>
<p>1)如果不慎忘记了MySQL的root密码，我们可以在启动MySQL服务器时加上参数&#8211;skip-grant-tables来跳过授权表的验证 (./safe_mysqld &#8211;skip-grant-tables &amp;)，这样我们就可以直接登陆MySQL服务器，然后再修改root用户的口令，重启MySQL就可以用新口令登陆了。    <br />2)启动MySQL服务器时加&#8211;skip-show-database使一般数据库用户不能浏览其它数据库。    <br />3)启动MySQL服务器时加上&#8211;chroot=path参数，让mysqld守护进程运行在chroot环境中。这样SQL语句LOAD DATA INFILE和SELECT &#8230; INTO OUTFILE就限定在chroot_path下读写文件了。这里有一点要注意，MySQL启动后会建立一个mysql.sock文件，默认是在/tmp 目录下。使用了chroot后，MySQL会在chroot_path/tmp去建立mysql.sock文件，如果没有chroot_path/tmp 目录或启动MySQL的用户没有这个目录写权限就不能建立mysql.sock文件，MySQL会启动失败。比如我们加了&#8211;chroot=/usr /local/mysql/启动参数，那么最好建立一个启动MySQL的用户能写的/usr/local/mysql/tmp目录，当然我们也可以用 &#8211;socket=path来指定mysql.sock文件的路径，但这个path一定要在chroot_path里面。    <br />4)启动MySQL服务器时加上&#8211;log-slow-queries=file参数，这样mysqld会把SQL命令执行时间超过 long_query_time的写入file文件。如果没有指定=file，mysqld默认会写到数据目录下的hostname-slow.log。如果只指定了filename，没有指定路径，那么mysqld也会把filename写到数据目录下。我们通过这个日志文件可以找出执行时间超长的查询语句，然后尽可能的优化它减轻MySQL服务器的负担。    <br />5)如果我们只需本机使用MySQL服务，那么我们还可以加上&#8211;skip-networking启动参数使MySQL不监听任何TCP/IP连接，增加安全性。（非常推荐）    <br />6)MySQL的更多mysqld启动选项请见MySQL手册4.16.4 mysqld Command-line Options</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/348/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>如何用Powerdesigner的PDM(物理数据模型)生成数据库</title>
		<link>http://blog.acmind.com/archives/133</link>
		<comments>http://blog.acmind.com/archives/133#comments</comments>
		<pubDate>Sat, 17 Jan 2009 02:24:44 +0000</pubDate>
		<dc:creator>笑谈</dc:creator>
				<category><![CDATA[数据相关]]></category>
		<category><![CDATA[辅助工具]]></category>
		<category><![CDATA[建模]]></category>
		<category><![CDATA[PDM]]></category>
		<category><![CDATA[PowerDesigner]]></category>

		<guid isPermaLink="false">http://blog.acmind.com/?p=133</guid>
		<description><![CDATA[pdm做好后，最终是要将其转化为数据库实体的。    1.确认当前Powerdesigner设置的dbms是否正确,即是否是我们要生成的数据库类型，我在这里使用的是sqlserver2000:     Powerdesigner-&#62;数据库-&#62;更改当前dbms，选择您的数据库类型。 
 
2.配置Powerdesigner与数据源的连接    Powerdesigner-&#62;数据库-&#62;配置连接-&#62;用户dsn(或系统dsn)-&#62;选择、添加您的数据源     3.连接     Powerdesigner-&#62;数据库-&#62;连接-&#62;设置好您刚才建立的dsn确定。     OK,设置好连接后我们就可以将pdm生成sql语句了。     4.数据库生成     Powerdesigner-&#62;数据库-&#62;生成数据库-&#62;配置好（默认就可以）后选择确定就好了。     拿到sql脚本语句，大家都知道应当如何做了吧，放到sql查询分析器里执行吧。 
]]></description>
			<content:encoded><![CDATA[<p>pdm做好后，最终是要将其转化为数据库实体的。    <br />1.确认当前Powerdesigner设置的dbms是否正确,即是否是我们要生成的数据库类型，我在这里使用的是sqlserver2000:     <br />Powerdesigner-&gt;数据库-&gt;更改当前dbms，选择您的数据库类型。 </p>
<p><a href="http://blog.acmind.com/wp-content/uploads/2009/01/image12.png" class="highslide-image" onclick="return hs.expand(this);"><img title="image" style="border-right: 0px; border-top: 0px; display: inline; border-left: 0px; border-bottom: 0px" height="386" alt="image" src="http://blog.acmind.com/wp-content/uploads/2009/01/image-thumb12.png" width="474" border="0" /></a> </p>
<p>2.配置Powerdesigner与数据源的连接    <br />Powerdesigner-&gt;数据库-&gt;配置连接-&gt;用户dsn(或系统dsn)-&gt;选择、添加您的数据源     <br />3.连接     <br />Powerdesigner-&gt;数据库-&gt;连接-&gt;设置好您刚才建立的dsn确定。     <br />OK,设置好连接后我们就可以将pdm生成sql语句了。     <br />4.数据库生成     <br />Powerdesigner-&gt;数据库-&gt;生成数据库-&gt;配置好（默认就可以）后选择确定就好了。     <br />拿到sql脚本语句，大家都知道应当如何做了吧，放到sql查询分析器里执行吧。 </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.acmind.com/archives/133/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

