程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> 關於MYSQL數據庫 >> MySQL簡單安全設置與優化(總結)

MySQL簡單安全設置與優化(總結)

編輯:關於MYSQL數據庫
1.修改root的的口令
缺省情況下MySQL沒有設置密碼,我們可以用三種方法設置密碼頭: *  用admin來改root用戶口令
# myadmin -uroot passWord 54netseek //設置MySQL操作用戶root的密碼為52netseek*  用set passWord修改口令:
MySQL> set password for root@localhost=passWord('54netseek); *  直接修改user表的root用戶口令     
mysql> use MySQL;
MySQL> update user set password=passWord('54netseek') where user='root';
MySQL> flush privileges; 2.刪除默認的和用戶
我們的庫是在本地,並且也只需要本地的PHP腳本對MySQL進行讀取,所以很多用戶不需要。m
ysql初始化後會自動生成空用戶和test庫,這會對數據庫構成威脅,我們全部刪除。
我們使用mysql客戶端程序連接到本地的MySQL後出現如下提示:
MySQL> drop database test;
mysql> use MySQL;
MySQL> delete from db;
MySQL> delete from user where not(host="localhost" and user="root");
mysql> flush privileges; 3. 改變默認MySQL管理員的名稱 //僅為建議
根據個人習慣,因為默認的MySQL的管理員名稱是root,所以如果能夠修改的話,
能夠防止一些腳本小子對的窮舉。我們可以直接修改數據庫,把root用戶改為"admin"
mysql> use MySQL;
MySQL> update user set user="admin" where user="root";
MySQL> flush privileges; 4. 提高本地安全性
提高本地安全性,主要是防止mysql對本地的存取,比如黑客通過MySQL把/etc/passwd獲取了,會對系統構成威脅。
MySQL對本地文件的存取是通過SQL語句來實現,主要是通過Load DATA LOCAL INFILE來實現,我們能夠通過禁用該來
防止黑客通過SQL注射等獲取系統核心文件。 禁用該功能必須在 my.cnf 的[MySQLd]部分加上一個參數:
set-variable=local-infile=0 5. 禁止遠程連接MySQL
因為我們的MySQL只需要本地的PHP腳本進行連接,所以我們無需開socket進行監聽,那麼我們完全可以關閉監聽的功能。
有兩個方法實現:
* 配置my.cnf文件,在[MySQLd]部分添加 skip-networking 參數
* mysqld服務器中參數中添加 --skip-networking 啟動參數來使mysql不監聽任何TCP/IP連接,增加安全性。如果要進行MySQL的管理的話,可以在服務器本地安裝一個PHPMyadmin來進行管理。 6.控制數據庫訪問權限
對於使用PHP腳本來進行交互,最好建立一個用戶只針對某個庫有 update、select、delete、insert、drop table、create table等權限,這樣就很好避免了數據庫用戶名和密碼被黑客查看後最小損失。
比如下面我們創建一個數據庫為db1,同時建立一個用戶test1能夠訪問該數據庫。
MySQL> create database db1;
MySQL> grant select,insert,update,delete,create,drop privileges on db1.* to test1@localhost identifIEd by 'admindb';
以上SQL是創建一個數據庫db1,同時增加了一個test1用戶,口令是admindb,但是它只能從本地連接MySQL,對db1庫有select,insert,update,delete,create,drop操作權限。 7. 限制一般用戶浏覽其他用戶數據庫
如果有多個數據庫,每個數據庫有一個用戶,那麼必須限制用戶浏覽其他數據庫內容,可以在啟動MySQL服務器時加--skip-show-database 啟動參數就能夠達到目的。 忘記MySQL密碼的辦法
如果不慎忘記了MySQL的root密碼,我們可以在啟動MySQL服務器時加上參數--skip-grant-tables來跳過授權表的驗證 (./safe_mysqld --skip-grant-tables &),這樣我們就可以直接登陸MySQL服務器,然後再修改root用戶的口令,重啟MySQL就可以用新口令登陸了。 8. 數據庫文件的安全
我們默認的mysql是安裝在/usr/local/mysql目錄下的,那麼對應的數據庫文件就是在/usr/local/MySQL/var目錄下,那麼我們要保證該目錄不能讓未經授權的用戶訪問後把數據庫打包拷貝走了,所以要限制對該目錄的訪問。
我們修改該目錄的所屬用戶和組是MySQL,同時改變訪問權限:
# chown -R mysql.mysql /usr/local/MySQL/var
# chmod -R go-rwx /usr/local/MySQL/var 9.刪除歷史記錄
執行以上的命令會被shell記錄在歷史文件裡,比如bash會寫入用戶目錄的.bash_history文件,如果這些文件不慎被讀,
那麼數據庫的密碼就會洩漏。用戶登陸數據庫後執行的SQL命令也會被MySQL記錄在用戶目錄的.MySQL_history文件裡。
如果數據庫用戶用SQL語句修改了數據庫密碼,也會因.MySQL_history文件而洩漏。所以我們在shell登陸及備份的時候
不要在-p後直接加密碼,而是在提示後再輸入數據庫密碼。 另外這兩個文件我們也應該不讓它記錄我們的操作,以防萬一。
# rm .bash_history .MySQL_history
# ln -s /dev/null .bash_history
# ln -s /dev/null .MySQL_history 10. 其他
另外還可以考慮使用chroot等方式來控制MySQL的運行目錄,更好的控制權限,具體可以參考相關文章。
my.cnf的調試參數
11.快速修復MySQL數據庫
修復數據庫
# MySQLcheck -A -o -r -p
修復指定的數據庫
# MySQLcheck  -o -r Database_NAME -p --------------------------------------
12.跟據內存的大小選擇MySQL的負載,選擇相應的文件名復制到/etc/my.cnf
如果是RPM包安裝:/usr/share/doc/MySQL-XXX/目錄下有
如果是源代碼編譯安裝:support-files/目錄下有.
cp /usr/local/share/MySQL-***/my-large.cnf /etc/my.cnf
my-small.cnf # > my-medium.cnf # 32M - 64M
my-large.cnf # memory = 512M
my-huge.cnf # 1G-2G
my-innodb-heavy-4G.cnf # 4GB
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved