文章來源
文章消失,請看下方
MySQL修改root密碼的4種方法
方法1:用SET PASSWORD命令
首先登錄MySQL。
格式:mysql> set password for 用戶名@localhost = password(‘新密碼’);
例子:mysql> set password for root@localhost = password(‘123’);
方法2:用mysqladmin
格式:mysqladmin -u用戶名 -p舊密碼 password 新密碼
例子:mysqladmin -uroot -p123456 password 123
方法3:用UPDATE直接編輯user表
首先登錄MySQL。
mysql> use mysql;
mysql> update user set password=password(‘123’) where user=’root’ and host=’localhost’;
mysql> flush privileges;
方法4:在忘記root密碼的時候,可以這樣
以windows為例:
1. 關閉正在運行的MySQL服務。
2. 打開DOS窗口,轉到mysql\bin目錄。
3. 輸入mysqld –skip-grant-tables 回車。–skip-grant-tables 的意思是啟動MySQL服務的時候跳過權限表認證。
4. 再開一個DOS窗口(因為剛才那個DOS窗口已經不能動了),轉到mysql\bin目錄。
5. 輸入mysql回車,如果成功,將出現MySQL提示符 >。
6. 連接權限數據庫: use mysql; 。
6. 改密碼:update user set password=password(“123”) where user=”root”;(別忘了最后加分號) 。
7. 刷新權限(必須步驟):flush privileges; 。
8. 退出 quit。
9. 注銷系統,再進入,使用用戶名root和剛才設置的新密碼123登錄。
去掉MySQL無密碼登錄隱患
(1).給MySQL賬號賦予其所需要的最小權限,避免為MySQL賬號授予alter,grant權限
(2).刪除匿名賬號
匿名賬號容易帶來安全隱患,建議刪除,執行如下SQL語句即可刪除權限表中所有的匿名賬號:
mysql>delete from mysql.user where user='';
mysql>delete from mysql.db where user='';
mysql>delete from mysql.tables_priv where user='';
mysql>delete from mysql.columns_priv where user='';
mysql>delete from mysql.procs_priv where user='';
(3).刪除登錄主機可以是任意主機的MySQL賬號
登錄主機為"%"或者空字符串的MySQL賬戶,容易帶來安全隱患,建議刪除,執行如下SQL語句即可刪除權限表中登錄主機為"%"或空字符串的MySQL賬戶。
mysql>delete from mysql.user where host='%' or host='';
mysql>delete from mysql.db where host='%' or host='';
mysql>delete from mysql.tables_priv where host='%' or host='';
mysql>delete from mysql.columns_priv where host='%' or host='';
mysql>delete from mysql.procs_priv where host='%' or host='';
(4).修改root賬號的密碼
root賬號擁有MySQL服務實例最高的權限,數據庫超級管理員root賬號有必要定制修改root賬號的密碼,執行如下SQL來修改:
mysql>set password for root@'localhost'=password('newroot');
mysql>set password for root@'127.0.0.1'=password('newroot');
(5).修改root賬號的賬號名
安裝MySQL時,MySQL將自動創建數據庫超級管理員root賬戶,且該賬戶擁有對數據庫的最高權限,數據庫超級管理員有必要對自己重命名,執行如下SQL來修改:
mysql>rename user root@'localhost' to newroot@'localhost';
mysql>rename user root@'127.0.0.1' to newroot@'127.0.0.1';
(6).修改MySQL服務的端口號
默認情況下,MySQL使用3306端口號為MySQL客戶端提供MySQL服務,將端口號修改為其它端口號,可以避免非法用戶遠程連接MySQL服務器,Linux系統可以通過
修改my.cnf配置文件[mysqld]選項組"port=3306"的參數值來完成
(7).禁止遠程連接
向my.cnf或my.ini(windows平台)配置文件[mysqld]選項組添加參數信息"bind_address=127.0.0.1",告訴MySQL服務器只能監聽來自"127.0.0.1"或者"localhost"本地主機的連接請求,禁止遠程連接。
(8).為遠程連接的數據庫用戶提供安全的賬號名、密碼和連接主機。
(9).禁止MySQL讀取MySQL客戶機本地文件
使用"load data local infile"命令可以將MySQL客戶機的本地文件導入MySQL數據庫表中,如果非法用戶
通過該命令將非法信息導入到MySQL系統的數據庫權限表中,后果不堪設想。數據庫可以在my.cnf或my.ini
配置文件[mysqld]選項組中添加"local_infile=0"參數信息來禁止MySQL讀取MySQL客戶機本地文件。
(10).除非必要,避免為MySQL賬戶授予file權限,防止數據庫用戶在MySQL服務器上創建file
說明:如果某個MySQL賬號需要執行"select..into..outfile"命令完成數據庫的備份工作,那么該賬戶需要授予file權限
MySQL安全管理的其他注意事項:
(1).當刪除對象時,MySQL不會去清理那些舊權限,這些舊權限會一直留在那里。如果未來的某個時候又以同樣的名字創建了該對象,那么這些權限依舊有效。
(2).避免使用insert,update,delete等更新語句直接操作權限表
(3).由於MySQL沒有提供用戶組或角色這樣的功能,命名MySQL賬戶名時,可以在賬戶名中添加后綴或者前綴(例如復制賬號添加"_replication"后綴),使用這種方法可以通過通配符批量修改用戶權限,模擬實現用戶組或角色功能。
(4).由於MySQL服務實例的"管理"權限,例如shutdown,process,show databases,super,create user,create tablespace等權限,功能太強大,建議將擁有這些權限的MySQL賬號限制在一台單獨的主機上使用.