MySQL是一個跨平臺的開源關(guān)系型數(shù)據(jù)庫管理系統(tǒng),是我們常用的最經(jīng)濟(jì)實惠的數(shù)據(jù)庫,由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,更讓用戶得到最切實的實在,很多用戶在應(yīng)用中對授權(quán)原則不是很了了解,下面我們就為大家來解析。
服務(wù)器重新啟動的情況
當(dāng)mysqld啟動時,所有的授權(quán)表內(nèi)容被讀進(jìn)存儲器并且從那時開始生效。
被服務(wù)器立即應(yīng)用的情況
用GRANT、REVOKE或SET PASSWORD對授權(quán)表施行的修改會立即被服務(wù)器注意到。
直接修改授權(quán)表的情況
如果你手工地修改授權(quán)表(使用INSERT、UPDATE等等),你應(yīng)該執(zhí)行一個FLUSH PRIVILEGES語句或運行mysqladmin flush-privileges告訴服務(wù)器再裝載授權(quán)表,否則你的改變將不生效,除非你重啟服務(wù)器。
對現(xiàn)有客戶連接的影響情況
當(dāng)服務(wù)器注意到授權(quán)表被改變了時,現(xiàn)存的客戶連接有如下影響:
·表和列權(quán)限在客戶的下一次請求時生效。
·數(shù)據(jù)庫權(quán)限改變在下一個USE db_name命令生效。
·全局權(quán)限的改變和口令改變在下一次客戶連接時生效。
授權(quán)原則
無論怎么小心都難免在給用戶授權(quán)時留有漏洞,希望下面的內(nèi)容能給你一些幫助,你一般應(yīng)該遵守這些規(guī)則。
只有root用戶擁有授權(quán)表的改寫權(quán)
不要把授權(quán)表的改寫權(quán)授予除root用戶之外的其它用戶(當(dāng)然,如果你可以用另一個用戶代替root用戶進(jìn)行管理,以增加安全性)。因為這樣,用戶可以通過改寫授權(quán)表而推翻現(xiàn)有的權(quán)限。產(chǎn)生安全漏洞。
一般情況下,你可能不會犯這個錯誤,但是在安裝新的分發(fā), 初始授權(quán)表之后。這個漏洞是存在的,如果你不了解這時授權(quán)表的內(nèi)容你可能會犯錯誤。
在Unix(Linux)上,在按照手冊的指令安裝好MySQL后,你必須運行mysql_install_db腳本建立包含授權(quán)表的mysql數(shù)據(jù)庫和初始權(quán)限。在Windows上,運行分發(fā)中的Setup程序初始化數(shù)據(jù)目錄和mysql數(shù)據(jù)庫。假定服務(wù)器也在運行。
當(dāng)你第一次在機器上安裝MySQL時,mysql數(shù)據(jù)庫中的授權(quán)表是這樣初始化的:
·你可以從本地主機(localhost)上以root連接而不指定口令。root用戶擁有所有權(quán)限(包括管理權(quán)限)并可做任何事情。(順便說明,MySQL超級用戶與Unix超級用戶有相同的名字,他們彼此毫無關(guān)系。)
·匿名訪問被授予用戶可從本地連接名為test和任何名字以test_開始的數(shù)據(jù)庫。匿名用戶可對數(shù)據(jù)庫做任何事情,但無管理權(quán)限。
一般地,建議你刪除匿名用戶記錄:
mysql> DELETE FROM user WHERE User="";
更進(jìn)一步,同時刪除其他授權(quán)表中的任何匿名用戶,有User列的表有db、tables_priv和columns_priv。
另外要給root用戶設(shè)置密碼。
關(guān)于用戶、口令及主機的設(shè)置
·對所有MySQL用戶使用口令。
記住,如果other_user沒有口令,任何人能簡單地用mysql -u other_user db_name作為任何其它的人登錄。對客戶機/服務(wù)器應(yīng)用程序,客戶可以指定任何用戶名是常見的做法。在你運行它以前,你可以通過編輯mysql_install_db腳本改變所有用戶的口令,或僅僅MySQL root的口令,象這樣:
shell> mysql -u root mysql
mysql> UPDATE user SET Password=PASSWORD('new_password')
-> WHERE user='root';
mysql> FLUSH PRIVILEGES;