溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

MySQL數(shù)據(jù)庫(kù)的授權(quán)原則有哪些

發(fā)布時(shí)間:2021-08-04 16:57:14 來(lái)源:億速云 閱讀:165 作者:Leah 欄目:數(shù)據(jù)庫(kù)

MySQL數(shù)據(jù)庫(kù)的授權(quán)原則有哪些,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

服務(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)表的改寫權(quán)

不要把授權(quán)表的改寫權(quán)授予除root用戶之外的其它用戶(當(dāng)然,如果你可以用另一個(gè)用戶代替root用戶進(jìn)行管理,以增加安全性)。因?yàn)檫@樣,用戶可以通過(guò)改寫授權(quán)表而推翻現(xiàn)有的權(quán)限。產(chǎn)生安全漏洞。

一般情況下,你可能不會(huì)犯這個(gè)錯(cuò)誤,但是在安裝新的分發(fā), 初始授權(quán)表之后。這個(gè)漏洞是存在的,如果你不了解這時(shí)授權(quán)表的內(nèi)容你可能會(huì)犯錯(cuò)誤。

在Unix()上,在按照手冊(cè)的指令安裝好MySQL后,你必須運(yùn)行mysql_install_db腳本建立包含授權(quán)表的mysql和初始權(quán)限。在Windows上,運(yùn)行分發(fā)中的Setup程序初始化數(shù)據(jù)目錄和數(shù)據(jù)庫(kù)。假定服務(wù)器也在運(yùn)行。

當(dāng)你第一次在機(jī)器上安裝MySQL時(shí),my中的授權(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;


·刪除匿名用戶

匿名用戶的存在不僅不僅容易引起存取拒絕錯(cuò)誤,更會(huì)產(chǎn)生嚴(yán)重的安全漏洞,安裝授權(quán)表后,自動(dòng)安裝匿名用戶。缺省時(shí)你可以用任何用戶名連接,不需要密碼,并且具有修改授權(quán)表權(quán)限。

你可以這樣刪除匿名用戶:

shell>mysql –u root –p mysql
mysql>delete from user where User=””;


·留意使用通配符的主機(jī)名,盡量縮小主機(jī)名的范圍,適合用戶的主機(jī)就足夠了,不要讓用戶不使用的主機(jī)留在授權(quán)表里。

·如果你不信任你的DNS,你應(yīng)該在授權(quán)表中使用IP數(shù)字而不是主機(jī)名。原則上講,--secure選項(xiàng)對(duì)mysqld應(yīng)該使主機(jī)名更安全。在任何情況下,你應(yīng)該非常小心地使用包含通配符的主機(jī)名!

授予用戶合適的權(quán)限

·授權(quán)用戶足夠使用的權(quán)限,不要賦予額外的權(quán)限。

例如,對(duì)于用戶只需要檢索數(shù)據(jù)表的需求,賦予SELECT權(quán)限即可,不可賦予UPDATE、INSERT等寫權(quán)限,不要怕被說(shuō)成時(shí)吝嗇鬼。

·可能會(huì)產(chǎn)生安全漏洞的權(quán)限

grant權(quán)限允許用戶放棄他們的權(quán)限給其他用戶。2個(gè)有不同的權(quán)限并有g(shù)rant權(quán)限的用戶可以合并權(quán)限。

alter權(quán)限可以用于通過(guò)重新命名表來(lái)推翻權(quán)限系統(tǒng)。因?yàn)锳LTER權(quán)限可能以你沒(méi)有設(shè)想的任何方法被使用。例如,一個(gè)用戶user1能訪問(wèn)table1,但不能訪問(wèn)table2。但是如果用戶user1帶有ALTER權(quán)限可能通過(guò)使用ALTER TABLE將table2重命名為table1來(lái)打亂你的設(shè)想。

shutdown權(quán)限通過(guò)終止服務(wù)器可以被濫用完全拒絕為其他用戶服務(wù) 。

·可能會(huì)產(chǎn)生嚴(yán)重安全漏洞的權(quán)限

不要把PROCESS權(quán)限給所有用戶。mysqladmin processlist的輸出顯示出當(dāng)前執(zhí)行的查詢正文,如果另外的用戶發(fā)出一個(gè)UPDATE user SET password=PASSWORD(not_secure)查詢,被允許執(zhí)行那個(gè)命令的任何用戶可能看得到。mysqld為有process權(quán)限的用戶保留一個(gè)額外的連接, 以便一個(gè)MySQL root用戶能登錄并檢查,即使所有的正常連接在使用。

不要把FILE權(quán)限給所有的用戶。有這權(quán)限的任何用戶能在擁有mysqld守護(hù)進(jìn)程權(quán)限的文件系統(tǒng)那里寫一個(gè)文件!為了使這更安全一些,用SELECT ... INTO OUTFILE生成的所有文件對(duì)每個(gè)人是可讀的,并且你不能覆蓋已經(jīng)存在的文件。

FILE權(quán)限也可以被用來(lái)讀取任何作為運(yùn)行服務(wù)器的Unix用戶可存取的文件。這可能被濫用,因?yàn)椴粌H有該服務(wù)器主機(jī)帳號(hào)的用戶可以讀取它們,而且有FILE權(quán)限的任何客戶機(jī)也可以通過(guò)網(wǎng)絡(luò)讀取它們。你的數(shù)據(jù)庫(kù)目錄和系統(tǒng)的各種文件可能成為全球范圍共享的文件!例如,通過(guò)使用LOAD DATA裝載“/etc/passwd”進(jìn)一個(gè)數(shù)據(jù)庫(kù)表,然后它能用SELECT被讀入。

下面的過(guò)程說(shuō)明如何進(jìn)行此項(xiàng)操作:

1、建具有LONGBLOB列的表:

mysql> USE test;
mysql> CREATE TABLE temp (b LONGBLOB);


2、用此表讀取你要竊取的文件的內(nèi)容:

mysql>LOAD DATA INFILE “/etc/passwd” INTO TABLE temp
->FIELDS ESCAPED BY  “”  LINES TERMINATED BY  “”;
mysql>SELECT * FROM temp;


3、可以這樣竊取你的數(shù)據(jù)表data:

mysql>LOAD DATA INFILE“./other_db/data.frm” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.frm”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;
mysql>LOAD DATA INFILE“./other_db/data.MYD” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.MYD”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;
mysql>LOAD DATA INFILE“./other_db/data.MYI” INTO TABLE temp
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>SELECT * FROM temp INTO OUTFILE“./another_db/data.MYI”
->FIELDS ESCAPED BY“”LINES TERMINATED BY“”;
mysql>DELETE FROM temp;


然后用戶就擁有的一個(gè)新表another.data,可以對(duì)它進(jìn)行完全訪問(wèn)。

MySQL權(quán)限系統(tǒng)無(wú)法完成的任務(wù)

有一些事情你不能用MySQL權(quán)限系統(tǒng)做到:

你不能明顯地指定一個(gè)給定用戶應(yīng)該被拒絕存取。即,你不能明顯地匹配一個(gè)用戶并且然后拒絕連接。

你不能指定一個(gè)用戶有權(quán)創(chuàng)建立或拋棄一個(gè)數(shù)據(jù)庫(kù)中的表,也不能創(chuàng)建或拋棄數(shù)據(jù)庫(kù)本身。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI