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