6 MySQL 存取權限系統
MySQL有一個先進但非標准的安全/權限系統。本節描述它的工作原理。
6.1 權限系統做什麼
MySQL權限系統的主要功能是證實連接到一台給定主機的一個用戶,並且賦予該用戶在一個數據庫上select、 insert、update和delete的權限。
附加的功能包括有一個匿名的用戶和對於MySQL特定的功能例如LOAD DATA INFILE進行授權及管理操作的能力。
6.2 MySQL 用戶名和口令
由MySQL使用用戶名和口令的方法與Unix或Windows使用的方式有很多不同之處:
* MySQL使用於認證目的的用戶名,與Unix用戶名(登錄名字)或Windows用戶名無關。缺省地,大多數MySQL客戶嘗試使用當前Unix用戶名作為MySQL用戶名登錄,但是這僅僅為了方便。客戶程序允許用-u或--user選項指定一個不同的名字,這意味著無論如何你不能使得一個數據庫更安全,除非所有的MySQL用戶名都有口令。任何人可以試圖用任何名字連接服務器,而且如果他們指定了沒有口令的任何名字,他們將成功。
* MySQL用戶名最長可以是16各字符;典型地,Unix用戶名限制為8個字符。
* MySQL口令與Unix口令沒關系。在你使用登錄到一台Unix機器口令和你使用在那台機器上存取一個數據庫的口令之間沒有必要有關聯。
* MySQL加密口令使用了一個Unix登錄期間所用的不同算法,見7.4.12 雜項函數一節中描述PASSWord()和ENCRYPT()函數部分。
6.3 與MySQL服務器連接
當你想要存取一個MySQL服務器時,MySQL客戶程序一般要求你指定連接參數:你想要聯接的主機、你的用戶名和你的口令。例如,MySQL客戶可以象這樣啟動(可選的參數被包括在“[”和“]”之間):
shell> MySQL [-h host_name][-u user_name][-pyour_pass ]
-h, -u和-p選項的另一種形式是--host=host_name、--user=user_name和--password=your_pass。注意在-p或--passWord=與跟隨它後面的口令之間沒有空格。
注意:在命令行上指定一個口令是不安全的!隨後在你系統上的任何用戶可以通過打類似這樣的命令發現你的口令:ps auxww。見4.15.4 選項文件。
對於命令行沒有的聯接參數,MySQL使用缺省值:
* 缺省主機名是localhost。
* 缺省用戶名是你的Unix登錄名。
* 如果沒有-p,則沒有提供口令。
這樣, 對一個Unix用戶joe,下列命令是等價的:
shell>MySQL -h localhost -u joe
shell>MySQL -h localhost
shell>MySQL -u joe
shell>MySQL
其它MySQL客戶程序有同樣表現。
在Unix系統上,當你進行一個連接時,你可以指定要使用的不同的缺省值,這樣你不必每次在你調用一個客戶程序是在命令行上輸入他們。這可以有很多方法做到:
* 你能在你的主目錄下“.my.cnf”的配置文件的[clIEnt]小節裡指定連接參數。文件的相關小節看上去可能像這樣:
[clIEnt]
host=host_name
user=user_name
passWord=your_pass
見4.15.4 選項文件。
* 你可以用環境變量指定連接參數。主機可用MYSQL_HOST指定,MySQL用戶名字可用USER指定(僅對 Windows),口令可用MySQL_PWD指定(但是這不安全,見下一節) 。
如果連接參數以多種方法被指定,在命令行上被指定的值優先於在配置文件和環境變量中指定的值,而在配置文件指定的值優先於在環境變量指定的值。