?? 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 + -