mysql的安全措施了解下

因?yàn)樽罱l發(fā)mysql數(shù)據(jù)庫(kù)經(jīng)常被某國(guó)的黑客攻擊,恐嚇咱們要拿比特幣來(lái)贖回我的數(shù)據(jù),殊不知就是你交了比特幣,數(shù)據(jù)也拿不回來(lái)。那我們就需要給我的mysql加強(qiáng)點(diǎn)防御,不讓他們輕易攻克我的mysql,從而出現(xiàn)數(shù)據(jù)丟失,對(duì)公司或者咱們?cè)斐蔁o(wú)法挽回的損失圖片。

別人輕易攻克我們的mysql的主要有一下特點(diǎn):

任何機(jī)器ip客戶端都可以訪問(wèn)我們的mysql

root賬戶暴露到外網(wǎng),root權(quán)限大,俗話說(shuō)權(quán)力越大越危險(xiǎn)

數(shù)據(jù)丟失無(wú)法復(fù)原,因?yàn)闆]有開啟binlog

數(shù)據(jù)沒有備份容災(zāi)

下面是我們經(jīng)常用的mysql的安全設(shè)置方案

mysql 配置白名單訪問(wèn)
步驟如下:
登錄mysql

mysql -uroot -p mysql
切換至mysql庫(kù)
use mysql;
查看有白名單權(quán)限的用戶
select Host,User from user;
指定ip有權(quán)限訪問(wèn)mysql
GRANT ALL ON *.* to root@'192.168.1.4' IDENTIFIED BY 'your-root-password';
如果沒有密碼則不用填,

GRANT ALL ON *.* to root@'192.168.1.4' ;
@后面的是指定白名單的ip

MySQL通配符不是用* 而是用 %
允許一個(gè)網(wǎng)段登錄,1個(gè)通配符或多個(gè)通配符,都需要增加WITH GRANT OPTION參數(shù)(如果不增加此參則無(wú)法實(shí)現(xiàn),文檔最后有官方解釋)
GRANT ALL PRIVILEGES ON *.* TO root@'192.168.192.%' IDENTIFIED BY 'root' WITH GRANT OPTION;

GRANT ALL PRIVILEGES ON *.* TO root@'192.168.%.%' IDENTIFIED BY 'root' WITH GRANT OPTION;
刪除白名單用戶權(quán)限:(確定上一步指定的IP可以登陸后去除所有節(jié)點(diǎn)登陸權(quán)限)

如果Host出現(xiàn)%則表示任意節(jié)點(diǎn)都可以登陸,可將%的項(xiàng)去除,實(shí)現(xiàn)僅白名單登錄目的。

DELETE FROM user WHERE User='root' and Host='%';
刪除白名單用戶的權(quán)限
DELETE FROM user WHERE User='username' and Host='host';
刷新
修改權(quán)限之后都要刷新才會(huì)生效

FLUSH PRIVILEGES;
驗(yàn)證

mysql> select host,user from user;
+-----------------+---------------+
| host            | user          |
+-----------------+---------------+
| 192.168.192.%   | root          |
| 192.168.192.134 | root          |
| localhost       | mysql.session |
| localhost       | mysql.sys     |
| localhost       | root          |
+-----------------+---------------+
5 rows in set (0.00 sec)
授權(quán)節(jié)點(diǎn)登錄正常



未授權(quán)節(jié)點(diǎn)登錄異常


然后官網(wǎng)查了下GRANT OPTION參數(shù):

https://dev.mysql.com/doc/refman/5.7/en/privileges-provided.html
GRANT OPTION參數(shù):



“允許用戶將自己的權(quán)限授予其他用戶,兩個(gè)擁有不同權(quán)限且具有GRANT OPTION權(quán)限的用戶可以組合權(quán)限。

除此之外還有處理 root賬號(hào)不要暴露外網(wǎng)訪問(wèn),密碼設(shè)置復(fù)雜點(diǎn),開辟新的用戶,權(quán)限設(shè)置小一點(diǎn),開啟binlog

mysql設(shè)置白名單用戶和指定ip訪問(wèn)設(shè)置到此搞定

mysql開啟binlog






1 登錄mysql查看是否開啟binlog

show variables like 'log_%';











ON: 開啟狀態(tài),OFF:關(guān)閉狀態(tài)

2:修改my.cnf文件

在linux中可以通過(guò)命令查找文件位置

find / -name my.cnf
在[mysqld]后面增加如下配置

server_id=2
log_bin=mysql-bin
binlog_format=ROW
3:重啟服務(wù)并驗(yàn)證

systectl restart mysqld

二、windows系統(tǒng)(mysql-5.7版本)

1:修改mysql的配置文件my.ini

my.ini位于C:\ProgramData\MySQL\MySQL Server 5.7。該文件默認(rèn)不允許修改,需要右鍵取得所有權(quán)之后才能保存修改。

在[mysqld]下添加以下參數(shù)

log-bin=mysql-bin
binlog_format=Row
2:重啟mysql驗(yàn)證

驗(yàn)證如下:



數(shù)據(jù)庫(kù)備份

可以采用linux的腳本,對(duì)mysql半夜12點(diǎn)進(jìn)行數(shù)據(jù)備份

Linux數(shù)據(jù)庫(kù)備份腳本

前提:保存?zhèn)浞菸募姆?wù)器需要安裝mysql,可以執(zhí)行mysqldump命令

腳本編寫(mysql_dump.sh)

腳本內(nèi)容:注意一定要在unix環(huán)境下編寫,如果在windows環(huán)境下重定向后文件名會(huì)出現(xiàn)問(wèn)題。

注意替換mysql安裝的路徑(/usr/local/mysql/bin/mysqldump)和文件保存的路徑(/test/dump/)

這里注意下: 備份時(shí)會(huì)鎖表,盡量避免讀寫高峰期備份

#! /bin/bash
 login_user="root"
 
 login_passwd=""
 
 vDate=`date +%Y%m%d`
 
 backup_dir="/home/data/backups/"$vDate"/"
 
 echo $backup_dir
 
 if [ ! -d $backup_dir ];then
         mkdir -p $backup_dir
 fi
 
 # 將需要備份的數(shù)據(jù)放入
 db_array=("數(shù)據(jù)庫(kù)1名字" "數(shù)據(jù)庫(kù)2名字" "數(shù)據(jù)庫(kù)3名字") #配置要備份的數(shù)據(jù)庫(kù)
 
 for db_name in ${db_array[*]}
 do
     mysqldump -u root -p$login_passwd $db_name > $backup_dir$db_name.sql
 done
 
 # 刪除7天前備份的文件
 find backup_dir -atime +7 -name "*.sql" -exec rm -rf {} \
 
 echo "備份結(jié)束"



執(zhí)行 sh mysql_dump.sh,便可以在/test/dump目錄下發(fā)現(xiàn)備份的數(shù)據(jù)庫(kù)文件了

定時(shí)任務(wù)執(zhí)行
使用linux的crontab命令定時(shí)執(zhí)行備份數(shù)據(jù)的腳本

crontab -e
編輯定時(shí)任務(wù),這里凌晨二點(diǎn)執(zhí)行一次,編輯完保存即可,(夜貓子熬不到半夜兩點(diǎn))

00 02 * * * /bin/sh /test/mysql_dump.sh
定時(shí)任務(wù)的執(zhí)行最小單位為分鐘,詳情代表如下:

*    *    *    *    *
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期幾 (0 - 6) (星期天 為0)
|    |    |    +---------- 月份 (1 - 12)
|    |    +--------------- 一個(gè)月中的第幾天 (1 - 31)
|    +-------------------- 小時(shí) (0 - 23)
+------------------------- 分鐘 (0 - 59)

查看定時(shí)任務(wù)執(zhí)行的日志:

tail -f /var/log/cron
至此linux下的定時(shí)備份MySQL數(shù)據(jù),也完成了

mysql數(shù)據(jù)庫(kù)容災(zāi)實(shí)時(shí)備份主從下期會(huì)補(bǔ)上,敬請(qǐng)期待









作者:老王

歡迎關(guān)注微信公眾號(hào) : IT學(xué)習(xí)道場(chǎng)