2.1.3 數據庫和表權限
下列權限運用於數據庫和表上的操作。
ALTER
允許你使用ALTER TABLE語句,這其實是一個簡單的第一級權限,你必須由其他權限,這看你想對數據庫實施什麼操作。
CREATE
允許你創建數據庫和表,但不允許創建索引。
DELETE
允許你從表中刪除現有記錄。
DROP
允許你刪除(拋棄)數據庫和表,但不允許刪除索引。
INDEX
允許你創建並刪除索引。
REFERENCES
目前不用。
SELECT
允許你使用SELECT語句從表中檢索數據。對不涉及表的SELECT語句就不必要,如SELECT NOW()或SELECT 4/2。
UPDATE
允許你修改表中的已有的記錄。
2.1.4 管理權限
下列權限運用於控制服務器或用戶授權能力的操作的管理性操作。
FILE
允許你告訴服務器讀或寫服務器主機上的文件。該權限不應該隨便授予,它很危險,見“回避授權表風險”。服務器確實較謹慎地保持在一定范圍內使用該權限。你只能讀任何人都能讀的文件。你正在寫的文件必須不是現存的文件,這防止你迫使服務器重寫重要文件,如/etc/passwd或屬於別人的數據庫的數據目錄。
如果你授權FILE權限,確保你不以UNIX的root用戶運行服務器,因為root可在文件系統的任何地方創建新文件。如果你以一個非特權用戶運行服務器,服務器只能在給用戶能訪問的目錄中創建文件。
GRANT
允許你將你自己的權限授予別人,包括GRANT。
PROCESS
允許你通過使用SHOW PROCESS語句或mysqladmin process命令查看服務器內正在運行的線程(進程)的信息。這個權限也允許你用KILL語句或MySQLadmin kill命令殺死線程。
你總是能看到或殺死你自己的線程。PROCESS權限賦予你對任何線程做這些事情的能力。
RELOAD
允許你執行大量的服務器管理操作。你可以發出FLUSH語句,你也能指性MySQLadmin的reload、refresh、flush-hosts、flush-logs、flush-privileges和flush-tables等命令。
SHUTDOWN
允許你用MySQLadmin shutdown關閉服務器。
在user、db和host表中,每一個權限以一個單獨的列指定。這些列全部聲明為一個ENUM("N","Y")類型,所以每個權的缺省值是“N”。在tables_priv和columns_priv中的權限以一個SET表示,它允許權限用一個單個列以任何組合指定。這兩個表比其他三個表更新,這就是為什麼它們使用更有效的表示方式的原因。(有可能在未來,user、db和host表也用一個SET類型表示。)
在tables_priv表中的Table_priv列被定義成:
SET('Select','Insert','Update','Delete','Create','Drop','Grant','References','Index','Alter')
在coloums_priv表中的Column_priv列被定義成:
SET('Select','Insert','Update','References')
列權限比表權限少,因為列級較少的權限有意義。例如你能創建一個表,但你不能創建一個孤立的列。
user表包含某些在其他授權表不存在的權限的列:File_priv、Process_priv、Reload_priv和Shutdown_priv。這些權限運用於你讓服務器執行的與任何特定數據庫或表不相關的操作。如允許一個用戶根據當前數據庫是什麼來關閉數據庫是毫無意義的。
2.2 服務器如何控制客戶訪問
在你使用MySQL時,客戶訪問控制有兩個階段。第一階段發生在你試圖連接服務器時。服務器查找user表看它是否能找到一個條目匹配你的名字、你正在從那兒連接的主機和你提供的口令。如果沒有匹配,你就不能連接。如果有一個匹配,建立連接並繼續第二階段。在這個階段,對於每一個你發出的查詢,服務器檢查授權表看你是否有足夠的權限執行查詢,第二階段持續到你與服務器對話的結束。
本小節詳細介紹MySQL服務器用於將授權表條目匹配到來的連接請求或查詢的原則,這包括在授權表范圍列中合法的值的類型、結合授權表中的權限信息的方式和表中條目被檢查的次序。
2.2.1 范圍列內容
一些范圍列要求文字值,但它們大多數允許通配符或其他特殊值。
Host
一個Host列值可以是一個主機名或一個IP地址。值localhost意味著本地主機,但它只在你用一個localhost主機名時才匹配,而不是你在使用主機名時。假如你的本地主機名是pit.snake.net並且在user表中有對你的兩條記錄,一個有一個Host值或localhost,而另一個有pit.snake.net,有localhost的記錄將只當你連接localhost時匹配,其他在只在連接pit.snake.Net時才匹配。如果你想讓客戶能以兩種方式連接,你需要在user表中有兩條記錄。
你也可以用通配符指定Host值。可以使用SQL的模式字符“%”和“_”並具有當你在一個查詢中使用LIKE算符同樣的含義(不允許regex算符)。 SQL模式字符都能用於主機名和IP地址。如%wisc.edu匹配任何wisc.edu域內的主機,而%.edu匹配任何教育學院的主機。類似地,192.168.%匹配任何在192.168 B類子網的主機,而192.168.3.%匹配任何在192.168.3 C類子網的主機。
%值匹配所有主機,並可用於允許一