?? manual_privilege_system.html
字號:
<p><strong>select</strong>、<strong>insert</strong>、<strong>update</strong>和<strong>delete</strong>權限允許你在一個數據庫現有的表上實施操作。
</p>
<p><code>SELECT</code>語句只有在他們真正從一個表中檢索行是才需要<strong>select</strong>權限,你可以執行某個<code>SELECT</code>語句,甚至沒有任何到服務器上的數據庫里的存取任何東西的許可。例如,你可使用<code>mysql</code>客戶作為一個簡單的計算器:
</p>
<pre>mysql> SELECT 1+1;
mysql> SELECT PI()*2;
</pre>
<p><strong>index</strong>權限允許你創建或拋棄(刪除)索引。 </p>
<p><strong>alter</strong>權限允許你使用<code>ALTER TABLE</code>。 </p>
<p><strong>create</strong>和<strong>drop</strong>權限允許你創建新的數據庫和表,或拋棄(刪除)現存的數據庫和表。
</p>
<p>注意:如果你將<code>mysql</code>數據庫的<strong>drop</strong>權限授予一個用戶,該用戶能拋棄存儲了<strong>MySQL</strong>存取權限的數據庫!
</p>
<p><strong>grant</strong>權限允許你把你自己擁有的那些權限授給其他的用戶。
</p>
<p><strong>file</strong>權限給予你用<code>LOAD DATA INFILE</code>和<code>SELECT ...
INTO OUTFILE</code>語句讀和寫服務器上的文件,任何被授予這個權限的用戶都能讀或寫<strong>MySQL</strong>服務器能讀或寫的任何文件。
</p>
<p>其余的權限用于管理性操作,它使用<code>mysqladmin</code>程序實施。下表顯示<code>mysqladmin</code>支配每個管理性權限允許你執行的命令:
</p>
<table BORDER="manual_Privilege_system.html#Privilege_changes" WIDTH="100%" NOSAVE="#101090" class="p4">
<tr>
<td><strong>優惠</strong> </td>
<td><strong>權限擁有者允許執行的命令</strong> </td>
</tr>
<tr>
<td><strong>reload</strong> </td>
<td><code>reload</code>, <code>refresh</code>, <code>flush-privileges</code>, <code>flush-hosts</code>,
<code>flush-logs</code>, <code>flush-tables</code> </td>
</tr>
<tr>
<td><strong>shutdown</strong> </td>
<td><code>shutdown</code> </td>
</tr>
<tr>
<td><strong>precess</strong> </td>
<td><code>processlist</code>, <code>kill</code> </td>
</tr>
</table>
<p><code>reload</code>命令告訴服務器再讀入授權表,<code>refresh</code>命令清洗所有表并打開和關閉記錄文件,<code>flush-privileges</code>是<code>reload</code>的一個同義詞,其它<code>flush-*</code>命令執行類似<code>refresh</code>的功能,但是范圍更有限,并且在某些情況下可能更好用。例如,如果你只是想清洗記錄文件,<code>flush-logs</code>比<code>refresh</code>是更好的選擇。
</p>
<p><code>shutdown</code>命令關掉服務器。 </p>
<p><code>processlist</code>命令顯示在服務器內執行的線程的信息。<code>kill</code>命令殺死服務器線程。你總是能顯示或殺死你自己的線程,但是你需要<strong>process</strong>權限來顯示或殺死其他用戶啟動的線程。
</p>
<p>總的說來,只授予權限給需要他們的那些用戶是一個好主意,但是你應該在授予某個權限時試驗特定的警告:
<ul>
<li><strong>grant</strong>權限允許用戶放棄他們的權限給其他用戶。2個有不同的權限并有<strong>grant</strong>權限的用戶可以合并權限。
</li>
<li><strong>alter</strong>權限可以用于通過重新命名表來推翻權限系統。 </li>
<li><strong>file</strong>權限可以被濫用在服務器上讀取任何世界可讀(world-readable,即任何人可讀)的文件到一張數據庫表,然后其內容能用<code>SELECT</code>被存取。
</li>
<li><strong>shutdown</strong>權限通過終止服務器可以被濫用完全拒絕為其他用戶服務,
。 </li>
<li><strong>precess</strong>權限能被用來察看當前執行的查詢的普通文本,包括設定或改變口令查詢。
</li>
<li>在<code>mysql</code>數據庫上的權限能被用來改變口令和其他存取權限信息。(口令被加密存儲,所以一個惡意的用戶不能簡單地讀取他們。然而,有足夠的權限,同一個用戶能用不同的一個代替一個口令。)</li>
</ul>
<p>有一些事情你不能用<strong>MySQL</strong>權限系統做到:
<ul>
<li>你不能明顯地指定一個給定用戶應該被拒絕存取。即,你不能明顯地匹配一個用戶并且然后拒絕連接。
</li>
<li>你不能指定一個用戶有權創建立或拋棄一個數據庫中的表,也不能創建或拋棄數據庫本身。
</li>
</ul>
<h2><a NAME="Privileges" HREF="manual_toc.html#Privileges">6.6 權限系統工作原理</a></h2>
<p><strong>MySQL</strong>權限系統保證所有的用戶可以嚴格地做他們假定被允許做的事情。當你連接一個<strong>MySQL</strong>服務器時,
你的身份由<strong>你從那連接的主機</strong>和<strong>你指定的用戶名</strong>來決定,系統根據你的身份和<strong>你想做什么</strong>來授予權限。
</p>
<p><strong>MySQL</strong>在認定身份中考慮你的主機名和用戶名字,是因為有很小的原因假定一個給定的用戶在因特網上屬于同一個人。例如,用戶從<code>whitehouse.gov</code>連接的<code>bill</code>不必和從<code>mosoft.com</code>連接<code>bill</code>是同一個人。
<strong>MySQL</strong>通過允許你區分在不同的主機上碰巧有同樣名字用戶來處理它:你可以對從<code>whitehouse.gov</code>連接授與<code>bill</code>一個權限集,而為從<code>microsoft.com</code>的連接授予一個不同的權限集。
</p>
<p><strong>MySQL</strong>存取控制包含2個階段:
<ul>
<li>階段1:服務器檢查你是否允許連接。 </li>
<li>階段2:假定你能連接,服務器檢查你發出的每個請求。看你是否有足夠的權限實施它。例如,如果你從數據庫中一個表精選(select)行或從數據庫拋棄一個表,服務器確定你對表有<strong>select</strong>權限或對數據庫有<strong>drop</strong>權限。
</li>
</ul>
<p>服務器在存取控制的兩個階段使用在<code>mysql</code>的數據庫中的<code>user</code>、<code>db</code>和<code>host</code>表,在這些授權表中字段如下:
</p>
<table BORDER="Privileges" WIDTH="100%" NOSAVE="#101090">
<tr>
<td><strong>表名稱</strong> </td>
<td><code>user</code> </td>
<td><code>db</code> </td>
<td><code>host</code> </td>
</tr>
<tr>
<td><strong>范圍字段</strong> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
</tr>
<tr>
<td></td>
<td><code>User</code> </td>
<td><code>Db</code> </td>
<td><code>Db</code> </td>
</tr>
<tr>
<td></td>
<td><code>Password</code> </td>
<td><code>User</code> </td>
<td></td>
</tr>
<tr>
<td><strong>權限字段</strong> </td>
<td><code>Select_priv</code> </td>
<td><code>Select_priv</code> </td>
<td><code>Select_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Insert_priv</code> </td>
<td><code>Insert_priv</code> </td>
<td><code>Insert_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Update_priv</code> </td>
<td><code>Update_priv</code> </td>
<td><code>Update_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Delete_priv</code> </td>
<td><code>Delete_priv</code> </td>
<td><code>Delete_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Index_priv</code> </td>
<td><code>Index_priv</code> </td>
<td><code>Index_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Alter_priv</code> </td>
<td><code>Alter_priv</code> </td>
<td><code>Alter_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Create_priv</code> </td>
<td><code>Create_priv</code> </td>
<td><code>Create_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Drop_priv</code> </td>
<td><code>Drop_priv</code> </td>
<td><code>Drop_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Grant_priv</code> </td>
<td><code>Grant_priv</code> </td>
<td><code>Grant_priv</code> </td>
</tr>
<tr>
<td></td>
<td><code>Reload_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>Shutdown_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>Process_priv</code> </td>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td><code>File_priv</code> </td>
<td></td>
<td></td>
</tr>
</table>
<p>對存取控制的第二階段(請求證實),如果請求涉及表,服務器可以另外參考<code>tables_priv</code>和<code>columns_priv</code>表。這些表的字段如下:
</p>
<table BORDER="Privileges" WIDTH="100%" NOSAVE="#101090">
<tr>
<td><strong>表名稱</strong></td>
<td><code>tables_priv</code> </td>
<td><code>columns_priv</code> </td>
</tr>
<tr>
<td><strong>范圍字段</strong> </td>
<td><code>Host</code> </td>
<td><code>Host</code> </td>
</tr>
<tr>
<td></td>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -