亚洲AVI,黑人巨茎大战欧美白妇,初高中生洗澡自慰高清网站,欧美日韩无砖专区一中文字

重慶分公司,新征程啟航

為企業(yè)提供網(wǎng)站建設、域名注冊、服務器等服務

mysql怎么安全配置 mysql安全策略

如何做好MySQL安全策略

摘至網(wǎng)頁鏈接

讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術(shù)通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:域名與空間、虛擬主機、營銷軟件、網(wǎng)站建設、坡頭網(wǎng)站維護、網(wǎng)站推廣。

常見Mysql配置文件:linux系統(tǒng)下是my.conf,windows環(huán)境下是my.ini;

數(shù)據(jù)庫整體安全需求:機密性、完整性、可用性;

下面以mysql 5.7版本為例,介紹mysql常見的安全策略、配置、加固方式等等,有些策略可能只針對Linux操作系統(tǒng),更多策略可以參考CIS Mysql Benchmark相關(guān)文檔:

1、操作系統(tǒng)級別安全配置

1.1不要將數(shù)據(jù)庫放在系統(tǒng)分區(qū)

Windows系統(tǒng):直接檢查是否將數(shù)據(jù)庫放置在C盤。

Linux系統(tǒng):

在終端連接上mysql數(shù)據(jù)庫,執(zhí)行如下命令:

show variables where variable_name = 'datadir';

然后返回shell命令行:

df -h datadir

其中datadir是上一條命令的返回值。

上述命令的返回值不應是/、/var、/usr

1.2使用專用的最小權(quán)限賬號運行mysql數(shù)據(jù)庫進程

Windows系統(tǒng):直接打開任務管理器,查看運行mysql進程的操作系統(tǒng)賬號,不能為administrator賬號。

Linux系統(tǒng):

Shell命令行運行如下命令:

ps -ef | grep mysql

查看mysql服務的運行賬號是否為root或其他高權(quán)限賬號,如果是的,則需要創(chuàng)建一個非管理員專用賬號來運行mysql服務。

1.3禁止使用mysql命令行歷史記錄

Linux系統(tǒng):

執(zhí)行如下命令:

find / -name ".mysql_history"

查看是否存在mysql的歷史命令記錄文件,如果存在,則需要進行如下加固:

(1)刪除.mysql_history文件;

(2)設置環(huán)境變量MYSQL_HISTFILE為/dev/null,并添加到shell的初始化腳本中,創(chuàng)建mysql_history到/dev/null的鏈接:

ln -s /dev/null $HOME/.mysql_history

1.4?確保MYSQL_PWD環(huán)境變量未設置敏感信息

Windows系統(tǒng)下進入cmd命令行,使用如下命令:

Set

查看是否設置了環(huán)境變量MYSQL_PWD。

Linux系統(tǒng)下使用如下命令:

grep MYSQL_PWD /proc/*/environ

查看MYSQL_PWD環(huán)境變量是否設置了敏感信息。

確認那個配置文件或腳本設置了MYSQL_PWD環(huán)境變量。

2、安裝

2.1使用數(shù)據(jù)庫專用服務器

使用專用的服務器安裝mysql服務可以減少mysql服務的攻擊面,盡量卸載或刪除操作系統(tǒng)上的不必要的應用或服務,減少其他應用的安裝可能給mysql的運行帶來的安全風險。

2.2?不要復用數(shù)據(jù)庫賬號

運行mysql服務的操作系統(tǒng)賬號不要用來運行其他應用或服務,這樣可以避免其他應用或服務器被攻擊給mysql服務帶來影響。

2.3?歷史命令行密碼設置為不可見

使用如下命令:

mysql -u admin -p password

連接mysql數(shù)據(jù)庫服務,退出后查看歷史命令,確認password是否為明文。

建議使用如下命令方式登錄:

(1)先輸入mysql -u admin -p

(2)根據(jù)命令行提示輸入密碼;

而不要在一整條命令中輸入密碼。

另外要控制mysql配置文件訪問權(quán)限。

3、文件權(quán)限控制

3.1?控制數(shù)據(jù)目錄的訪問權(quán)限

數(shù)據(jù)目錄是mysql數(shù)據(jù)庫存放的位置,在mysql命令行界面下執(zhí)行如下命令:

show variables where variable_name = 'datadir';

在終端命令行下執(zhí)行如下命令:

ls -l datadir/.. | egrep "^d[r|w|x]{3}------\s*.\s*mysql\s*mysql\s*\d*.*mysql"

其中datadir是第一條命令的執(zhí)行結(jié)果

如果存在問題,linux環(huán)境下在終端執(zhí)行如下命令進行加固:

chmod 700 datadir

chown mysql:mysql datadir

3.2?控制二進制日志文件的權(quán)限

mysql的運行會產(chǎn)生很多日志,例如二進制日志、錯誤日志、慢查詢?nèi)罩镜鹊?,Mysql命令行下執(zhí)行如下命令:

show variables like 'log_bin_basename';

在終端命令行執(zhí)行如下命令:

ls log_bin_basename.*

對于發(fā)現(xiàn)的每一個文件,執(zhí)行如下命令:

ls -l log_bin_basename.nnnnn | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根據(jù)輸出確認日志文件的權(quán)限設置是否存在問題。

對于每個日志文件,修改其權(quán)限和屬組如下:

chmod 660 log file

chown mysql:mysql log file

3.3?控制錯誤日志文件的權(quán)限

Mysql命令行下執(zhí)行如下命令:

show variables like 'log_error';

在終端命令行執(zhí)行如下命令:

ls log_error.*

對于發(fā)現(xiàn)的每一個文件,執(zhí)行如下命令:

ls -l log_error | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根據(jù)輸出確認日志文件的權(quán)限設置是否存在問題。

對于每個日志文件,修改其權(quán)限和屬組如下:

chmod 660 log file

chown mysql:mysql log file

3.4控制慢查詢?nèi)罩疚募臋?quán)限

Mysql命令行下執(zhí)行如下命令:

show variables like 'slow_query_log_file';

在終端命令行執(zhí)行如下命令:

ls slow_query_log_file.*

對于發(fā)現(xiàn)的每一個文件,執(zhí)行如下命令:

ls -l slow_query_log_file | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根據(jù)輸出確認日志文件的權(quán)限設置是否存在問題。

對于每個日志文件,修改其權(quán)限和屬組如下:

chmod 660 log file

chown mysql:mysql log file

3.5控制通用日志文件的權(quán)限

Mysql命令行下執(zhí)行如下命令:

show variables like 'general_log_file';

在終端命令行執(zhí)行如下命令:

ls general_log_file.*

對于發(fā)現(xiàn)的每一個文件,執(zhí)行如下命令:

ls -l general_log_file | egrep "^-[r|w]{2}-[r|w]{2}----\s*.*$"

根據(jù)輸出確認日志文件的權(quán)限設置是否存在問題。

對于每個日志文件,修改其權(quán)限和屬組如下:

chmod 660 log file

chown mysql:mysql log file

3.6控制審計日志文件的權(quán)限

Mysql命令行下執(zhí)行如下命令:

show global variables where variable_name = ?'audit_log_file';

在終端執(zhí)行如下命令:

ls -l audit_log_file | egrep "^-rw[-x]rw[-x][-r][-w][-x][ \t]*[0-9][ \t]*mysql[

\t]*mysql.*$"

根據(jù)輸出確認日志文件的權(quán)限設置是否存在問題。

對于每個日志文件,修改其權(quán)限和屬組如下:

chmod 660 audit_log_file

chown mysql:mysql audit_log_file

4、通用安全

4.1安裝最新的補丁

在mysql命令行下查詢MySQL的版本:

SHOW VARIABLES WHERE Variable_name LIKE "version";

確認是否由需要安裝的補丁包,如果有請安裝。

4.2?刪除test數(shù)據(jù)庫

Mysql數(shù)據(jù)庫默認安裝好后,存在一個名為test的數(shù)據(jù)庫,如果存在,請執(zhí)行如下命令刪除:

Drop database “test”

4.3?確保讀取本地文件的參數(shù)設置為失效

Mysql命令行下,使用如下命令:

SHOW VARIABLES WHERE Variable_name = 'local_infile';

查看結(jié)果是否為OFF。

如果該命令為ON,則數(shù)據(jù)庫用戶可以通過LOAD DATA INFILE 或者?SELECT local_file?讀取到數(shù)據(jù)庫所在操作系統(tǒng)本地的文件,在這種情況下,需要在mysql配置文件中新增一行:

Local-infile=0;

然后重啟數(shù)據(jù)庫服務。

5、權(quán)限配置

5.1控制可以訪問所有數(shù)據(jù)庫的賬號

Mysql數(shù)據(jù)庫下的user表和db表中存放著可以授予數(shù)據(jù)庫用戶的權(quán)限,確保只有管理員賬號才能訪問所有數(shù)據(jù)庫。可以訪問mysql數(shù)據(jù)庫的用戶或許可以查看密碼哈希值、修改用戶權(quán)限等等。

使用如下sql語句:

SELECT user, host?FROM mysql.user

WHERE (Select_priv = 'Y')?OR (Insert_priv = 'Y')?OR (Update_priv = 'Y')

OR (Delete_priv = 'Y')??OR (Create_priv = 'Y')??OR (Drop_priv = 'Y');

SELECT user, host?FROM mysql.db?WHERE db = 'mysql'

AND ((Select_priv = 'Y')?OR (Insert_priv = 'Y')?OR (Update_priv = 'Y')

OR (Delete_priv = 'Y')?OR (Create_priv = 'Y')?OR (Drop_priv = 'Y'));

確保返回結(jié)果只能是數(shù)據(jù)庫管理員賬號。

5.2限制非管理員用戶的權(quán)限

Mysql.user表中的權(quán)限列有:

file_priv:表示是否允許用戶讀取數(shù)據(jù)庫所在主機的本地文件;

Process:表示是否允許用戶查詢所有用戶的命令執(zhí)行信息;

Super_priv:表示用戶是否有設置全局變量、管理員調(diào)試等高級別權(quán)限;

Shutdown_priv:表示用戶是否可以關(guān)閉數(shù)據(jù)庫;

Create_user_priv:表示用戶是否可以創(chuàng)建或刪除其他用戶;

Grant_priv:表示用戶是否可以修改其他用戶的權(quán)限;

應確保只有數(shù)據(jù)庫管理員才有上述權(quán)限,使用如下sql語句查看擁有各個權(quán)限的數(shù)據(jù)庫賬號:

select user, host from mysql.user where File_priv = 'Y';

select user, host from mysql.user where Process_priv = 'Y';

select user, host from mysql.user where Process_priv = 'Y';

SELECT user, host FROM mysql.user WHERE Shutdown_priv = 'Y';

SELECT user, host FROM mysql.user WHERE Create_user_priv = 'Y';

SELECT user, host FROM mysql.user WHERE Grant_priv = 'Y';

SELECT user, host FROM mysql.db WHERE Grant_priv = 'Y';

確保查詢結(jié)果中不存在非管理員用戶。

如果存在非管理員用戶,使用如下命令進行權(quán)限回收:

REVOKE FILE ON *.* FROM 'user';

REVOKE PROCESS ON *.* FROM 'user';

REVOKE SUPER ON *.* FROM 'user';

REVOKE SHUTDOWN ON *.* FROM 'user';

REVOKE CREATE USER ON *.* FROM 'user';

REVOKE GRANT OPTION ON *.* FROM user;

其中user為上述查詢到的非管理員用戶。

5.3合理控制DML/DDL操作授權(quán)

DML/DDL語句包括創(chuàng)建或修改數(shù)據(jù)庫結(jié)構(gòu)的權(quán)限,例如insert、update、delete、create、drop和alter語句,在任何數(shù)據(jù)庫中都要控制用戶的此類權(quán)限,確保只授權(quán)給有業(yè)務需求的非管理員用戶。Mysql命令行下執(zhí)行如下命令:

SELECT User,Host,Db?FROM mysql.db?WHERE Select_priv='Y'

OR Insert_priv='Y'?OR Update_priv='Y'?OR Delete_priv='Y'?OR Create_priv='Y'

OR Drop_priv='Y'?OR Alter_priv='Y';

上述查詢到的用戶只能對特地的數(shù)據(jù)庫才有相關(guān)的權(quán)限,使用如下命令進行相關(guān)權(quán)限的回收:

REVOKE SELECT ON host.database FROM user;

REVOKE INSERT ON host.database FROM user;

REVOKE UPDATE ON host.database FROM user;

REVOKE DELETE ON host.database FROM user;

REVOKE CREATE ON host.database FROM user;

REVOKE DROP ON host.database FROM user;

REVOKE ALTER ON host.database FROM user;

其中user為查詢到的未授權(quán)的用戶,host為相關(guān)主機,database為相關(guān)數(shù)據(jù)庫。

6、審計和日志

6.1開啟錯誤日志審計功能

錯誤日志包括數(shù)據(jù)庫運行和停止過程中的一系列活動信息,有助于分析數(shù)據(jù)庫運行過程中的一些異?;顒?,一般情況下需要開啟錯誤日志記錄功能,使用如下命令查詢:

SHOW variables LIKE 'log_error';

確保返回結(jié)果為非空,如果為空,需要在mysql數(shù)據(jù)庫配置文件中增加相關(guān)配置。

6.2確保日志存放在非系統(tǒng)區(qū)域

日志文件隨著數(shù)據(jù)庫的運行會不斷增加,如果存放在系統(tǒng)區(qū)域,則會影響系統(tǒng)的正常運行,使用如下命令進行查詢:

SELECT @@global.log_bin_basename;

確保返回結(jié)果不是如下路徑:/、/var、/usr

6.3關(guān)閉原始日志功能

原始日志選項會決定一些敏感信息是否會被明文寫進日志中,例如查詢?nèi)罩?、慢查詢?nèi)罩?、二進制日志,確保數(shù)據(jù)庫配置文件中存在如下配置項:

Log-raw = OFF

7、認證

7.1 Old_passwords環(huán)境變量設置

Old_passwords決定了使用PASSWORD()函數(shù)和IDENTIFIED BY?、CREATE USER?、GRANT?等語句是時的hash算法:

0 - authenticate with the mysql_native_password plugin

1 - authenticate with the mysql_old_password plugin

2 - authenticate with the sha256_password plugin

設置為mysql_old_password代表弱hash算法,可以快速通過密碼字典進行暴力破解。使用如下命令查詢相關(guān)值:

SHOW VARIABLES WHERE Variable_name = 'old_passwords';

確保返回值不為1。

7.2 secure_auth?選項設置

如果客戶端采用Old_passwords發(fā)起連接請求,如果服務器端設置了secure_auth,則客戶端會拒絕連接請求,可以根據(jù)安全需求在配置文件中做相應配置。

7.3?密碼保存

確保密碼沒有明文保存在全局配置文件中。

7.4?確保所有用戶都要求使用非空密碼登錄

執(zhí)行如下語句查詢是否有用戶不需要密碼即可登錄:

SELECT User,host

FROM mysql.user

WHERE (plugin IN('mysql_native_password', 'mysql_old_password')

AND (LENGTH(Password) = 0

OR Password IS NULL))

OR (plugin='sha256_password' AND LENGTH(authentication_string) = 0);

7.5不存在空賬號

使用如下命令查詢是否存在空賬號:

SELECT user,host FROM mysql.user WHERE user = '';

8、網(wǎng)絡設置

如果mysql數(shù)據(jù)庫服務器與應用是跨信任域部署的,則需要考慮在數(shù)據(jù)庫服務器與應用服務器之間建立ssl通道進行數(shù)據(jù)傳輸,不過這種場景一般很少見,在此不詳細描述。

9、數(shù)據(jù)庫備份

安全最重要!MySQL配置主從復制,主主復制

為了保障數(shù)據(jù)的安全與穩(wěn)定性,我們常用數(shù)據(jù)庫的主從復制與主主復制來實現(xiàn)。主從復制為從機實時拷貝一份主機的數(shù)據(jù),當主機有數(shù)據(jù)變化時,從機的數(shù)據(jù)會跟著變,當從機數(shù)據(jù)有變化時,主機數(shù)據(jù)不變;同樣地,主主復制就是,多個主機之間,只要有一個主機的數(shù)據(jù)變化了,其它主機數(shù)據(jù)也會跟著變化。

添加以下內(nèi)容

如果你是使用我之前那種方式啟動的MySQL,那么你只需要去你相關(guān)聯(lián)的宿主機的配置文件夾里面去建立一個 my點吸煙 f 然后寫入上面的類容就好了。

比如:我的啟動命令如下(不應該換行的,這里為了方便查看,我給它分行了)

那么我只需要在 /docker/mysql_master/conf 這個目錄下創(chuàng)建 my點吸煙 f 文件就好了。

這個命令是需要在容器里面執(zhí)行的

docker重啟mysql會關(guān)閉容器,我們需要重啟容器。

確保在主服務器上 skip_networking 選項處于 OFF 關(guān)閉狀態(tài), 這是默認值。 如果是啟用的,則從站無法與主站通信,并且復制失敗。

我的命令如下

在從服務器配置連接到主服務器的相關(guān)信息 (在容器里面的mysql執(zhí)行)

上面代碼的xxxxx你需要換成你的IP,docker 查看容器 IP 的命令如下:

啟動的那個從服務器的線程

測試的話,你可以在主服務器里面,創(chuàng)建一個數(shù)據(jù)庫,發(fā)現(xiàn)從服務器里面也有了,就成功了。

如果你還想要一個從服務器,那么你只需要按照上面配置從服務器再配置一個就行了,新建的從服務器,會自動保存主服務器之前的數(shù)據(jù)。(測試結(jié)果) 如果你上面的主從復制搞定了,那么這個主主復制就很簡單了。我們把上面的從服務器也改成主服務器

1)、修改上面的從服務器的my點吸煙 f文件,和主服務器的一樣(注意這個server-id不能一樣)然后重啟服務器 2)、在從服務器里面創(chuàng)建一個復制用戶創(chuàng)建命令一樣(這里修改一下用戶名可以改為 repl2) 3)、在之前的主服務器里面運行下面這個代碼

上面主要是教你怎么搭建一個MySQL集群,但是這里面還有很多其它的問題。也是我在學習過程中思考的問題,可能有的小伙伴上來看到文章長篇大論的看不下去,只想去實現(xiàn)這樣一直集群功能,所以我就把問題寫在下面了。

1)、MySQL的replication和pxc MySQL的集群方案有replication和pxc兩種,上面是基于replication實現(xiàn)的。

replication: 異步復制,速度快,無法保證數(shù)據(jù)的一致性。 pxc: 同步復制,速度慢,多個集群之間是事務提交的數(shù)據(jù)一致性強。

2)、MySQL的replication數(shù)據(jù)同步的原理 我們在配置的時候開啟了它的二進制日志,每次操作數(shù)據(jù)庫的時候都會更新到這個日志里面去。主從通過同步這個日志來保證數(shù)據(jù)的一致性。

3)、可否不同步全部的數(shù)據(jù) 可以配置,同步哪些數(shù)據(jù)庫,甚至是哪些表。

4)、怎么關(guān)閉和開始同步

5)、我就我的理解畫出了,主從、主從從、主主、復制的圖。

往期推薦:

利用Docker僅花1分鐘時間安裝好MySQL服務

Linux下MySQL 5.7的離線與在線安裝(圖文)

Linux下安裝MySQL8.0(收藏?。?/p>

命令行中輸入mysql密碼提示不安全的解決方法

Mysql版本大于等于5.6的話,直接在命令行中輸入密碼時會提示不安全。提示如下:

Warning: Using a password on the command line interface can be insecure

1:在mysql的配置文件/etc/mysql/my點吸煙 f中加入以下配置

[client]

host=mysql_host

user=mysql_user

password=mysql_password

注:mysql_host,?mysql_user 以及?mysql_password需要替換成自己的mysql的host, user和password

2:重啟mysql服務

service mysql restart:

就可以了。

命令行中執(zhí)行mysql操作時就不用帶用戶名和密碼了。

3:舉例

進入到mysql交互式命令行中。直接輸入 mysql,然后回車即可。如下圖所示。


網(wǎng)頁名稱:mysql怎么安全配置 mysql安全策略
當前鏈接:http://news.spvevtbd.cn/article/ddedhje.html

其他資訊

在線咨詢
服務熱線
服務熱線:028-86922220
TOP