?????博主簡(jiǎn)介
????云計(jì)算領(lǐng)域優(yōu)質(zhì)創(chuàng)作者
????華為云開(kāi)發(fā)者社區(qū)專家博主
????阿里云開(kāi)發(fā)者社區(qū)專家博主
??交流社區(qū):運(yùn)維交流社區(qū) 歡迎大家的加入!
?? 希望大家多多支持,我們一起進(jìn)步!??
??如果文章對(duì)你有幫助的話,歡迎 點(diǎn)贊 ???? 評(píng)論 ?? 收藏 ?? 加關(guān)注+??

前言
MySQL數(shù)據(jù)庫(kù)是業(yè)務(wù)系統(tǒng)中常用的關(guān)系型數(shù)據(jù)庫(kù),但是由于其廣泛使用,也成為安全攻擊的目標(biāo)。因此,數(shù)據(jù)庫(kù)安全加固至關(guān)重要。下面將為大家提供一份基于Linux的MySQL數(shù)據(jù)庫(kù)安全加固指南,幫助大家保護(hù)自己及公司的數(shù)據(jù)庫(kù)免受潛在的安全威脅。
常見(jiàn)的MySQL數(shù)據(jù)庫(kù)攻擊方式包括SQL注入,暴力破解和拒絕服務(wù)攻擊。以下是一些簡(jiǎn)單的加固方法:
- 1.修改默認(rèn)端口:MySQL默認(rèn)端口為3306,容易被攻擊者掃描到,建議修改為其他端口。
- 2.安裝防火墻:通過(guò)配置防火墻,可以控制數(shù)據(jù)庫(kù)的訪問(wèn)權(quán)限,并防止惡意請(qǐng)求。
- 3.強(qiáng)化密碼:使用強(qiáng)密碼并定期更新。避免使用簡(jiǎn)單的密碼,比如123456和qwerty等。強(qiáng)密碼包括:(復(fù)雜密碼應(yīng)包括大小寫(xiě)字母、數(shù)字和特殊字符),可參考此文章隨機(jī)生成密碼:【Linux】Centos7 隨機(jī)生成密碼
- 4.刪除無(wú)用的賬戶:刪除不必要的賬戶以減少攻擊面。
- 5.開(kāi)啟SSL/TLS連接:開(kāi)啟MySQL的ssl選項(xiàng),啟用加密傳輸可以提高安全性。
- 6.控制訪問(wèn)權(quán)限:控制應(yīng)用程序?qū)ySQL的操作權(quán)限,限制只能讀取和操作必要的表、字段和行。
- 7.開(kāi)啟日志:開(kāi)啟MySQL的日志功能,記錄所有的查詢操作,以便后期審查和追蹤攻擊來(lái)源。
- 8.定期備份數(shù)據(jù),并將備份數(shù)據(jù)存儲(chǔ)在安全的位置。備份是防止數(shù)據(jù)丟失和恢復(fù)數(shù)據(jù)的重要手段。這里推薦一份定時(shí)定期備份數(shù)據(jù)的腳本:mysql數(shù)據(jù)庫(kù)定時(shí)備份腳本+定時(shí)刪除 。
- 9.禁用root遠(yuǎn)程登陸,啟用訪問(wèn)控制: 在MySQL配置文件中啟用訪問(wèn)控制,只允許特定的IP地址或主機(jī)名訪問(wèn)數(shù)據(jù)庫(kù)。這樣可以防止未授權(quán)的訪問(wèn)嘗試。
- 10.監(jiān)控和警報(bào): 設(shè)置數(shù)據(jù)庫(kù)監(jiān)控工具和警報(bào)系統(tǒng),及時(shí)發(fā)現(xiàn)和響應(yīng)潛在的安全事件和異常活動(dòng)。
除了以上措施,還有一些其他的技巧可以幫助加強(qiáng)MySQL數(shù)據(jù)庫(kù)的安全性。例如,使用雙因素身份驗(yàn)證,設(shè)置入侵檢測(cè)系統(tǒng)進(jìn)行實(shí)時(shí)監(jiān)控。
總之,MySQL數(shù)據(jù)庫(kù)的安全加固是必要的,可以在攻擊者趁虛而入之前有效地減少數(shù)據(jù)庫(kù)安全風(fēng)險(xiǎn)。
下面給大家講解一些實(shí)例吧!
數(shù)據(jù)庫(kù)加固實(shí)例
1、修改mysql默認(rèn)端口
在配置文件中修改端口,配置文件名為:“my.cnf”在服務(wù)器中的/etc/下;
??如果使用的是容器的方式部署的,可以修改一下創(chuàng)建容器時(shí)對(duì)外開(kāi)放的端口,具體容器修改端口可參考:docker修改容器的端口、容器名、映射地址…
來(lái)看看容器外部署的數(shù)據(jù)庫(kù)如何修改;
cat /etc/my.cnf
找到port,注意my.cnf
可能會(huì)有兩個(gè)port,一個(gè)是[client]
下的,一個(gè)是[mysqld]
下的,修改[mysqld]
下的port即可,client下的也可以修改,主要是[mysqld]
下的生效;
修改完重啟數(shù)據(jù)庫(kù),有一點(diǎn)如果訪問(wèn)不到,可以先查看端口有沒(méi)有起來(lái),如果起來(lái)了,就檢查防火墻,如果沒(méi)起來(lái),就去看數(shù)據(jù)庫(kù)啟動(dòng)報(bào)錯(cuò)或日志;
修改完重啟一下服務(wù)即可生效。
2、安裝配置防火墻
使用centos中自帶的firewall-cmd
來(lái)管理防火墻即可;
#開(kāi)啟防火墻
systemctl restart firewalld
#開(kāi)放數(shù)據(jù)庫(kù)的端口
#開(kāi)放3306端口、加載防火墻配置、查看端口是否開(kāi)放
firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
firewall-cmd --list-ports | grep 3306
3、強(qiáng)化密碼
可參考此文章隨機(jī)生成密碼:【Linux】Centos7 隨機(jī)生成密碼
這樣安全性比較高,如果想要自己設(shè)置當(dāng)然也可以;建議使用強(qiáng)密碼并定期更新。避免使用簡(jiǎn)單的密碼,比如123456和qwerty等。強(qiáng)密碼包括:(復(fù)雜密碼應(yīng)包括大小寫(xiě)字母、數(shù)字和特殊字符)。
4、開(kāi)啟日志
開(kāi)啟log-bin日志,可在配置文件中開(kāi)啟;/etc/my.cnf
log-bin=mysql-bin
開(kāi)啟完,重啟服務(wù)生效;
mariadb日志一般會(huì)存儲(chǔ)在 /var/lib/mysql
下;
容器的方式部署的mysql,日志數(shù)據(jù)一般會(huì)存在 /var/lib/mysql/data/
下。
5、定期備份數(shù)據(jù)
這里推薦一個(gè)定期備份的腳本:mysql數(shù)據(jù)庫(kù)定時(shí)備份腳本+定時(shí)刪除
建議放在數(shù)據(jù)庫(kù)數(shù)據(jù)存儲(chǔ)目錄下(對(duì)于健忘的人來(lái)說(shuō)比較好找),當(dāng)然也可以自己找一個(gè)隱蔽安全的地方放起來(lái)(如果怕忘記,可以計(jì)一個(gè)筆記),然后設(shè)置定時(shí)任務(wù),定時(shí)全備;
定時(shí)備份,需要寫(xiě)周期性計(jì)劃任務(wù):
#周期性計(jì)劃任務(wù)(每天完備一次)
0 0 */1 * * root /bin/sh 腳本路徑/back.sh
腳本可修改的內(nèi)容:
1、數(shù)據(jù)庫(kù)信息:用戶名、密碼、ip、端口
2、備份的路徑及日志文件名
3、腳本保留的天數(shù)
4、要備份的庫(kù)(注意里面的說(shuō)明,如需備份多個(gè)庫(kù),可以用到數(shù)組,如只備份一個(gè)庫(kù),可直接使用命令備份即可,總之,注意里面的說(shuō)明)
5、備份庫(kù)的文件名和打包備份的文件名 6、日志文件內(nèi)打印的內(nèi)容
日志文件的內(nèi)容展示:
— 創(chuàng)建備份文件: 20230510.sql.tgz
開(kāi)始:2023年05月10日 16:06:15 結(jié)束:2023年05月10日 16:06:20 succ
6、控制訪問(wèn)權(quán)限
說(shuō)明:
username:你將創(chuàng)建的用戶名
host:指定該用戶在哪個(gè)主機(jī)上可以登陸,如果是本地用戶可用localhost,如果想讓該用戶可以從任意遠(yuǎn)程主機(jī)登陸,可以使用通配符%
password:該用戶的登陸密碼,密碼可以為空,如果為空則該用戶可以不需要密碼登陸服務(wù)器
- 限制訪問(wèn)數(shù)據(jù)庫(kù)ip和用戶名
開(kāi)放的ip:
localhost
172.16.11.11
172.16.11.12
172.16.11.13
172.16.11.14
這時(shí)候先不要?jiǎng)h除遠(yuǎn)程登錄,可以先在遠(yuǎn)程連接的第三方工具連接創(chuàng)建普通用戶和指定某一個(gè)ip,因?yàn)閘inux查看用戶列表的時(shí)候視覺(jué)感不是很好,所以等創(chuàng)建完指定ip和用戶名,測(cè)試完之后,在關(guān)閉遠(yuǎn)程登陸和root登陸。提示:切記要互相可以ping通,才可以,否則設(shè)置了要是連不上問(wèn)題還要找好久。
- 使用
navicat
連接到數(shù)據(jù)庫(kù);
#進(jìn)入mysql庫(kù)中
use mysql;
#查看當(dāng)前可以訪問(wèn)到該數(shù)據(jù)庫(kù)的用戶和權(quán)限
select * from user;
可以看到本地和遠(yuǎn)程都可以連接到該數(shù)據(jù)庫(kù),那么下來(lái)我們就給他做限制;
開(kāi)放單用戶及ip測(cè)試
#首先創(chuàng)建一個(gè)庫(kù),(后面要用到這個(gè)庫(kù))
create database cs;
#創(chuàng)建一個(gè)用戶
create user cs@'localhost' identified by '123123';
#給該用戶設(shè)置權(quán)限(只給cs這個(gè)庫(kù)的所有權(quán)限)
grant all privileges on cs.* to 'cs'@'localhost' identified by '123123';
#其實(shí)他兩可合并為一條命令,那就是直接執(zhí)行第二條就行;
#PROCESS權(quán)限,可以執(zhí)行解釋執(zhí)行計(jì)劃操作的權(quán)限(需要額外授予表上的select權(quán)限)。
#授權(quán)PROCESS權(quán)限
grant process on *.* to 'cs'@'localhost';
#刷新權(quán)限
flush privileges;
#查看用戶權(quán)限(只可以用root用戶查看)
#該命令可以在linux上執(zhí)行查看,也可以在其他工具上查看
show grants for 'cs'@'localhost';
#或者(該命令僅限于linux上查看)
select * from mysql.user where user="cs" \G;
- 查看權(quán)限
- 然后看mysql/user表,可以看到多了一個(gè)cs用戶,只可以本地訪問(wèn)數(shù)據(jù)庫(kù),然后測(cè)試登陸;
mysql -ucs -p123123
成功登陸,并且有cs
這個(gè)庫(kù)的所有權(quán)限;
而用第三方登陸,就登陸不上,比如我們用navicat
連接測(cè)試;
很顯然,登陸不上的這是;
批量開(kāi)放用戶及ip測(cè)試
#批量創(chuàng)建用戶
create user cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#給批量用戶設(shè)置權(quán)限(只給cs這個(gè)庫(kù)的所有權(quán)限)
grant all privileges on cs.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14' identified by '123123';
#其實(shí)他兩可合并為一條命令,那就是直接執(zhí)行第二條就行;
#PROCESS權(quán)限,可以執(zhí)行解釋執(zhí)行計(jì)劃操作的權(quán)限(需要額外授予表上的select權(quán)限)。
#授權(quán)PROCESS權(quán)限
grant process on *.* to cs@'172.16.11.11',cs@'172.16.11.12',cs@'172.16.11.13',cs@'172.16.11.14';
#刷新權(quán)限
flush privileges;
#查看用戶權(quán)限(只可以用root用戶查看)
#該命令可以在linux上執(zhí)行查看,也可以在其他工具上查看(此命令只可每次查一個(gè))
show grants for 'cs'@'172.16.11.11';
#或者(該命令僅限于linux上查看,可以查看所有的cs用戶,并輸出所有信息)
select * from mysql.user where user="cs" \G;
- 然后看mysql/user表,可以看到多了一個(gè)好幾個(gè)cs用戶,但是host不一樣,也就是可以訪問(wèn)的ip主機(jī)不一樣,只有上面顯示的這幾個(gè)訪問(wèn)數(shù)據(jù)庫(kù),然后測(cè)試登陸;
也可以使用mysql命令遠(yuǎn)程登陸測(cè)試,如果你在其他服務(wù)器上想訪問(wèn)本地服務(wù)器的數(shù)據(jù)庫(kù),前提是必須可以ping通要訪問(wèn)某臺(tái)數(shù)據(jù)庫(kù)的ip,可以使用:
mysql -h IP -P端口 -u用戶名 -p密碼
例如:
mysql -h 172.16.10.10 -P3306 -uroot -p123123
禁止root用戶遠(yuǎn)程登錄
禁止root用戶遠(yuǎn)程登錄(切記要留一條root使用localhost登陸的,如果沒(méi)有就不要禁用了,因?yàn)榻昧四憔驼娴脑谀亩际褂貌涣藃oot了,就需要重新安裝了)
delete from user where user='root' and host='%';
#刷新權(quán)限
flush privileges;
#可以再次查詢一下是否存在
select * from mysql.user where user="root" \G;
可以看到只剩一個(gè)root@localhost了,那么就成功禁用的root遠(yuǎn)程登陸;
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-725487.html
6.1 附加
刪除用戶
drop user cs@'172.16.11.11';
批量刪除用戶
drop user cs@'172.16.11.12',cs@'172.16.11.13';
修改root密碼:(%為遠(yuǎn)程登陸,localhost為本機(jī)登錄)
alter user 'root'@'localhost' identified by '要修改的密碼';
alter user 'root'@'%' identified by '要修改的密碼';
#刷新權(quán)限
flush privileges;
安裝mariadb時(shí)初始化數(shù)據(jù)庫(kù)
mysql_secure_installation
開(kāi)啟數(shù)據(jù)庫(kù)遠(yuǎn)程連接
grant all privileges on *.* to root@'%' identified by "123123";
#刷新權(quán)限
flush privileges;
7、監(jiān)控和警報(bào)
可以使用zabbix
取關(guān)鍵詞告警或者是Prometheus + Grafana
;
推薦文章:文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-725487.html
- zabbix添加自定義監(jiān)控項(xiàng)&告警(郵件)
- 【Linux】部署Prometheus + Grafana簡(jiǎn)介、監(jiān)控及設(shè)置告警詳細(xì)操作(多種方式安裝,親測(cè)無(wú)問(wèn)題)
本文可參考文獻(xiàn)
文章標(biāo)題 | 文章地址 |
---|---|
【Linux】Centos7 隨機(jī)生成密碼 | http://t.csdn.cn/RnMZf |
mysql數(shù)據(jù)庫(kù)定時(shí)備份腳本+定時(shí)刪除 | https://download.csdn.net/download/liu_chen_yang/87776124?spm=1001.2014.3001.5503 |
docker修改容器的端口、容器名、映射地址… | https://liucy.blog.csdn.net/article/details/124511738 |
zabbix添加自定義監(jiān)控項(xiàng)&告警(郵件) | https://liucy.blog.csdn.net/article/details/124101253 |
【Linux】部署Prometheus + Grafana簡(jiǎn)介、監(jiān)控及設(shè)置告警詳細(xì)操作(多種方式安裝,親測(cè)無(wú)問(wèn)題) | https://liucy.blog.csdn.net/article/details/131049402 |
mysql、mysqldump命令離線包(可直接使用命令) | https://download.csdn.net/download/liu_chen_yang/87769961?spm=1001.2014.3001.5503 |
【Linux】Centos安裝mariadb并授權(quán)遠(yuǎn)程登陸 | https://liucy.blog.csdn.net/article/details/132077172 |
相關(guān)文章:
文章標(biāo)題 | 文章地址 |
---|---|
基于Linux對(duì)MySQL數(shù)據(jù)庫(kù)的安全加固指南(超實(shí)用) | https://liucy.blog.csdn.net/article/details/131936739 |
Centos7安裝Mysql5.7(超詳細(xì)版) | https://liucy.blog.csdn.net/article/details/124930789 |
【Linux】Centos安裝mariadb并授權(quán)遠(yuǎn)程登陸 | https://liucy.blog.csdn.net/article/details/132077172 |
【云原生】Docker之創(chuàng)建并進(jìn)入mysql容器 | https://liucy.blog.csdn.net/article/details/126288434 |
到了這里,關(guān)于基于Linux對(duì)MySQL數(shù)據(jù)庫(kù)的安全加固指南(超實(shí)用--實(shí)戰(zhàn)版)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!