系統層面配置
伺服器配置
⽤戶和密碼配置
使用者密碼過期時間小於等於90天
配置檔案中設定
[mysqld]
default_password_lifetime=90
重新命名root賬號
use mysql
update user set user="新的使用者名稱" where user="root";
select user,host,password from mysql.user; #檢視結果
控制最高許可權只有管理員
使用如下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'));
確保返回結果只能是資料庫管理員賬號。
合理控制dml/ddl操作授權
dml/ddl語句包括建立或修改資料庫結構的許可權,例如insert、update、delete、create、drop和alter語句,在任何資料庫中都要控制使用者的此類許可權,確保只授權給有業務需求的非管理員使用者。mysql命令列下執行如下命令:
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';
revoke select on .from ;
revoke insert on .from ;
revoke update on .from ;
revoke delete on .from ;
revoke create on .from ;
revoke drop on .from ;
revoke alter on .from ;
其中為查詢到的未授權的使用者,host為相關主機,database為相關資料庫。
許可權說明:
file_priv:表示是否允許使用者讀取資料庫所在主機的本地檔案;
process:表示是否允許使用者查詢所有使用者的命令執行資訊;
super_priv:表示使用者是否有設定全域性變數、管理員除錯等高階別許可權;
shutdown_priv:表示使用者是否可以關閉資料庫;
create_user_priv:表示使用者是否可以建立或刪除其他使用者;
grant_priv:表示使用者是否可以修改其他使用者的許可權;
歷史命令列密碼設定為不可見
(1)先輸入mysql -u admin -p
(2)根據命令列提示輸入密碼;
而不要在一整條命令中輸入密碼。
另外要控制mysql配置檔案訪問許可權
刪除預設test資料庫,測試帳號,空密碼、匿名帳號
bash drop database if exists $;
#刪除冗餘資料庫, 如test
bash drop user ''
#清除無用使用者(沒有使用者名稱的使用者)
select user,host from mysql.user
#使用該命令查詢是否存在空賬號
禁止root遠端登入
use mysql;
# 切換到mysql資料庫(這是mysql自帶的乙個資料庫,裡面存放著一些root的配置資訊);
update user set host = "localhost" where user = "root" and host = "%";
# 修改root使用者的host屬性,確保其為localhost,這表示只能本地訪問(%表示可以遠端訪問);
flush privileges; #重新整理
關閉old_passwords
mysql> show variables like 『%password%』;
+—————+——-+
| variable_name | value |
+—————+——-+
| old_passwords | off | ####這裡表明已經關閉了舊密碼選項
+—————+——-+
1 row in set (0.00 sec)
secure_auth選項設定
如果客戶端採用old_passwords發起連線請求,如果伺服器端設定了secure_auth,則客戶端會拒絕連線請求,可以根據安全需求在配置檔案中做相應配置。
確保所有使用者都要求使用非空密碼登入
行如下語句查詢是否有使用者不需要密碼即可登入:
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);
檔案許可權配置
在mysql中,提供對本地檔案的讀取,使用的是load data local infile命令,預設在5.0版本中,該選項是預設開啟的,該操作令會利用mysql把本地檔案讀到資料庫中,然後使用者就可以非法獲取敏感資訊了,如不需要讀取本地檔案,請關閉。
檢查方法
less /etc/my.cnf
檢查[mysqld]部分是否存在local-infile=0。
或者ps –aux檢視啟動mysql程序是有local-infile=0
審計和日誌
備份與恢復
mysql資料庫安全加固 資料庫安全加固系統
安全是多個環節層層防護 共同配合的結果。也就是說在安全領域不能僅僅依靠某乙個環節完成所有的安全防護措施,對於資料庫安全領域也是一樣。資料庫領域的安全措施通常包括 身份識別和身份驗證 自主訪問控制和強制訪問控制 安全傳輸 系統審計 資料庫儲存加密等。只有通過綜合有關安全的各個環節,才能確保高度安全的系...
MYSQL資料庫攻防與加固
練習環境 dcst 6000 n10 mysql加固 任務內容 1.配置lnux mysql防火牆,允許mysql服務能夠被訪問 執行命令 iptables l rh firewall 1 input 11 p tcp dport 3306 j accept 執行命令 iptables l 發現已經...
Redis快取資料庫安全加固指導(二)
背景 在眾多開源快取技術中,redis無疑是目前功能最為強大,應用最多的快取技術之一,參考2018年國外資料庫技術權威 db engines關於key value資料庫流行度排名,redis暫列第一位,但是原生redis版本在安全方面非常薄弱,很多地方不滿足安全要求,如果暴露在公網上,極易受到惡意攻...