溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL的安全使用方式

發(fā)布時間:2021-07-24 09:32:48 來源:億速云 閱讀:184 作者:chen 欄目:數(shù)據(jù)庫

本篇內(nèi)容介紹了“MySQL的安全使用方式”的有關(guān)知識,在實(shí)際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!

 MySQL 基礎(chǔ)知識

MySQL是一個流行的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDMS),在與PHP結(jié)合應(yīng)用方面,MySQL是最好的關(guān)系型數(shù)據(jù)庫管理系統(tǒng)之一。MySQL使用不當(dāng),常常會引起致命的安全問題。

1、運(yùn)行安全

為了防止攻擊者通過MySQL漏洞越權(quán)獲取更高的權(quán)限,不要使用系統(tǒng)root用戶運(yùn)行MySQL服務(wù)器。mysqld默認(rèn)拒絕使用root運(yùn)行,如果對mysqld服務(wù)需要指定用戶進(jìn)行運(yùn)行,應(yīng)該使用普通非特權(quán)用戶運(yùn)行mysqld,同時為數(shù)據(jù)庫建立獨(dú)立的Linux中的MySQL賬戶,該賬戶只用于管理和運(yùn)行MySQL。

在MySQL配置/etc/my.cnf文件中指定執(zhí)行賬戶。

vim /etc/my.cnf  [mysqld]  user=mysql

這個配置使服務(wù)器用指定的用戶來啟動,無論是手動啟動還是通過mysqld_safe或mysql.server啟動,都能確保使用MySQL的身份。也可以在啟動參數(shù)上進(jìn)行配置,加上user參數(shù)。

/usr/local/mysql/bin/mysqld_safe --user=mysql &

默認(rèn)的MySQL安裝在/usr/local/mysql,對應(yīng)的默認(rèn)數(shù)據(jù)庫文件在/usr/local/mysql/var目錄下,必須保證該目錄不能讓未經(jīng)授權(quán)的用戶訪問后把數(shù)據(jù)庫打包復(fù)制走,所以要限制對該目錄的訪問。mysqld運(yùn)行時,只使用對數(shù)據(jù)庫目錄具有讀或?qū)憴?quán)限的Linux用戶來運(yùn)行。

MySQL主目錄只允許root用戶進(jìn)行訪問。

chown -R root /usr/local/mysql/

數(shù)據(jù)庫目錄只允許MySQL用戶進(jìn)行訪問。

chown -R mysql.mysql /usr/local/mysql/var

2、密碼安全

默認(rèn)安裝的MySQL的root用戶密碼是空密碼,為了安全起見,必須修改為強(qiáng)密碼,即至少8位,由字母、數(shù)字和符號組成的不規(guī)律密碼。使用MySQL自帶的mysqladmin命令修改root密碼。

mysqladmin -u root password "new-password" //使用mysqladmin修改密碼

同時可以使用下面的命令登錄數(shù)據(jù)庫對密碼進(jìn)行修改。

mysql>use mysql  mysql>update user set pas sword=pas sword('new-password') where  user='root';  mysql>flush privileges; // 強(qiáng)制刷新內(nèi)存授權(quán)表,否則使用的還是在內(nèi)存緩沖的口令

3、賬號安全

系統(tǒng)MySQL的默認(rèn)管理員名稱是root,而一般情況下,數(shù)據(jù)庫管理員都沒有進(jìn)行修改,這在一定程度上為系統(tǒng)用戶密碼暴力破解的惡意攻擊行為提供了便利,應(yīng)該修改為復(fù)雜的用戶名,加強(qiáng)賬號的安全,同時不要使用admin或者administrator,因?yàn)樗鼈円苍谝撞陆獾挠脩糇值渲小?/p>

mysql>update user set user="new-root-name" where  user="root";  mysql>flush privileges; // 強(qiáng)制刷新內(nèi)存授權(quán)表,否則使用的還是在內(nèi)存緩沖的口令

需要正確地給用戶分配權(quán)限,不要將全部權(quán)限分配給普通用戶,有選擇性地分配讀寫權(quán)限,如只分配查詢權(quán)限給用戶。

mysql>grant SELECT on db.table to username@'localhost'

不要將with grant option授權(quán)給普通用戶,防止普通用戶將權(quán)限授予他人,造成管理混亂。

表1是常用的權(quán)限及說明。

MySQL的安全使用方式

表1  常用權(quán)限及說明

4、數(shù)據(jù)庫安全

默認(rèn)MySQL安裝初始化后會自動生成空用戶和test庫,進(jìn)行安裝測試,這會對數(shù)據(jù)庫的安全構(gòu)成威脅,有必要全部刪除,最后的狀態(tài)只保留單個root即可。當(dāng)然,以后可以根據(jù)需要增加用戶和數(shù)據(jù)庫。

mysql>show databases;  mysql>drop database test; // 刪除數(shù)據(jù)庫test  use mysql;  delete from db; // 刪除存放數(shù)據(jù)庫的表信息,因?yàn)檫€沒有數(shù)據(jù)庫信息  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; // 強(qiáng)制刷新內(nèi)存授權(quán)表

5、限制非授權(quán)IP訪問

如果是單機(jī)運(yùn)行MySQL,推薦開啟skip-networking,可以徹底關(guān)閉MySQL的TCP/IP連接方式。

# my.ini  skip-networking

如果是固定IP訪問MySQL,可以在配置文件中增加bind-address=IP,前提是關(guān)閉skip-networking。

bind-address=10.10.1.1

6、文件讀取安全

在MySQL中,使用load data local infile命令提供對本地文件的讀取功能。在5.0版本中,該選項(xiàng)是默認(rèn)打開的,該操作會利用MySQL把本地文件讀到數(shù)據(jù)庫中,然后攻擊者就可以非法獲取敏感信息。假如不需要讀取本地文件,應(yīng)將其關(guān)閉。

網(wǎng)絡(luò)上流傳的一些攻擊方法中就有用到load data local infile的,同時它也是很多新發(fā)現(xiàn)的SQL Injection攻擊利用的手段。攻擊者還能通過使用load data local infile裝載“/etc/passwd”進(jìn)一個數(shù)據(jù)庫表,然后用SELECT顯示它,這個操作對服務(wù)器的安全來說是致命的。

可以在my.cnf中添加local-infile=0參數(shù)。

vim /etc/my.cnf  [mysqld]  set-variable=local-infile = 0

或者在MySQL啟動時添加local-infile=0參數(shù)。

/usr/local/mysql/bin/mysqld_safe --user=mysql --local-infile=0 &

7、常用安全選項(xiàng)

下面是一些MySQL自己提供的安全選項(xiàng),在使用MySQL服務(wù)時可以根據(jù)自己的需要進(jìn)行靈活的配置。

--allow-suspicious-udfs

該選項(xiàng)控制是否可以載入主函數(shù)只有xxx符號的用戶定義函數(shù),如xxx_init()、xxx_deinit()、xxx_reset()、xxx_clear()、xxx_add()等函數(shù)。默認(rèn)情況下,該選項(xiàng)關(guān)閉,并且只能載入至少有輔助符的UDF。這樣可以防止從未包含合法UDF的共享對象文件載入函數(shù)。

--local-infile[={0|1}]

如果用--local-infile=0啟動服務(wù)器,則客戶端不能使用LOCAL IN LOAD DATA語句。

--old-passwords

強(qiáng)制服務(wù)器為新密碼生成短(pre-4.1)散列密碼。當(dāng)服務(wù)器必須支持舊版本客戶端程序時,這對于保證兼容性很有作用。

(OBSOLETE) --safe-show-database

在以前版本的MySQL中,該選項(xiàng)使SHOW DATABASES語句只顯示用戶具有部分權(quán)限的數(shù)據(jù)庫名。在MySQL 5.1中,該選項(xiàng)不再作為現(xiàn)在的默認(rèn)行為使用,有一個SHOW DATABASES權(quán)限可以用來控制每個賬戶對數(shù)據(jù)庫名的訪問。

--safe-user-create

如果啟用,用戶不能使用GRANT語句創(chuàng)建新用戶,除非用戶有mysql.user表的INSERT權(quán)限。如果要讓用戶具有授權(quán)權(quán)限來創(chuàng)建新用戶,應(yīng)給用戶授予下面的權(quán)限。

mysql> GRANT INSERT(user) ON mysql.user TO'user_name'@'host_name';

這樣確保用戶不能直接更改權(quán)限列,必須使用GRANT語句給其他用戶授予該權(quán)限。

--secure-auth

不允許鑒定有舊(pre-4.1)密碼的賬戶。

--skip-grant-tables

這個選項(xiàng)導(dǎo)致服務(wù)器根本不使用權(quán)限系統(tǒng),從而使得每個人都有權(quán)完全訪問所有數(shù)據(jù)庫?。ㄍㄟ^執(zhí)行mysqladmin flush-privileges或mysqladmin eload命令,或執(zhí)行FLUSH PRIVILEGES語句,可以告訴一個正在運(yùn)行的服務(wù)器再次開始使用授權(quán)表。)

--skip-name-resolve

主機(jī)名不被解析。所有在授權(quán)表的Host的列值必須是IP號或localhost。

--skip-networking

在網(wǎng)絡(luò)上不允許TCP/IP連接。所有到mysqld的連接必須經(jīng)由Unix套接字進(jìn)行。

--skip-show-database

使用該選項(xiàng),只允許有SHOW DATABASES權(quán)限的用戶執(zhí)行SHOW DATABASES語句,該語句顯示所有數(shù)據(jù)庫名。不使用該選項(xiàng),允許所有用戶執(zhí)行SHOW DATABASES,但只顯示用戶有SHOW DATABASES權(quán)限或部分?jǐn)?shù)據(jù)庫權(quán)限的數(shù)據(jù)庫名。請注意,全局權(quán)限指數(shù)據(jù)庫的權(quán)限。

8、數(shù)據(jù)安全

在生產(chǎn)環(huán)境中,數(shù)據(jù)庫可能會遭遇各種各樣的不測從而導(dǎo)致數(shù)據(jù)丟失,如硬件故障、軟件故障、自然災(zāi)害、惡意攻擊者攻擊、誤操作等都會對數(shù)據(jù)造成損壞或丟失。為了在數(shù)據(jù)丟失之后能夠及時恢復(fù)數(shù)據(jù),需要定期對數(shù)據(jù)進(jìn)行備份。

備份數(shù)據(jù)的策略要根據(jù)不同的業(yè)務(wù)場景進(jìn)行定制,大致有幾個參考數(shù)值,可以根據(jù)這些數(shù)值來定制符合特定環(huán)境中的數(shù)據(jù)備份策略。

(1)能夠容忍丟失多少數(shù)據(jù)。

(2)恢復(fù)數(shù)據(jù)需要多長時間。

(3)需要恢復(fù)哪些數(shù)據(jù)。

根據(jù)業(yè)務(wù)場景的需要來選擇備份方式是完整備份、增量備份還是差異備份。

“MySQL的安全使用方式”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識可以關(guān)注億速云網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI