您好,登錄后才能下訂單哦!
本篇內容介紹了“MySQL的安全使用方式”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
MySQL 基礎知識
MySQL是一個流行的關系型數據庫管理系統(Relational Database Management System,RDMS),在與PHP結合應用方面,MySQL是最好的關系型數據庫管理系統之一。MySQL使用不當,常常會引起致命的安全問題。
1、運行安全
為了防止攻擊者通過MySQL漏洞越權獲取更高的權限,不要使用系統root用戶運行MySQL服務器。mysqld默認拒絕使用root運行,如果對mysqld服務需要指定用戶進行運行,應該使用普通非特權用戶運行mysqld,同時為數據庫建立獨立的Linux中的MySQL賬戶,該賬戶只用于管理和運行MySQL。
在MySQL配置/etc/my.cnf文件中指定執行賬戶。
vim /etc/my.cnf [mysqld] user=mysql
這個配置使服務器用指定的用戶來啟動,無論是手動啟動還是通過mysqld_safe或mysql.server啟動,都能確保使用MySQL的身份。也可以在啟動參數上進行配置,加上user參數。
/usr/local/mysql/bin/mysqld_safe --user=mysql &
默認的MySQL安裝在/usr/local/mysql,對應的默認數據庫文件在/usr/local/mysql/var目錄下,必須保證該目錄不能讓未經授權的用戶訪問后把數據庫打包復制走,所以要限制對該目錄的訪問。mysqld運行時,只使用對數據庫目錄具有讀或寫權限的Linux用戶來運行。
MySQL主目錄只允許root用戶進行訪問。
chown -R root /usr/local/mysql/
數據庫目錄只允許MySQL用戶進行訪問。
chown -R mysql.mysql /usr/local/mysql/var
2、密碼安全
默認安裝的MySQL的root用戶密碼是空密碼,為了安全起見,必須修改為強密碼,即至少8位,由字母、數字和符號組成的不規律密碼。使用MySQL自帶的mysqladmin命令修改root密碼。
mysqladmin -u root password "new-password" //使用mysqladmin修改密碼
同時可以使用下面的命令登錄數據庫對密碼進行修改。
mysql>use mysql mysql>update user set pas sword=pas sword('new-password') where user='root'; mysql>flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令
3、賬號安全
系統MySQL的默認管理員名稱是root,而一般情況下,數據庫管理員都沒有進行修改,這在一定程度上為系統用戶密碼暴力破解的惡意攻擊行為提供了便利,應該修改為復雜的用戶名,加強賬號的安全,同時不要使用admin或者administrator,因為它們也在易猜解的用戶字典中。
mysql>update user set user="new-root-name" where user="root"; mysql>flush privileges; // 強制刷新內存授權表,否則使用的還是在內存緩沖的口令
需要正確地給用戶分配權限,不要將全部權限分配給普通用戶,有選擇性地分配讀寫權限,如只分配查詢權限給用戶。
mysql>grant SELECT on db.table to username@'localhost'
不要將with grant option授權給普通用戶,防止普通用戶將權限授予他人,造成管理混亂。
表1是常用的權限及說明。
表1 常用權限及說明
4、數據庫安全
默認MySQL安裝初始化后會自動生成空用戶和test庫,進行安裝測試,這會對數據庫的安全構成威脅,有必要全部刪除,最后的狀態只保留單個root即可。當然,以后可以根據需要增加用戶和數據庫。
mysql>show databases; mysql>drop database test; // 刪除數據庫test use mysql; delete from db; // 刪除存放數據庫的表信息,因為還沒有數據庫信息 mysql>delete from user where not (user='root'); // 刪除初始非root的用戶 mysql>delete from user where user='root' and password=; // 刪除空密碼的root Query OK, 2 rows affected(0.00 sec) mysql>flush privileges; // 強制刷新內存授權表
5、限制非授權IP訪問
如果是單機運行MySQL,推薦開啟skip-networking,可以徹底關閉MySQL的TCP/IP連接方式。
# my.ini skip-networking
如果是固定IP訪問MySQL,可以在配置文件中增加bind-address=IP,前提是關閉skip-networking。
bind-address=10.10.1.1
6、文件讀取安全
在MySQL中,使用load data local infile命令提供對本地文件的讀取功能。在5.0版本中,該選項是默認打開的,該操作會利用MySQL把本地文件讀到數據庫中,然后攻擊者就可以非法獲取敏感信息。假如不需要讀取本地文件,應將其關閉。
網絡上流傳的一些攻擊方法中就有用到load data local infile的,同時它也是很多新發現的SQL Injection攻擊利用的手段。攻擊者還能通過使用load data local infile裝載“/etc/passwd”進一個數據庫表,然后用SELECT顯示它,這個操作對服務器的安全來說是致命的。
可以在my.cnf中添加local-infile=0參數。
vim /etc/my.cnf [mysqld] set-variable=local-infile = 0
或者在MySQL啟動時添加local-infile=0參數。
/usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0 &
7、常用安全選項
下面是一些MySQL自己提供的安全選項,在使用MySQL服務時可以根據自己的需要進行靈活的配置。
--allow-suspicious-udfs
該選項控制是否可以載入主函數只有xxx符號的用戶定義函數,如xxx_init()、xxx_deinit()、xxx_reset()、xxx_clear()、xxx_add()等函數。默認情況下,該選項關閉,并且只能載入至少有輔助符的UDF。這樣可以防止從未包含合法UDF的共享對象文件載入函數。
--local-infile[={0|1}]
如果用--local-infile=0啟動服務器,則客戶端不能使用LOCAL IN LOAD DATA語句。
--old-passwords
強制服務器為新密碼生成短(pre-4.1)散列密碼。當服務器必須支持舊版本客戶端程序時,這對于保證兼容性很有作用。
(OBSOLETE) --safe-show-database
在以前版本的MySQL中,該選項使SHOW DATABASES語句只顯示用戶具有部分權限的數據庫名。在MySQL 5.1中,該選項不再作為現在的默認行為使用,有一個SHOW DATABASES權限可以用來控制每個賬戶對數據庫名的訪問。
--safe-user-create
如果啟用,用戶不能使用GRANT語句創建新用戶,除非用戶有mysql.user表的INSERT權限。如果要讓用戶具有授權權限來創建新用戶,應給用戶授予下面的權限。
mysql> GRANT INSERT(user) ON mysql.user TO'user_name'@'host_name';
這樣確保用戶不能直接更改權限列,必須使用GRANT語句給其他用戶授予該權限。
--secure-auth
不允許鑒定有舊(pre-4.1)密碼的賬戶。
--skip-grant-tables
這個選項導致服務器根本不使用權限系統,從而使得每個人都有權完全訪問所有數據庫!(通過執行mysqladmin flush-privileges或mysqladmin eload命令,或執行FLUSH PRIVILEGES語句,可以告訴一個正在運行的服務器再次開始使用授權表。)
--skip-name-resolve
主機名不被解析。所有在授權表的Host的列值必須是IP號或localhost。
--skip-networking
在網絡上不允許TCP/IP連接。所有到mysqld的連接必須經由Unix套接字進行。
--skip-show-database
使用該選項,只允許有SHOW DATABASES權限的用戶執行SHOW DATABASES語句,該語句顯示所有數據庫名。不使用該選項,允許所有用戶執行SHOW DATABASES,但只顯示用戶有SHOW DATABASES權限或部分數據庫權限的數據庫名。請注意,全局權限指數據庫的權限。
8、數據安全
在生產環境中,數據庫可能會遭遇各種各樣的不測從而導致數據丟失,如硬件故障、軟件故障、自然災害、惡意攻擊者攻擊、誤操作等都會對數據造成損壞或丟失。為了在數據丟失之后能夠及時恢復數據,需要定期對數據進行備份。
備份數據的策略要根據不同的業務場景進行定制,大致有幾個參考數值,可以根據這些數值來定制符合特定環境中的數據備份策略。
(1)能夠容忍丟失多少數據。
(2)恢復數據需要多長時間。
(3)需要恢復哪些數據。
根據業務場景的需要來選擇備份方式是完整備份、增量備份還是差異備份。
“MySQL的安全使用方式”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。