mysql數據庫在安裝之后,有一些內置的庫(test庫)、用戶(如root@localhost.localdomain)是不需要的,而且在Linux系統上,yum安裝的mysql是默認無root密碼的,這些都給數據庫服務器的安全帶來了隱患。
這篇文章就是介紹如何進行初始優化,把這些隱患消除掉,以及在root用戶被禁止遠程登陸的情況下創建普通用戶用於局域網管理。
我們的操作環境是64位windows 7系統上面安裝的mysql 5.5
關於MySQL數據的安裝,可以參考:MySQL安裝(Windows 7)
1、刪除test庫
1 C:\Users\Administrator>mysql -uroot -p123456 2 3 4 mysql> show databases; 5 6 mysql> drop database test;
2、刪除不使用的用戶
在 Linux 系統上 yum 安裝 mysql 時,直接使用 mysql 命令即可連接到 mysql,這是因為 mysql 的內置用戶(用戶名為空而且也沒有密碼)導致的。甚至 root 用戶也沒有密碼,即使root用戶不能進行遠程連接,這也是不安全的。
1 mysql> select user, host, password from mysql.user; 2 +------+-----------------------+----------+ 3 | user | host | password | 4 +------+-----------------------+----------+ 5 | root | localhost | | 6 | root | localhost.localdomain | | 7 | root | 127.0.0.1 | | 8 | | localhost | | 9 | | localhost.localdomain | | 10 +------+-----------------------+----------+ 11 5 rows in set (0.00 sec)
首先,把用戶名為空的用戶刪除
mysql> delete from mysql.user where user = '';
然后,把root@localhost.localdomain用戶刪除
mysql> delete from mysql.user where host = 'localhost.localdomain';
然后,為 root 用戶設置密碼
mysql> update mysql.user set password = password('123456');
也可以在命令行使用 mysqladmin 命令設置密碼:mysqladmin -u root password '123456'
查看一下
1 mysql> select user, host, password from mysql.user; 2 +------+-----------+-------------------------------------------+ 3 | user | host | password | 4 +------+-----------+-------------------------------------------+ 5 | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 6 | root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 7 +------+-----------+-------------------------------------------+ 8 2 rows in set (0.00 sec)
最后,刷新一下權限
mysql> flush privileges;
3、添加局域網管理用戶
因為 root 已經被禁止了遠程連接,即使是局域網主機,也不能連接。但是我們有需要從遠程連接到mysql服務器進行管理。此時可以:
創建用戶,允許從局域網主機連接,可以授予所有庫、所有表的所有權限,也可以只授予某些庫、某些表的某些權限。
我們通常的解決方案是:一個擁有所有權限的管理員用戶(用戶名密碼只能幾個核心管理者擁有,甚至可以把host設置在很小的范圍內),管理不同庫的多個普通用戶(不同系統的管理者擁有,彼此盡量無交集)
下面我們看一下創建用戶的語法:創建system用戶,授予所有庫、所有表的所有權限,允許局域網192.168.0網段主機連接,密碼是123456
1 mysql> GRANT ALL ON *.* TO 'system'@'192.168.0.%' IDENTIFIED BY '123456'; 2 mysql> GRANT ALL ON *.* TO 'system'@'localhost' IDENTIFIED BY '123456'; 3 mysql> GRANT ALL ON *.* TO 'system'@'127.0.0.1' IDENTIFIED BY '123456'; 4 5 mysql> select user, host, password from mysql.user; 6 +--------+--------------+-------------------------------------------+ 7 | user | host | password | 8 +--------+--------------+-------------------------------------------+ 9 | root | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 10 | root | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 11 | system | 192.168.0.% | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 12 | system | localhost | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 13 | system | 127.0.0.1 | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 | 14 +--------+--------------+-------------------------------------------+ 15 5 rows in set (0.00 sec) 16 17 mysql> flush privileges;
從 192.168.0.10 主機進行遠程連接
C:\Users\Administrator>mysql -usystem -p123456 -h 192.168.0.105
可以成功連接了
4、mysql命令主要選項
| -?, --help | 顯示幫助 |
| -D, --database=name | 指定使用的數據庫 |
| --default-character-set=name | 設置客戶端連接編碼 mysql -uroot -p123456 --default-character-set=gbk |
| -e, --execute=name | 執行語句后退出,這個選項在編寫shell腳本時很有用 mysql -uroot -p123456 --default-character-set=gbk -e "select * from test.t_user;" |
| -h, --host=name | 連接主機名。默認loadlhost。在連接遠程數據庫時使用 |
| -p, --password[=name] | 密碼,如果未指定這個選項,會在mysql命令行提示輸入 |
| -P, --port=# | 服務端口,默認3306 |
| -S, --socket=name | 連接使用的socket文件 |
| -u, --user=name | 連接使用的用戶 |
| -V, --version | 輸出版本信息 |
| --connect-timeout=# | 連接超時時長,單位為秒 |
你好你好你好你好你好
你好你好你好
5、help命令
MySQL 的官方文檔非常全面,即使您沒有 MySQL 相關經驗,只要有一定的 SQL、DOS/Linux 命令行基礎,就可以根據官方文檔學習 MySQL 的核心命令和 SQL 語法了。
在 mysql 控制台里面,可以使用 help 來查看幫助,如:查看 create 的幫助可以使用 help create 語句、查看刪除表的幫助可以使用 help drop table 語句......
