top
Loading...
2.9.3.使初始MySQL賬戶安全
2.9.3. 使初始MySQL賬戶安全

MySQL安裝過程包括設置含有授權表的MySQL數據庫:

·         Windows分發版包含預初始化的授權表,可以自動安裝。

·         Unix中,用mysql_install_db程序來安裝 授權表。可以通過一些安裝方法來運行該程序。否則你需要手動執行。詳細信息參見2.9.2節,“Unix下安裝后的過程”。

授權表定義了初始MySQL用戶賬戶和訪問權限。按照以下步驟對這些賬戶進行設置:

·         用用戶root 創建兩個賬戶。這些賬戶為超用戶賬戶,可以執行任何操作。初始root賬戶的密碼為空,因此任何人可以用root賬戶不用任何密碼來連接MySQL服務器,并具有所有權限。

o        Windows中,一個root賬戶用來從本機連接MySQL服務器,另一個允許從任何主機連接。

o        Unix中,兩個root賬戶均用于從本機連接。必須從本機進行連接,一個賬戶主機名應指定為localhost,另一個賬戶為實際的主機名或IP號。

·         創建了兩個匿名用戶賬戶,每個賬戶的用戶名均為空。匿名賬戶沒有密碼,因此任何人可以使用匿名賬戶來連接MySQL服務器。

o        Windows中,一個匿名賬戶用來從本機進行連接。它具有所有權限,同root 賬戶一樣。另一個可以從任何主機上連接,具有test數據庫或其它以test開始的數據庫的所有權限。

o        Unix中,兩個匿名賬戶均用于從本機連接。必須從本機進行連接,一個賬戶主機名應指定為localhost,另一個賬戶為實際的主機名或IP。兩個賬戶具有test數據庫或其它以test開始的數據庫的所有權限。

如前面所述,所有初始賬戶均沒有密碼。這意味著在你執行下述操作前,MySQL安裝未受保護:

·         如果你想要防止客戶端不使用密碼用匿名用戶來連接,你應當為匿名賬戶指定密碼或刪掉匿名賬戶。

·         你應當為MySQL root賬戶指定密碼。

下面的說明描述了如何為初始MySQL賬戶設置密碼,先為匿名賬戶設置然后為root賬戶設置。在例子中用實際密碼替換“newpwd”。說明還包括如果你不想用匿名賬戶訪問,如何刪掉匿名賬戶。

你可能想要在以后設置密碼,因此不需要在進一步的設置或測試中指定密碼。但是,一定要在實際生產作業、使用安裝前設置好密碼。

要想為匿名賬戶指定密碼,可以使用SET PASSWORDUPDATE。在兩種情況中,一定要使用PASSWORD()函數為密碼加密。

Windows中使用PASSWORD的方法:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'%' = PASSWORD('newpwd');

Unix中使用PASSWORD的方法:

shell> mysql -u root
mysql> SET PASSWORD FOR ''@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR ''@'host_name' = PASSWORD('newpwd');

用服務器主機名替換第二個SET PASSWORD語句中的host_name。這是指定的user表中的root non-localhost記錄的Host列名。如果你不知道是哪個主機名,在SET PASSWORD之前執行下面的語句:

mysql> SELECT Host, User FROM mysql.user;

查找在User列有root和在Host列沒有localhost的記錄。然后在第二個SET PASSWORD語句中使用該Host值。

為匿名賬戶指定密碼的另一種方法是使用UPDATE直接修改用戶表。用root連接服務器,運行UPDATE語句為相應user表記錄的Password列指定一個值。在WindowsUnix中的過程是相同的。下面的UPDATE語句同時為兩個匿名賬戶指定密碼:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = '';
mysql> FLUSH PRIVILEGES;

user表中直接使用UPDATE更新密碼后,必須讓服務器用FLUSH PRIVILEGES重新讀授權表。否則,重新啟動服務器前,不會使用更改。

如果你寧愿刪除匿名賬戶,操作方法是:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE User = '';
mysql> FLUSH PRIVILEGES;

可以在WindowsUnix中使用DELETE語句。在Windows中,如果你只想刪掉具有與root相同權限的匿名賬戶,方法為:

shell> mysql -u root
mysql> DELETE FROM mysql.user WHERE Host='localhost' AND User='';
mysql> FLUSH PRIVILEGES;

該賬戶允許匿名訪問,但是擁有全部的權限,因此刪掉它可以提高安全。

你可以用幾種方法為root賬戶指定密碼。以下介紹了三種方法:

·         使用SET PASSWORD語句

·         使用mysqladmin命令行客戶端程序

·         使用UPDATE語句

要想使用SET PASSWORD指定密碼,用root連接服務器并執行兩個SET PASSWORD語句。一定要使用PASSWORD()函數來加密密碼。

Windows中的語句:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'%' = PASSWORD('newpwd');

Unix中的語句:

shell> mysql -u root
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('newpwd');
mysql> SET PASSWORD FOR 'root'@'host_name' = PASSWORD('newpwd');

用服務器主機名替換第二個SET PASSWORD語句中的host_name。這是你指定匿名賬戶密碼的主機名。

要想使用mysqladminroot賬戶指定密碼,執行下面的命令:

  shell> mysqladmin -u root password "newpwd"
  shell> mysqladmin -u root -h host_name password "newpwd"

上述命令適用于WindowsUnix。用服務器主機名替換第二個命令中的host_name。不一定需要將密碼用雙引號引起來,但是你如果密碼中包含空格或專用于命令解釋的其它字符,則需要用雙引號引起來。

你還可以使用UPDATE直接修改user表。下面的UPDATE語句可以同時為兩個root賬戶指定密碼:

shell> mysql -u root
mysql> UPDATE mysql.user SET Password = PASSWORD('newpwd')
    ->     WHERE User = 'root';
mysql> FLUSH PRIVILEGES;

UPDATE語句適用于WindowsUnix

設置完密碼后,當你連接服務器時你必須提供相應密碼。例如,如果你想要用mysqladmin 關閉服務器,可以使用下面的命令:

shell> mysqladmin -u root -p shutdown
Enter password: (enter root password here)

注釋:如果你設置了root密碼后忘記了密碼,從A.4.1節,“如何復位根用戶密碼”中查閱重設密碼的方法。

你可以使用GRANT語句設置新賬戶。相關說明參見5.8.2節,“向MySQL增加新用戶賬戶”。

作者:mysql.com
來源:http://dev.mysql.com/doc/refman/5.1/zh/installing.html
北斗有巢氏 有巢氏北斗