MySQL_Help_Link
MySQL安全配置
1 安全策略
1.1 管理意義上的數(shù)據(jù)安全
訪問 MySQL 數(shù)據(jù)庫必須首先訪問數(shù)據(jù)庫的某個權(quán)限、即以某個權(quán)限模式用戶的身份登錄,大部分的安全管理主要通過模式用戶的權(quán)限來實(shí)現(xiàn)。
MySQL 的相關(guān)權(quán)限信息主要存放在 grant tables 的系統(tǒng)表中,即 mysql.User(全局級別權(quán)限) 、 mysql.db (數(shù)據(jù)庫級別權(quán)限)、 mysql.Host(數(shù)據(jù)庫級別權(quán)限) 、mysql.table_priv(表級別權(quán)限) 和、 mysql.column_pr(列級別權(quán)限)表中, MySQL 啟動時裝入內(nèi)存。應(yīng)盡量使用 GRANT 、REVOKE 、CREATE USER 及 DROP USER 來進(jìn)行用戶和權(quán)限的變更操作。如 :GRANT SELECT.UPDATE,DELETE,INSERT,EXECUTE ON test_shop.* TO ‘ test_guest ‘@’localhost’;
查看某用戶權(quán)限,如 SHOW GRANTS FOR ‘test_guest’@’ localhost ‘
1.2 防范故障角度的數(shù)據(jù)安全
數(shù)據(jù)文件是操作系統(tǒng)級的對象,因此一般來講具有相當(dāng)?shù)拇嗳跣?、而且依賴于操作系統(tǒng)的性能特點(diǎn)。由于磁盤介質(zhì)的因素、一個大的數(shù)據(jù)文件上個別數(shù)據(jù)塊的損壞可能導(dǎo)致整個數(shù)據(jù)文件的不可用,這對一個系統(tǒng)來說是災(zāi)難性的,而且大的表空間或數(shù)據(jù)文件的恢復(fù)是困難和耗時的。
巨大對象的分區(qū)在性能角度之外也有安全的因素,當(dāng)磁盤錯誤使一個巨大表中一個單獨(dú)的數(shù)據(jù)塊不能讀寫時可能導(dǎo)致整個表不可用,必須恢復(fù)包含該表的整個表空間。
考慮到數(shù)據(jù)倉庫問題??梢赃M(jìn)行以下操作:
對數(shù)據(jù)量大且不進(jìn)行寫操作的表,使用 myisampack 工具,生成壓縮、只讀 MyISAM 表??梢詨嚎s 40% - 50% 的表文件空間。具體操作如下:
A 壓縮文件: >myisampack ../data/music_shop/ 表名 .MYI
B 重建索引: >myisamchk -rq --sort-index --analyze../data/test_shop/ 表名 .MYI
C 強(qiáng)制 mysqld 使用新表: > mysqladmin flush-tables
如果要進(jìn)行寫操作,可以解壓縮一個壓縮的表,恢復(fù)原有狀態(tài),使用 myisamchk 。 如: myisamchk --unpack ../data/music_shop/ 表名 .MYI
最后,系統(tǒng)上線后,隨著數(shù)據(jù)量的增加,會發(fā)現(xiàn)數(shù)據(jù)目錄下的磁盤空間越來越下,造成安全隱患??梢圆扇煞N措施。一種針對 MyISAM 存儲引擎的表,在建表時分別指定數(shù)據(jù)目錄和索引目錄到不同的磁盤空間,而默認(rèn)會同時放在數(shù)據(jù)目錄下。另外一種針對 InnoDB 存儲引擎的表,因?yàn)閿?shù)據(jù)文件和索引文件在一起的,所以無法將它們分離。當(dāng)磁盤空間不足時,可以增加一個新的數(shù)據(jù)文件,這個文件放在有充足空間的磁盤上。具體請查閱參數(shù)innodb_data_file_path 設(shè)置。
1.3 容災(zāi)與備份機(jī)制
建立主從數(shù)據(jù)庫集群,采用 MySQL 復(fù)制
MySQL 復(fù)制的優(yōu)點(diǎn):
1 如果主服務(wù)器出現(xiàn)問題,可以快速切換到從服務(wù)器;
2 可以在從服務(wù)器上執(zhí)行查詢操作,降低主服務(wù)器的訪問壓力;
3 可以在從服務(wù)器上執(zhí)行備份,以避免備份期間影響主服務(wù)器的;
應(yīng)注意的問題:
由于實(shí)現(xiàn)的是異步的復(fù)制,所以主從服務(wù)器之間存在一定的差距。在從服務(wù)器上進(jìn)行的查詢操作要考慮到這些數(shù)據(jù)的差異,一般只有對實(shí)時性要求不高的數(shù)據(jù)可以通過從服務(wù)器查詢。
定期備份文件與數(shù)據(jù),通過各種方式保存文件與數(shù)據(jù)。
以下是幾點(diǎn)防范的措施:
制定一份數(shù)據(jù)庫備份 / 恢復(fù)計劃,并對計劃進(jìn)行仔細(xì)測試。
啟動數(shù)據(jù)庫服務(wù)器的二進(jìn)制變更日志,該功能的系統(tǒng)開銷很小 ( 約為 1%) ,二進(jìn)制日志包含備份后進(jìn)行的所有更新,我們沒有理由不這樣做。(log-bin=file,file可以不指定)
定期檢查數(shù)據(jù)表,防范于未燃。
定期對備份文件進(jìn)行備份,以防備份文件失效。
把 MySQL 的數(shù)據(jù)目錄和備份文件分別放到兩個不同的驅(qū)動器中,以平衡磁盤 I/O 和增加數(shù)據(jù)的安全。
2 安全隱患
2.1 正確設(shè)置目錄權(quán)限
設(shè)置目錄權(quán)限的原則是軟件和數(shù)據(jù)分開,具體如下:
1. 將 mysql 安裝在單獨(dú)的用戶下
2. 安裝時,以 root 用戶進(jìn)行安裝,mysql 的軟件默認(rèn)都為 root 權(quán)限
3. 安裝完畢后,將數(shù)據(jù)目錄權(quán)限設(shè)置為實(shí)際運(yùn)行 mysql 的用戶權(quán)限,比如:
Chown –R mysql:mysql /home/mysql/data
2.2 盡量避免以 root 權(quán)限運(yùn)行 mysql
將 4.1 的目錄權(quán)限設(shè)置完畢后,啟動、停止 mysql 以及日常的維護(hù)工作都可以在
mysql 用戶下進(jìn)行,沒有必要 su 到 root 后再用—user=mysql 來啟動和關(guān)閉 mysql,
這樣就沒有必要授權(quán)維護(hù)人員 root 權(quán)限,而且最重要的一定是因?yàn)槿魏尉哂?FILE權(quán)限的用戶能夠用 root 創(chuàng)建文件。
2.3 刪除匿名賬號
有些版本的 MySQL 安裝完之后會安裝一個空賬號( User = ‘‘ ),此賬號對 test 數(shù)據(jù)庫有完全權(quán)限,為避免此賬號登陸后,建立大表,占用磁盤空間,影響系統(tǒng)安全,建議刪除
drop user ''@'localhost';
drop user ''@' localhost.localdomain’;
2.4 給 root 賬號設(shè)置口令
建議以一句話的拼音為口令。如 SET PASSWORD=PASSWORD(‘woshiyitiaoyu’)
并且限定只能通過 localhost 訪問。
2.5 只授予賬號必須的權(quán)限
如: Grant select,insert,update,delete on tablename to ‘username’@’hostname’
2.6 除 root 外,任何用戶不應(yīng)有 mysql 庫 user 表的存取權(quán)限
如果擁有 mysql 庫中 user 表的存取權(quán)限(select、update、insert、delete), 就
可以輕易的增加、修改、刪除其他的用戶權(quán)限,造成系統(tǒng)的安全隱患。
如:use mysql;delete from db where user<>‘root’ and db=‘mysql’
2.7 不要把 file 、 process 、或 super 權(quán)限授予管理員以外的賬號
會產(chǎn)生保密信息外泄,查看管理員執(zhí)行的動作,普通用戶執(zhí)行 kill 命令等嚴(yán)重的安全隱患。
FILE 權(quán)限可以被濫用于將服務(wù)器主機(jī)上 MySQL 能讀取的任何文件讀入到數(shù)據(jù)庫表中。包括任何人可讀的文件和服務(wù)器數(shù)據(jù)目錄中的文件??梢允褂?SELECT 訪問數(shù)據(jù)庫表,然后將其內(nèi)容傳輸?shù)娇蛻舳松?。不要向非管理用戶授?FILE 權(quán)限。
有這權(quán)限的任何用戶能在擁有 mysqld 守護(hù)進(jìn)程權(quán)限的文件系統(tǒng)那里寫一個文件!為了更加安全,由 SELECT ... INTO OUTFILE 生成的所有文件對每個人是可寫的,并且你不能覆蓋已經(jīng)存在的文件。
file 權(quán)限也可以被用來讀取任何作為運(yùn)行服務(wù)器的 Unix 用戶可讀取或訪問的文件。使用該權(quán)限,你可以將任何文件讀入數(shù)據(jù)庫表。這可能被濫用,例如,通過使用 LOADDATA 裝載“/etc/passwd”進(jìn)一個數(shù)據(jù)庫表,然后能用 SELECT 顯示它。PROCESS 權(quán)限能被用來察看當(dāng)前執(zhí)行的查詢的明文文本,包括設(shè)定或改變密碼的查詢。
SUPER 權(quán)限能用來終止其它用戶或更改服務(wù)器的操作方式。比如 kill 進(jìn)程不要將 PROCESS 或 SUPER 權(quán)限授給非管理用戶。mysqladmin processlist 的輸出顯示出當(dāng)前執(zhí)行的查詢正文,如果另外的用戶發(fā)出一個 UPDATE user SETpassword=PASSWORD('not_secure')查詢,被允許執(zhí)行那個命令的任何用戶可能看得到
2.8 LOAD DATA LOCAL 帶來的安全問題
由 MySQL 服務(wù)器啟動文件從客戶端向服務(wù)器主機(jī)的傳輸。理論上,打過補(bǔ)丁的服務(wù)器可以告訴客戶端程序傳輸服務(wù)器選擇的文件,而不是客戶用LOAD DATA 語句
指定的文件。這樣服務(wù)器可以訪問客戶端上客戶有讀訪問權(quán)限的任何文件。
在 Web 環(huán)境中,客戶從 Web 服務(wù)器連接,用戶可以使用 LOAD DATA LOCAL 來讀取 Web 服務(wù)器進(jìn)程有讀訪問權(quán)限的任何文件(假定用戶可以運(yùn)行 SQL 服務(wù)器的任何命令)。在這種環(huán)境中,MySQL 服務(wù)器的客戶實(shí)際上是 Web 服務(wù)器,而不是連接 Web 服
務(wù)器的用戶運(yùn)行的程序。
解決方法:
可以用--local-infile=0 選項(xiàng)啟動 mysqld 從服務(wù)器端禁用所有 LOAD DATA
LOCAL 命令。
對于 mysql 命令行客戶端,可以通過指定--local-infile[=1]選項(xiàng)啟用 LOAD
DATA LOCAL,或通過--local-infile=0 選項(xiàng)禁用。類似地,對于 mysqlimport,--local or -L 選項(xiàng)啟用本地數(shù)據(jù)文件裝載。在任何情況下,成功進(jìn)行本地裝載需要服務(wù)器啟用相關(guān)選項(xiàng)。
2.9 使用 MERGE 存儲引擎潛藏的安全漏洞
Merge 表在某些版本中可能存在以下安全漏洞:
用戶 A 賦予表 T 的權(quán)限給用戶 B
用戶 B 創(chuàng)建一個包含 T 的 merge 表,做各種操作
用戶 A 收回對 T 的權(quán)限
安全隱患:用戶 B 通過 merge 表仍然可以訪問表 A 中的數(shù)據(jù)
2.10 盡量避免通過 symlinks 訪問表
不要允許使用表的符號鏈接。(可以用--skip-symbolic-links 選項(xiàng)禁用)。如果 你
用 root 運(yùn)行 mysqld 則特別重要,因?yàn)槿魏螌Ψ?wù)器的數(shù)據(jù)目錄有寫訪問權(quán)限的人
則能夠刪除系統(tǒng)中的任何文件!
2.11 防止 DNS 欺騙
如果你不信任你的 DNS,你應(yīng)該在授權(quán)表中使用 IP 數(shù)字而不是主機(jī)名。在任何情況下,你應(yīng)該非常小心地使用包含通配符的主機(jī)名來創(chuàng)建 授權(quán)表?xiàng)l目!
2.12 DROP TABLE 命令并不收回以前的相關(guān)訪問授權(quán)
drop 表的時候,其他用戶對此表的權(quán)限并沒有被收回,這樣導(dǎo)致重新創(chuàng)建同名的表時,以前其他用戶對此表的權(quán)限會自動賦予,導(dǎo)致權(quán)限外流。
因此,要在刪除表時,同時取消其他用戶在此表上的相應(yīng)權(quán)限。
2.13 REVOKE 命令漏洞
grant all privileges on *.* to guest@localhost; 后
revoke all privileges on *.* from guest@localhost; 不起作用,必須針對每個數(shù)據(jù)單獨(dú)使用 revoke
2.14 如果可能,給所有用戶加上訪問 IP 限制
給所有用戶加上 ip 限制將拒絕所有未知的主機(jī)進(jìn)行的連接,保證只有受信任的主
機(jī)才可以進(jìn)行連接。例如:
Grant select on dbname.* to ‘username’@’ip’ identified by ’passwd’;
2.15 嚴(yán)格控制操作系統(tǒng)帳號和權(quán)限
在數(shù)據(jù)庫服務(wù)器上要嚴(yán)格控制操作系統(tǒng)的帳號和權(quán)限,比如:
鎖定 mysql 用戶
其他任何用戶都采取獨(dú)立的帳號登陸,管理員通過普通用戶管理 mysql;或者通過 root su到 mysql 用戶下進(jìn)行管理。
禁止修改 mysql 用戶下的任何資源
2.16 增加防火墻
購買防火墻。這樣可以保護(hù)你防范各種軟件中至少 50%的各種類型的攻擊。把MySQL放到防火墻后或隔離區(qū)(DMZ)
2.17 嚴(yán)格模式
sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
2.18 限制MYSQL的訪問目錄
--chroot
2.19 防止在連接MYSQL是使用TCP/IP套接字
--skip-networking
2.20 防止連接到MYSQL數(shù)據(jù)庫時使用主機(jī)名
--skip-name-resolve
2.21 防止沒有SHOW DATABASES權(quán)限的用戶使用此命令
--skip-show-database
2.22 如果對user表沒有INSERT權(quán)限,可以防止這些用戶通過GRANT命令創(chuàng)建用戶
--safe-user-create
3 其他安全配置
MySQL 本身帶有一些選項(xiàng),適當(dāng)?shù)氖褂眠@些選項(xiàng)將會使數(shù)據(jù)庫更加安全。
3.1 使用 skip-network
在網(wǎng)絡(luò)上不允許 TCP/IP 連接,所有到數(shù)據(jù)庫的連接必須由命名管道 (Named Pipes) 或共享內(nèi)存(Shared Memory) 或 UNIX 套接字 SOCKET 文件進(jìn)行。這個選項(xiàng)適合應(yīng)用和數(shù)據(jù)庫共用一臺服務(wù)器的情況,其他客戶端將無法通過網(wǎng)絡(luò)遠(yuǎn)程訪問數(shù)據(jù)庫,大大增強(qiáng)了數(shù)據(jù)庫的安全性,但同時也帶來了管理維護(hù)上的不方便。 MySQL 僅能通過命名管道或共享內(nèi)存 ( 在 widows 中 ) 或 Unix 套接字文件 ( 在 Unix 系統(tǒng)中 ) 來和客戶端連接交互。以下為配置實(shí)例:
skip-networking
-S 是 --socket 的簡寫形式,如: -s /tmp/mysql.sock,而其值必須和服務(wù)端設(shè)置的相同
--protocol 是嚴(yán)格指定連接類型,如果一些設(shè)置使用默認(rèn)值時,如windows下服務(wù)器端設(shè)置--socket=mysql(mysql是默認(rèn)值),在連接時指定 --protocol=pipe 后 --socket=mysql 可省略指定。
1. 命名管道
只適合在 Windows 系統(tǒng)下用來連接本機(jī)的 MySQL ,性能可比一般的TCP/IP方式提升30%~50%。
服務(wù)端設(shè)置要求
enable-named-pipe #或 named_pipe=ON
socket=MySQL
客戶端連接
mysql --protocol=pipe --socket=mysql
2. 共享內(nèi)存
4.1版本后,mysql對windows系統(tǒng)還提供了共享內(nèi)存方式的連接
服務(wù)端設(shè)置要求
shared-memory=ON
shared_memory_base_name=MYSQL
客戶端連接
mysql --protocol=memory --shared-memory-base-name=mysql
3. UNIX套接字
linux和unix環(huán)境下,可以使用unix域套接字,來連接同在一臺機(jī)器上的mysql;
服務(wù)端設(shè)置要求
socket=/tmp/mysql.sock
客戶端連接
mysql --protocol=socket --socket=/tmp/mysql.sock
3.2 allow-suspicious-udfs
該選項(xiàng)控制是否可以載入主函數(shù)只有 xxx 符的用戶定義函數(shù)。默認(rèn)情況下,該選項(xiàng)被關(guān)閉,并且只能載入至少有輔助符的 UDF。這樣可以防止從未包含合法 UDF 的共享對象文件載入函數(shù)。
3.3 old-passwords
強(qiáng)制服務(wù)器為新密碼生成短(pre-4.1)密碼哈希。當(dāng)服務(wù)器必須支持舊版本客戶端程序時,為了保證兼容性這很有用。
3.4 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)限。
3.5 secure-auth
不允許鑒定有舊(pre-4.1)密碼的賬戶
3.6 skip-grant-tables
這個選項(xiàng)導(dǎo)致服務(wù)器根本不使用權(quán)限系統(tǒng)。這給每個人以完全訪問所有的數(shù)據(jù)庫的權(quán)力!(通過執(zhí)行 mysqladmin flush-privileges 或 mysqladmin reload 命令,或執(zhí)行 FLUSH PRIVILEGES 語句,你能告訴一個正在運(yùn)行的服務(wù)器再次開始使用授權(quán)表 。 )
3.7 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)限。
3.8 使用 SSL
SSL ( Secure Socket Layer 安全套接字)是一種安全協(xié)議,最初由 Netscape 公司所開發(fā),用以保障在Internet 上數(shù)據(jù)傳輸?shù)陌踩?, 利用數(shù)據(jù)加密技術(shù),可確保數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸過程中不會被截取。
應(yīng)用場景,在主從數(shù)據(jù)庫復(fù)制中使用,提供以下服務(wù)保障。
a) 認(rèn)證用戶和服務(wù)器,確保數(shù)據(jù)發(fā)送到正確的客戶和服務(wù)器。
b) 加密數(shù)據(jù)以防止數(shù)據(jù)中途被竊取。
c) 維護(hù)數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中不被破壞。
在 MySql 中使用 SSL 進(jìn)行安全傳輸,需要在命令行或選項(xiàng)文件中設(shè)置 ‘SSL’ 選項(xiàng)。下面以命令行為例,進(jìn)行安裝介紹。
A. 安裝證書管理工具
a) 所需部件Win32OpenSSL-0_9_8g.exe ,可從網(wǎng)上下載
b) 安裝 雙擊Win32OpenSSL-0_9_8g.exe 按提示進(jìn)行安裝。安裝在C:\OpenSSL 目錄下
c) 在C:\OpenSSL\bin 目錄下創(chuàng)建root ,server ,client 三個子路徑
d) 在創(chuàng)建證書時輸入的用戶名,密碼請妥善保存
B. 創(chuàng)建根證書,并采用自簽名簽署它
a) 創(chuàng)建私鑰 進(jìn)入DOS 窗口,進(jìn)入C:\OpenSSL\bin 路徑,然后輸入openssl genrsa -out root/root-key.pem 1024 命令,按Enter 鍵。
b) 創(chuàng)建證書請求 繼續(xù)輸入openssl req -new -out root/root-req.csr -key root/root-key.pem ,然后按Enter 鍵,要求輸入一系列信息,可根據(jù)實(shí)際情況輸入,但是CommonName :一定要輸入root
c) 自簽署根證書 繼續(xù)輸入openssl x509 -req -in root/root-req.csr -out root/root-cert.pem -signkey root/root-key.pem -days 3650 ,然后按Enter 鍵
d) 查看根證書內(nèi)容 要先進(jìn)入證書所在路徑 例:C:\OpenSSL\bin\root ,然后輸入keytool -printcert -file root-cert.pem,然后按Enter 鍵。
C. 創(chuàng)建服務(wù)器證書,并采用根證書簽署它
a) 創(chuàng)建私鑰 進(jìn)入DOS 窗口,進(jìn)入C:\OpenSSL\bin 路徑,然后輸入openssl genrsa -out server/server-key.pem 1024 命令,按Enter 鍵。
b) 創(chuàng)建證書請求 繼續(xù)輸入openssl req -new -out server/server-req.csr -key server/server-key.pem ,然后按Enter鍵,要求輸入一系列信息,可根據(jù)實(shí)際情況輸入,但是CommonName :一定要輸入localhost 或服務(wù)器的域名(存在域名情況下)。
c) 簽署服務(wù)器證書 繼續(xù)輸入openssl x509 -req -in server/server-req.csr -out server/server-cert.pem -signkey server/server-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650 ,然后按Enter 鍵。
d) 查看服務(wù)器證書內(nèi)容 要先進(jìn)入證書所在路徑 例:C:\OpenSSL\bin\server ,然后輸入keytool -printcert -file server-cert.pem ,然后按Enter 鍵。
D. 創(chuàng)建客戶證書,并采用根證書簽署它
a) 創(chuàng)建私鑰 進(jìn)入DOS 窗口,進(jìn)入C:\OpenSSL\bin 路徑,然后輸入openssl genrsa -out client/client-key.pem 1024 命令,按Enter 鍵。
b) 創(chuàng)建證書請求 繼續(xù)輸入openssl req -new -out client/client-req.csr -key client/client-key.pem ,然后按Enter鍵,要求輸入一系列信息,可根據(jù)實(shí)際情況輸入,CommonName :輸入用戶ID 。
c) 簽署客戶證書 繼續(xù)輸入openssl x509 -req -in client/client-req.csr -out client/client-cert.pem -signkey client/client-key.pem -CA root/root-cert.pem -CAkey root/root-key.pem -CAcreateserial -days 3650 ,然后按Enter 鍵。
d) 查看客戶證書內(nèi)容 要先進(jìn)入證書所在路徑 例:C:\OpenSSL\bin\client ,然后輸入keytool -printcert -file client-cert.pem ,然后按Enter 鍵。
完成以上步驟后,將所生成的證書root 、server 和client 文件夾,拷到C:\mysll 目錄下。 至此,已部署完在啟動服務(wù)器時所用的有關(guān)選項(xiàng)指明證書文件和密鑰文件。在建立加密連接前,要準(zhǔn)備三個文件,一個 CA 證書,是由可信賴第三方出具的證書,用來驗(yàn)證客戶端和服務(wù)器端提供的證書。 CA 證書可向商業(yè)機(jī)構(gòu)購買,也可自行生成。第二個文件是證書文件,用于在連接時向?qū)Ψ阶C明自已身份的文件。第三個文件是密鑰文件,用來對在加密連接上傳輸數(shù)據(jù)的加密和解密。 MySQL 服務(wù)器端的證書文件和密鑰文件必須首先安裝,在 myssl 目錄里的幾個文件:root-cert.pem(CA 證書 ) , server-cert.pem( 服務(wù)器證書 ) , server-key.pem( 服務(wù)器公共密鑰 ) 。
在主數(shù)據(jù)庫創(chuàng)建從數(shù)據(jù)庫操作所用的用戶,并指定必須用SLL 認(rèn)證。
CREATE USER ‘test_guest’@’localhost’ IDENTIFIED BY ‘1234’;
GRANT ALL PRIVILEGES ON music_shop.* TO ‘ test_guest ‘@’10.12.1.42’ REQUIRE ssl;
關(guān)閉主數(shù)據(jù)庫
>mysqladmin -uroot shutdown
重啟服務(wù)器,使配置生效。
>mysqld--ssl-ca=C:\myssl\server\root-cert.pem --ssl-cert=C:\myssl\server\server-cert.pem --ssl-key=C:\myssl\server\server-key.pem
用從數(shù)據(jù)庫客戶程序建立加密連接。
>mysql -u test_guest --ssl-ca=C:\myssl\client\root-cert.pem --ssl-cert=C:\myssl\client\client-cert.pem --ssl-key=C:\myssl\client\client-key.pem
配置完成后,調(diào)用 mysql 程序運(yùn)行 \s 或 SHOW STATUS LIKE ‘SSL%’ 命令,如果看到 SSL: 的信息行就說明是加密連接了。如果把 SSL 相關(guān)的配置寫進(jìn)選項(xiàng)文件,則默認(rèn)是加密連接的。也可用 mysql 程序的 --skip-ssl 選項(xiàng)取消加密連接。
更多信息請查看IT技術(shù)專欄