共計 3579 個字符,預計需要花費 9 分鐘才能閱讀完成。
MySQL 數據庫的授權原則有哪些,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面丸趣 TV 小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
服務器重新啟動的情況
當 mysqld 啟動時,所有的授權表內容被讀進存儲器并且從那時開始生效。
被服務器立即應用的情況
用 GRANT、REVOKE 或 SET PASSWORD 對授權表施行的修改會立即被服務器注意到。
直接修改授權表的情況
如果你手工地修改授權表 (使用 INSERT、UPDATE 等等),你應該執行一個 FLUSH PRIVILEGES 語句或運行 mysqladmin flush-privileges 告訴服務器再裝載授權表,否則你的改變將不生效,除非你重啟服務器。
對現有客戶連接的影響情況
當服務器注意到授權表被改變了時,現存的客戶連接有如下影響:
·表和列權限在客戶的下一次請求時生效。
·數據庫權限改變在下一個 USE db_name 命令生效。
·全局權限的改變和口令改變在下一次客戶連接時生效。
授權原則
無論怎么小心都難免在給用戶授權時留有,希望下面的內容能給你一些幫助,你一般應該遵守這些規則。
只有 root 用戶擁有授權表的改寫權
不要把授權表的改寫權授予除 root 用戶之外的其它用戶(當然,如果你可以用另一個用戶代替 root 用戶進行管理,以增加安全性)。因為這樣,用戶可以通過改寫授權表而推翻現有的權限。產生安全漏洞。
一般情況下,你可能不會犯這個錯誤,但是在安裝新的分發, 初始授權表之后。這個漏洞是存在的,如果你不了解這時授權表的內容你可能會犯錯誤。
在 Unix()上,在按照手冊的指令安裝好 MySQL 后,你必須運行 mysql_install_db 腳本建立包含授權表的 mysql 和初始權限。在 Windows 上,運行分發中的 Setup 程序初始化數據目錄和數據庫。假定服務器也在運行。
當你第一次在機器上安裝 MySQL 時,my 中的授權表是這樣初始化的:
·你可以從本地主機(localhost)上以 root 連接而不指定口令。root 用戶擁有所有權限(包括管理權限)并可做任何事情。(順便說明,MySQL 超級用戶與 Unix 超級用戶有相同的名字,他們彼此毫無關系。)
·匿名訪問被授予用戶可從本地連接名為 test 和任何名字以 test_開始的數據庫。匿名用戶可對數據庫做任何事情,但無管理權限。
一般地,建議你刪除匿名用戶記錄:
mysql DELETE FROM user WHERE User=
更進一步,同時刪除其他授權表中的任何匿名用戶,有 User 列的表有 db、tables_priv 和 columns_priv。
另外要給 root 用戶設置密碼。
關于用戶、口令及主機的設置
·對所有 MySQL 用戶使用口令。
記住,如果 other_user 沒有口令,任何人能簡單地用 mysql -u other_user db_name 作為任何其它的人登錄。對客戶機 / 服務器應用程序,客戶可以指定任何用戶名是常見的做法。在你運行它以前,你可以通過編輯 mysql_install_db 腳本改變所有用戶的口令,或僅僅 MySQL root 的口令,象這樣:
shell mysql -u root mysql
mysql UPDATE user SET Password=PASSWORD(new_password)
– WHERE user=root;
mysql FLUSH PRIVILEGES;
·刪除匿名用戶
匿名用戶的存在不僅不僅容易引起存取拒絕錯誤,更會產生嚴重的安全漏洞,安裝授權表后,自動安裝匿名用戶。缺省時你可以用任何用戶名連接,不需要密碼,并且具有修改授權表權限。
你可以這樣刪除匿名用戶:
shell mysql –u root –p mysql
mysql delete from user where User=””;
·留意使用通配符的主機名,盡量縮小主機名的范圍,適合用戶的主機就足夠了,不要讓用戶不使用的主機留在授權表里。
·如果你不信任你的 DNS,你應該在授權表中使用 IP 數字而不是主機名。原則上講,–secure 選項對 mysqld 應該使主機名更安全。在任何情況下,你應該非常小心地使用包含通配符的主機名!
授予用戶合適的權限
·授權用戶足夠使用的權限,不要賦予額外的權限。
例如,對于用戶只需要檢索數據表的需求,賦予 SELECT 權限即可,不可賦予 UPDATE、INSERT 等寫權限,不要怕被說成時吝嗇鬼。
·可能會產生安全漏洞的權限
grant 權限允許用戶放棄他們的權限給其他用戶。2 個有不同的權限并有 grant 權限的用戶可以合并權限。
alter 權限可以用于通過重新命名表來推翻權限系統。因為 ALTER 權限可能以你沒有設想的任何方法被使用。例如,一個用戶 user1 能訪問 table1,但不能訪問 table2。但是如果用戶 user1 帶有 ALTER 權限可能通過使用 ALTER TABLE 將 table2 重命名為 table1 來打亂你的設想。
shutdown 權限通過終止服務器可以被濫用完全拒絕為其他用戶服務。
·可能會產生嚴重安全漏洞的權限
不要把 PROCESS 權限給所有用戶。mysqladmin processlist 的輸出顯示出當前執行的查詢正文,如果另外的用戶發出一個 UPDATE user SET password=PASSWORD(not_secure) 查詢,被允許執行那個命令的任何用戶可能看得到。mysqld 為有 process 權限的用戶保留一個額外的連接, 以便一個 MySQL root 用戶能登錄并檢查,即使所有的正常連接在使用。
不要把 FILE 權限給所有的用戶。有這權限的任何用戶能在擁有 mysqld 守護進程權限的文件系統那里寫一個文件!為了使這更安全一些,用 SELECT … INTO OUTFILE 生成的所有文件對每個人是可讀的,并且你不能覆蓋已經存在的文件。
FILE 權限也可以被用來讀取任何作為運行服務器的 Unix 用戶可存取的文件。這可能被濫用,因為不僅有該服務器主機帳號的用戶可以讀取它們,而且有 FILE 權限的任何客戶機也可以通過網絡讀取它們。你的數據庫目錄和系統的各種文件可能成為全球范圍共享的文件!例如,通過使用 LOAD DATA 裝載“/etc/passwd”進一個數據庫表,然后它能用 SELECT 被讀入。
下面的過程說明如何進行此項操作:
1、建具有 LONGBLOB 列的表:
mysql USE test;
mysql CREATE TABLE temp (b LONGBLOB);
2、用此表讀取你要竊取的文件的內容:
mysql LOAD DATA INFILE“/etc/passwd”INTO TABLE temp
– FIELDS ESCAPED BY “” LINES TERMINATED BY “”;
mysql SELECT * FROM temp;
3、可以這樣竊取你的數據表 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;
然后用戶就擁有的一個新表 another.data,可以對它進行完全訪問。
MySQL 權限系統無法完成的任務
有一些事情你不能用 MySQL 權限系統做到:
你不能明顯地指定一個給定用戶應該被拒絕存取。即,你不能明顯地匹配一個用戶并且然后拒絕連接。
你不能指定一個用戶有權創建立或拋棄一個數據庫中的表,也不能創建或拋棄數據庫本身。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注丸趣 TV 行業資訊頻道,感謝您對丸趣 TV 的支持。