MySQL是一個跨平台的開源關係型資料庫管理系統,是我們常用的最經濟實惠的資料庫,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,更讓用戶得到最切實的實在,很多使用者在應用程式上對授權原則不是很了了解,下面我們就為大家來解析。 MySQL是一個跨平台的開源關係型資料庫管理系統,是我們常用的最經濟實惠的資料庫,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,更讓用戶得到最切實的實在,很多使用者在應用程式上對授權原則不是很了了解,下面我們就為大家來解析。
伺服器重新啟動的情況
當mysqld啟動時,所有的授權表內容被讀進記憶體並且從那時開始生效。
被伺服器立即套用的情況
用GRANT、REVOKE或SET PASSWORD對授權表施行的修改會立即被伺服器注意到。
直接修改授權表的情況
如果你手動修改授權表(使用INSERT、UPDATE等等),你應該執行一個FLUSH PRIVILEGES語句或運行mysqladmin flush-privileges告訴伺服器再裝載授權表,否則你的改變將不生效,除非你重啟伺服器。
對現有客戶連線的影響情況
當伺服器注意到授權表被改變了時,現存的客戶連線有以下影響:
·表格和列權限在客戶的下一次請求時生效。
·資料庫權限改變在下一個USE db_name指令生效。
·全域權限的變更和口令變更在下一次客戶連線時生效。
授權原則
無論怎麼小心都難免在授權給用戶時留有漏洞,希望下面的內容能給你一些幫助,你一般都應該遵守這些規則。
只有root使用者擁有授權表的改寫權
不要把授權表的改寫權授予除root使用者之外的其它使用者(當然,如果你可以用另一個使用者代替root使用者進行管理,以增加安全性)。因為這樣,使用者可以透過改寫授權表而推翻現有的權限。產生安全漏洞。
一般情況下,你可能不會犯這個錯誤,但是在安裝新的分發, 初始授權表之後。這個漏洞是存在的,如果你不了解這時授權表的內容你可能會犯錯。
在Unix(Linux)上,在依照手冊的指令安裝好MySQL後,你必須執行mysql_install_db腳本建立包含授權表的mysql資料庫和初始權限。在Windows上,執行分發中的Setup程式初始化資料目錄和mysql資料庫。假定伺服器也在運作。
當你第一次在機器上安裝MySQL時,mysql資料庫中的授權表是這樣初始化的:
·你可以從本機(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;