mysql管理員應該知道如何設定mysql使用者賬號,指出哪個使用者可以連線伺服器,從**連線,連線後能做什麼。mysql 3.22.11開始引入兩條語句使得這項工作更容易做:grant語句建立mysql使用者並指定其許可權,而revoke語句刪除許可權。兩條語句扮演了mysql資料庫的前端角色,並提供與直接操作這些表的內容不同的另一種方法。create和revoke語句影響4個表:授權表
內容user 能連線伺服器的使用者以及他們擁有的任何全域性許可權
db 資料庫級許可權
tables_priv 表級許可權
columns_priv 列級許可權
還有第5個授權表(host),但它不受grant和revoke的影響。
當你對乙個使用者發出一條grant語句時,在user表中為該使用者建立一條記錄。如果語句指定任何全域性許可權(管理許可權或適用於所有資料庫的許可權),這些也記錄在user表中。如果你指定資料庫、表和列級許可權,他們被分別記錄在db、tables_priv和columns_priv表中。
用grant和revoke比直接修改授權表更容易些,然而,建議你閱讀一下《mysql安全性指南》。這些表異常重要,而且作為一名管理員,你應該理解它們如何超越grant和revoke語句的功能水平。
在下面的章節中,我們將介紹如何設定mysql使用者賬號並授權。我們也涉及如何撤權和從授權表中刪除使用者。
你可能也想考慮使用mysqlaccess和mysql_setpermission指令碼,它是mysql分發的一部分,它們是perl指令碼,提供grant語句的另一種選擇設定使用者賬號。mysql_setpermission需要安裝dbi支援。
1 建立使用者並授權
grant語句的語法看上去像這樣:
grant privileges (columns)??on what??to user identified by 「password」??with grant option
要使用該語句,你需要填寫下列部分:
privileges
授予使用者的許可權,下表列出可用於grant語句的許可權指定符:
許可權指定符
許可權允許的操作
alter 修改表和索引
create 建立資料庫和表
delete 刪除表中已有的記錄
drop 拋棄(刪除)資料庫和表
index 建立或拋棄索引
insert 向表中插入新行
reference 未用
select 檢索表中的記錄
update 修改現存表記錄
file 讀或寫伺服器上的檔案
process 檢視伺服器中執行的執行緒資訊或殺死執行緒
reload 過載授權表或清空日誌、主機快取或表快取。
shutdown 關閉伺服器
all 所有;all privileges同義詞
usage 特殊的「無許可權」許可權
上表顯示在第一組的許可權指定符適用於資料庫、表和列,第二組數管理許可權。一般,這些被相對嚴格地授權,因為它們允許使用者影響伺服器的操作。第三組許可權特殊,all意味著「所有許可權」,uasge意味著無許可權,即建立使用者,但不授予許可權。
columns
許可權運用的列,它是可選的,並且你只能設定列特定的許可權。如果命令有多於乙個列,應該用逗號分開它們。
what
許可權運用的級別。許可權可以是全域性的(適用於所有資料庫和所有表)、特定資料庫(適用於乙個資料庫中的所有表)或特定表的。可以通過指定乙個columns字句是許可權是列特定的。
user
許可權授予的使用者,它由乙個使用者名稱和主機名組成。在mysql中,你不僅指定誰能連線,還有從**連線。這允許你讓兩個同名使用者從不同地方連線。mysql讓你區分他們,並彼此獨立地賦予許可權。
mysql中的乙個使用者名稱就是你連線伺服器時指定的使用者名稱,該名字不必與你的unix登入名或windows名聯絡起來。預設地,如果你不明確指定乙個名字,客戶程式將使用你的登入名作為mysql使用者名稱。這只是乙個約定。你可以在授權表中將該名字改為nobody,然後以nobody連線執行需要超級使用者許可權的操作。
password
賦予使用者的口令,它是可選的。如果你對新使用者沒有指定identified by子句,該使用者不賦給口令(不安全)。對現有使用者,任何你指定的口令將代替老口令。如果你不指定口令,老口令保持不變,當你用identified by時,口令字串用改用口令的字面含義,grant將為你編碼口令,不要象你用set password 那樣使用password()函式。
with grant option子句是可選的。如果你包含它,使用者可以授予許可權通過grant語句授權給其它使用者。你可以用該子句給與其它使用者授權的能力。
使用者名稱、口令、資料庫和表名在授權表記錄中是大小寫敏感的,主機名和列名不是。
一般地,你可以通過詢問幾個簡單的問題來識別grant語句的種類:
誰能連線,從那兒連線?
使用者應該有什麼級別的許可權,他們適用於什麼?
使用者應該允許管理許可權嗎?
下面就討論一些例子。
1.1 誰能連線,從那兒連線?
你可以允許乙個使用者從特定的或一系列主機連線。有乙個極端,如果你知道降職從乙個主機連線,你可以將許可權侷限於單個主機:
grant all on samp_db.* to boris@localhost identified by 「ruby」grant all on samp_db.* to [email protected] identified by 「quartz」
(samp_db.*意思是「samp_db資料庫的所有表)另乙個極端是,你可能有乙個經常旅行並需要能從世界各地的主機連線的使用者max。在這種情況下,你可以允許他無論從**連線:
grant all on samp_db.* to max@% identified by 「diamond」
「%」字元起萬用字元作用,與like模式匹配的含義相同。在上述語句中,它意味著「任何主機」。所以max和max@%等價。這是建立使用者最簡單的方法,但也是最不安全的。
取其中,你可以允許乙個使用者從乙個受限的主機集合訪問。例如,要允許mary從snake.net域的任何主機連線,用乙個%.snake.net主機指定符:
grant all on samp_db.* to [email protected] identified by 「quartz」;
如果你喜歡,使用者識別符號的主機部分可以用ip位址而不是乙個主機名來給定。你可以指定乙個ip位址或乙個包含模式字元的位址,而且,從mysql 3.23,你還可以指定具有指出用於網路號的位數的網路掩碼的ip號:
??grant all on samp_db.* to [email protected] identified by 「ruby」??grant all on samp_db.* to [email protected].% identified by 「quartz」??grant all on samp_db.* to [email protected]/17 identified by 「ruby」
第乙個例子指出使用者能從其連線的特定主機,第二個指定對於c類子網192.168.128的ip模式,而第三條語句中,192.168.128.0/17指定乙個17位網路號並匹配具有192.168.128頭17位的ip位址。
如果mysql抱怨你指定的使用者值,你可能需要使用引號(只將使用者名稱和主機名部分分開加引號)。
grant all on samp_db.president to 「my friend」@「boa.snake.net」
1.2 使用者應該有什麼級別的許可權和它們應該適用於什麼?
你可以授權不同級別的許可權,全域性許可權是最強大的,因為它們適用於任何資料庫。要使ethel成為可做任何事情的超級使用者,包括能授權給其它使用者,發出下列語句:
grant all on *.* to ethel@localhost identified by 「coffee」 with grant option
on子句中的*.*意味著「所有資料庫、所有表」。從安全考慮,我們指定ethel只能從本地連線。限制乙個超級使用者可以連線的主機通常是明智的,因為它限制了試圖破解口令的主機。
有些許可權(file、process、reload和shutdown)是管理許可權並且只能用「on *.*」全域性許可權指定符授權。如果你願意,你可以授權這些許可權,而不授權資料庫許可權。例如,下列語句設定乙個flush使用者,他只能發出flush語句。這可能在你需要執行諸如清空日誌等的管理指令碼中會有用:
grant reload on *.* to flushl@localhost identified by 「flushpass」
一般地,你想授權管理許可權,吝嗇點,因為擁有它們的使用者可以影響你的伺服器的操作。
資料庫級許可權適用於乙個特定資料庫中的所有表,它們可通過使用on db_name.*子句授予:
grant all on samp_db to [email protected] indetified by 「rock」??grant select on samp_db to ro_user@% indetified by 「rock」
第一條語句向bill授權samp_db資料庫中所有表的許可權,第二條建立乙個嚴格限制訪問的使用者ro_user(唯讀使用者),只能訪問samp_db資料庫中的所有表,但只有讀取,即使用者只能發出select語句。
你可以列出一系列同時授予的各個許可權。例如,如果你想讓使用者能讀取並能修改現有資料庫的內容,但不能建立新錶或刪除表,如下授予這些許可權:
grant select,insert,delete,update on samp_db to [email protected] indetified by 「rock」
對於更精緻的訪問控制,你可以在各個表上授權,或甚至在表的每個列上。當你想向使用者隱藏乙個表的部分時,或你想讓乙個使用者只能修改特定的列時,列特定許可權非常有用。如:
grant select on samp_db.member to bill@localhost indetified by 「rock」grant update (expiration) on samp_db. member to bill@localhost
第一條語句授予對整個member表的讀許可權並設定了乙個口令,第二條語句增加了update許可權,當只對expiration列。沒必要再指定口令,因為第一條語句已經指定了。
grant updat
計算機四級考試輔導之詳細講解REG檔案
在我們對登錄檔進行設定或是修改的時候,有時候可能會用到一種擴充套件名為reg的檔案,那麼這個檔案到底是個什麼東東呢?它到底有什麼作用,怎麼建立它,又該如何實現對登錄檔的各種操作呢?下面筆者為你一一道來!reg檔案是什麼?reg檔案實際上是一種登錄檔指令碼檔案,雙擊reg檔案即可將其中的資料匯入到登錄...
計算機四級考試之SQL Server使用者對映
sql server2005中 使用者對映 裡成員身份選項的意思 使用者對映 public 維護所有預設許可權 db owner 執行所有資料庫角色活動 db accessadmin 新增和刪除資料庫使用者,組及角色 db ddladmin 新增 更改或刪除資料庫物件 db security adm...
計算機四級考試輔導 綠色網路的五種途徑
網路基礎設施雖然在總體的電力消耗上與伺服器或儲存不可相提並論 資料中心的伺服器數量要遠多於交換機的數量 但是網路設施在總體的電力成本支出方面也要佔到15 的份額。和伺服器還有一點不同的是,網路裝置必須永遠 而且時刻準備承載流量。本文將介紹綠色網路的五種途徑 更新裝置。思科預計,其產品的能效每隔兩到三...