📄 manual_privilege_system.html
字号:
<html>
<head>
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<style type="text/css">
<!--
.p13{font-size:14.8px;font-family:宋体;}
.p14{font-size:14.8px;font-family:宋体;line-height:14pt;}
a:hover{color:red;}
a.t1:visited{color:red;}
-->
</style>
<title>MySQL中文参考手册-6 MySQL 存取权限系统</title>
</head>
<body BGCOLOR="#FFFFFF" TEXT="#000000" LINK="#101090" VLINK="#7030B0" class="p3">
<h1><img src="Img/mysql-logo.gif" alt="mysql-logo.gif (3082 bytes)" WIDTH="127" HEIGHT="60"><font color="#FF0000">MySQL中文参考手册</font></h1>
<p>译者:晏子 <a href="mailto:(clyan@sohu.com">(clyan@sohu.com</a>)
主页:<a href="http://linuxdb.yeah.net">http://linuxdb.yeah.net</a></p>
<hr>
<p><a HREF="manual_Introduction.html">第一章</a>, <a HREF="manual_Compatibility.html">前一章</a>,
<a HREF="manual_Reference.html">下一章</a>, <a HREF="manual_Concept_Index.html">最后一章</a>,<a HREF="manual_toc.html">目录</a>. </p>
<hr>
<h1><a NAME="Privilege_system" HREF="manual_toc.html#Privilege_system">6 MySQL
存取权限系统</a></h1>
<p><strong>MySQL</strong>有一个先进但非标准的安全/权限系统。本节描述它的工作原理。
</p>
<h2><a NAME="What_Privileges" HREF="manual_toc.html#What_Privileges">6.1
权限系统做什么</a></h2>
<p><strong>MySQL</strong>权限系统的主要功能是证实连接到一台给定主机的一个用户,并且赋予该用户在一个数据库上<strong>select</strong>、
<strong>insert</strong>、<strong>update</strong>和<strong>delete</strong>的权限。 </p>
<p>附加的功能包括有一个匿名的用户和对于<strong>MySQL</strong>特定的功能例如<code>LOAD
DATA INFILE</code>进行授权及管理操作的能力。 </p>
<h2><a NAME="User_names" HREF="manual_toc.html#User_names">6.2 MySQL 用户名和口令</a></h2>
<p>由<strong>MySQL</strong>使用用户名和口令的方法与Unix或Windows使用的方式有很多不同之处:
<ul>
<li><strong>MySQL</strong>使用于认证目的的用户名,与Unix用户名(登录名字)或Windows用户名无关。缺省地,大多数<strong>MySQL</strong>客户尝试使用当前Unix用户名作为<strong>MySQL</strong>用户名登录,但是这仅仅为了方便。客户程序允许用<code>-u</code>或<code>--user</code>选项指定一个不同的名字,这意味着无论如何你不能使得一个数据库更安全,除非所有的<strong>MySQL</strong>用户名都有口令。任何人可以试图用任何名字连接服务器,而且如果他们指定了没有口令的任何名字,他们将成功。
</li>
<li><strong>MySQL</strong>用户名最长可以是16各字符;典型地,Unix用户名限制为8个字符。
</li>
<li><strong>MySQL</strong>口令与Unix口令没关系。在你使用登录到一台Unix机器口令和你使用在那台机器上存取一个数据库的口令之间没有必要有关联。
</li>
<li><strong>MySQL</strong>加密口令使用了一个Unix登录期间所用的不同算法,见<a HREF="manual_Reference.html#Miscellaneous_functions">7.4.12 杂项函数</a>一节中描述<code>PASSWORD()</code>和<code>ENCRYPT()</code>函数部分。</li>
</ul>
<h2><a NAME="Connecting" HREF="manual_toc.html#Connecting">6.3 与MySQL服务器连接</a></h2>
<p>当你想要存取一个<strong>MySQL</strong>服务器时,<strong>MySQL</strong>客户程序一般要求你指定连接参数:你想要联接的主机、你的用户名和你的口令。例如,<code>mysql</code>客户可以象这样启动(可选的参数被包括在<samp>“[”</samp>和<samp>“]”</samp>之间):
</p>
<pre>
shell> mysql [-h host_name][-u user_name][-pyour_pass ]</pre>
<p><code>-h</code>, <code>-u</code>和<code>-p</code>选项的另一种形式是<code>--host=host_name</code>、<code>--user=user_name</code>和<code>--password=your_pass</code>。注意在<code>-p</code>或<code>--password=</code>与跟随它后面的口令之间<em>没有空格</em>。
</p>
<p><em>注意:</em>在命令行上指定一个口令是不安全的!随后在你系统上的任何用户可以通过打类似这样的命令发现你的口令:<code>ps
auxww</code>。见<a HREF="manual_Installing.html#Option_files">4.15.4 选项文件</a>。
</p>
<p>对于命令行没有的联接参数,<code>mysql</code>使用缺省值:
<ul>
<li>缺省主机名是<code>localhost</code>。</li>
<li>缺省用户名是你的Unix登录名。 </li>
<li>如果没有<code>-p</code>,则没有提供口令。 </li>
</ul>
<p>这样, 对一个Unix用户<code>joe</code>,下列命令是等价的: </p>
<pre>
shell>mysql -h localhost -u joe
shell>mysql -h localhost
shell>mysql -u joe
shell>mysql
</pre>
<p>其它<strong>MySQL</strong>客户程序有同样表现。 </p>
<p>在Unix系统上,当你进行一个连接时,你可以指定要使用的不同的缺省值,这样你不必每次在你调用一个客户程序是在命令行上输入他们。这可以有很多方法做到:
<ul>
<li><a NAME="IDX120"></a>你能在你的主目录下<tt>“.my.cnf”</tt>的配置文件的<code>[client]</code>小节里指定连接参数。文件的相关小节看上去可能像这样:
<pre>[client]
host=host_name
user=user_name
password=your_pass
</pre>
<p>见<a HREF="manual_Installing.html#Option_files">4.15.4 选项文件</a>。</p>
</li>
<li><a NAME="IDX121"></a><a NAME="IDX126"></a>你可以用环境变量指定连接参数。主机可用<code>MYSQL_HOST</code>指定,<strong>MySQL</strong>用户名字可用<code>USER</code>指定(仅对
Windows),口令可用<code>MYSQL_PWD</code>指定(但是这不安全,见下一节)
。 </li>
</ul>
<p><a NAME="IDX127"></a>如果连接参数以多种方法被指定,在命令行上被指定的值优先于在配置文件和环境变量中指定的值,而在配置文件指定的值优先于在环境变量指定的值。
</p>
<h2><a NAME="Password_security" HREF="manual_toc.html#Password_security">6.4
使你的口令安全</a></h2>
<p>以一种暴露的可被其他用户发现的方式指定你的口令是不妥当的。当你运行客户程序时,你可以使用下列方法指定你的口令,还有每个方法的风险评估:
<ul>
<li>使用一个在命令行上<code>-pyour_pass</code>或<code>--password=your_pass</code>的选项。这很方便但是不安全,因为你的口令对系统状态程序(例如<code>ps</code>)变得可见,它可以被其他的用户调用来显示命令行。(一般<strong>MySQL</strong>客户在他们的初始化顺序期间用零覆盖命令行参数,但是仍然有一个短暂间隔时间内参数值可见的。)</li>
<li>使用一<code>个-p</code>或<code>--password</code>选项(没有指定<code>your_pass</code>值)。在这种情况下,客户程序请求来自终端的口令:
<pre>
shell>mysql - u user_name - p
Enter password: ********
</pre>
<p>客户回应<samp>“*”</samp>字符到作为输入你的口令的终端使得旁观者不能看见它。因为它对其他用户不可见,与在命令行上指定它相比,这样进入你的口令更安全。然而,这个输入一个口令的方法仅仅为你交互式运行程序是合适的。如果你想要从非交互式运行的一个脚本调用一个客户,就没有从终端输入入口令的机会。
</p>
</li>
<li><a NAME="IDX128"></a>在一个配置文件中存储你的口令。例如,你可你的主目录的<tt>“.my.cnf”</tt>文件中的<code>[client]</code>节列出你的口令:
<pre>[client]
password=your_pass
</pre>
<p>如果你在<tt>“.my.cnf”</tt>里面存储口令,文件应该不是组或世界可读或可写的。保证文件的存取模式是<code>400</code>或<code>600</code>。见<a HREF="manual_Installing.html#Option_files">4.15.4 选项文件</a>。 </p>
</li>
<li>你可在<code>MYSQL_PWD</code>环境变量中存储口令,但是这个方法必须想到是极不安全的且应该不使用。<code>ps</code>的某些版本包括显示运行进程的环境的选项;如果你设定<code>MYSQL_PWD</code>,你的口令将对所有人是显而易见的,甚至在没有这样一个版本的<code>ps</code>系统上,假设没有其他方法观察到进程环境是不明智的。
</li>
</ul>
<p>总之,最安全的方法是让客户程序提示口令或在一个适当保护<tt>的“.my.cnf”</tt>文件中指定口令。
</p>
<h2><a NAME="Privileges_provided" HREF="manual_toc.html#Privileges_provided">6.5
MySQL提供的权限</a></h2>
<p>权限信息用<code>user</code>、<code>db</code>、<code>host</code>、<code>tables_priv</code>和<code>columns_priv</code>表被存储在<code>mysql</code>数据库中(即在名为<code>mysql</code>的数据库中)。在<strong>MySQL</strong>启动时和在<a HREF="manual_Privilege_system.html#Privilege_changes">6.9 权限修改何时生效</a>所说的情况时,服务器读入这些数据库表内容。
</p>
<p>本手册所用的涉及由<strong>MySQL</strong>提供的权限名称显示在下表,还有在授权表中每个权限的表列名称和每个权限有关的上下文:
</p>
<table BORDER="manual_Privilege_system.html#Privilege_changes" WIDTH="100%" NOSAVE="#101090" class="p4">
<tr>
<td><strong>权限</strong> </td>
<td><strong>列</strong> </td>
<td><strong>上下文</strong> </td>
</tr>
<tr>
<td><strong>select</strong> </td>
<td><code>Select_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>insert</strong> </td>
<td><code>Insert_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>update</strong> </td>
<td><code>Update_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>delete</strong> </td>
<td><code>Delete_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>index</strong> </td>
<td><code>Index_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>alter</strong> </td>
<td><code>Alter_priv</code> </td>
<td>表</td>
</tr>
<tr>
<td><strong>create</strong> </td>
<td><code>Create_priv</code> </td>
<td>数据库、表或索引</td>
</tr>
<tr>
<td><strong>drop</strong> </td>
<td><code>Drop_priv</code> </td>
<td>数据库或表</td>
</tr>
<tr>
<td><strong>grant</strong> </td>
<td><code>Grant_priv</code> </td>
<td>数据库或表</td>
</tr>
<tr>
<td><strong>references</strong> </td>
<td><code>References_priv</code> </td>
<td>数据库或表</td>
</tr>
<tr>
<td><strong>reload</strong> </td>
<td><code>Reload_priv</code> </td>
<td>服务器管理</td>
</tr>
<tr>
<td><strong>shutdown</strong> </td>
<td><code>Shutdown_priv</code> </td>
<td>服务器管理</td>
</tr>
<tr>
<td><strong>process</strong> </td>
<td><code>Process_priv</code> </td>
<td>服务器管理</td>
</tr>
<tr>
<td><strong>file</strong> </td>
<td><code>File_priv</code> </td>
<td>在服务器上的文件存取</td>
</tr>
</table>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -