MySQL有一個先進但非標準的安全/權限系統。本節描述它的工作原理。
MySQL權限系統的主要功能是証實連接到一台給定主機的一個用戶,並且賦予該用戶在一個資料庫上select、 insert、update和delete的權限。
附加的功能包括有一個匿名的用戶和對於MySQL特定的功能例如LOAD DATA INFILE
進行授權及管理操作的能力。
由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()
函數部分。
當你想要存取一個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系統上,當你進行一個連接時,你可以指定要使用的不同的預設值,這樣你不必每次在你調用一個客戶程式是在命令行上輸入他們。這可以有很多方法做到:
如果連接參數以多種方法被指定,在命令行上被指定的值優先於在配置文件和環境變數中指定的值,而在配置文件指定的值優先於在環境變數指定的值。
以一種暴露的可被其他用戶發現的方式指定你的密碼是不妥當的。當你咝锌蛻舫淌綍r,你可以使用下列方法指定你的密碼,還有每個方法的風險評估:
- 使用一個在命令行上
-pyour_pass
或--password=your_pass
的選項。這很方便但是不安全,因為你的密碼對系統狀態程式(例如ps
)變得可見,它可以被其他的用戶調用來顯示命令行。(一般MySQL客戶在他們的初始化順序期間用零覆蓋命令行參數,但是仍然有一個短暫間隔時間內參數值可見的。) - 使用一
個-p
或--password
選項(沒有指定your_pass
值)。在這種情況下,客戶程式請求來自終端的密碼: shell>mysql - u user_name - p
Enter password: ********
客戶回應“*”字符到作為輸入你的密碼的終端使得旁觀者不能看見它。因為它對其他用戶不可見,與在命令行上指定它相比,這樣進入你的密碼更安全。然而,這個輸入一個密碼的方法僅僅為你交互式咝谐淌绞呛线m的。如果你想要從非交互式咝械囊粋腳本調用一個客戶,就沒有從終端輸入入密碼的機會。
- 在一個配置文件中儲存你的密碼。例如,你可你的主目錄的“.my.cnf”文件中的
[client]
節列出你的密碼: [client]
password=your_pass
如果你在“.my.cnf”裡面儲存密碼,文件應該不是組或世界可讀或可寫的。保証文件的存取模式是400
或600
。見4.15.4 選項文件。
- 你可在
MYSQL_PWD
環境變數中儲存密碼,但是這個方法必須想到是極不安全的且應該不使用。ps
的某些版本包括顯示咝羞M程的環境的選項﹔如果你設定MYSQL_PWD
,你的密碼將對所有人是顯而易見的,甚至在沒有這樣一個版本的ps
系統上,假設沒有其他方法觀察到進程環境是不明智的。
總之,最安全的方法是讓客戶程式提示密碼或在一個適當保護的“.my.cnf”文件中指定密碼。
權限資訊用user
、db
、host
、tables_priv
和columns_priv
表被儲存在mysql
資料庫中(即在名為mysql
的資料庫中)。在MySQL啟動時和在6.9 權限修改何時生效所說的情況時,伺服器讀入這些資料庫表內容。
本手冊所用的涉及由MySQL提供的權限名稱顯示在下表,還有在授權表中每個權限的表列名稱和每個權限有關的上下文:
權限 | 列 | 上下文 |
select | Select_priv | 表 |
insert | Insert_priv | 表 |
update | Update_priv | 表 |
delete | Delete_priv | 表 |
index | Index_priv | 表 |
alter | Alter_priv | 表 |
create | Create_priv | 資料庫、表或索引 |
drop | Drop_priv | 資料庫或表 |
grant | Grant_priv | 資料庫或表 |
references | References_priv | 資料庫或表 |
reload | Reload_priv | 伺服器管理 |
shutdown | Shutdown_priv | 伺服器管理 |
process | Process_priv
|
上一篇:教你学会编写Linux设备驱动 下一篇:MySQL語言參考 |
【收藏】
【评论】
【推荐】
【投稿】
【打印】
【关闭】 |
|
相关文章 |
|
发表评论 |
|