溫馨提示×

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

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

MariaDB中如何使用加密特性

發(fā)布時(shí)間:2021-08-11 14:33:20 來(lái)源:億速云 閱讀:138 作者:Leah 欄目:云計(jì)算

MariaDB中如何使用加密特性,很多新手對(duì)此不是很清楚,為了幫助大家解決這個(gè)難題,下面小編將為大家詳細(xì)講解,有這方面需求的人可以來(lái)學(xué)習(xí)下,希望你能有所收獲。

一.MariaDB的加密特性
  • innodb表空間加密

  • innodb日志加密

  • binlog加密

  • aria表加密

  • 臨時(shí)文件加密

加密特性的一些限制:

  1. 元數(shù)據(jù)文件(.frm)目前尚未加密;

  2. 目前只有MariaDB server才能解密,mysqlbinlog工具還不支持解析加密后的binlog文件

  3. xtrabackup工具目前無(wú)法備份/恢復(fù)使用了加密特性的MariaDB實(shí)例。

  4. 慢查詢?nèi)罩竞湾e(cuò)誤日志尚未加密,里面可能會(huì)包含原始數(shù)據(jù)。

二.使用MariaDB加密

為了保護(hù)加密后的數(shù)據(jù),密鑰一般存放在和數(shù)據(jù)文件不同的位置。MariaDB的密鑰管理方式可以根據(jù)不同的保密需求來(lái)開(kāi)發(fā)密鑰管理插件,在默認(rèn)情況下可以使用file_key_management插件,該插件以文件的方式存儲(chǔ)密鑰。
file_key_management插件:
相關(guān)參數(shù):
file_key_management_filename:密鑰文件位置, 比如/etc/my.cnf.d/file_key.txt
file_key_management_filekey:密鑰文件的解密密碼,如果密鑰文件有加密的話則必須提供
file_key_management_encryption_algorithm:加密算法, AES_CBC/AES_CTR

密鑰文件格式:

# MariaDB encryption file key
1;561A4A02DA569D12EE4A468236957432
2;561A4A02DA569D12EE4A468236957444
3;87A6C96D487659137E316A467BEA646787A6C96D487659137E316A467BEA6467

每行密鑰由兩部分組成,第一部分是密鑰id,緊跟分隔符后面的是十六進(jìn)制的密鑰。
每個(gè)表可以單獨(dú)指定一個(gè)密鑰id(1-255)。不過(guò)innodb系統(tǒng)表空間和日志文件固定使用id為1的密鑰來(lái)加密,所以密鑰文件中一定要有id為1的密鑰。如果存在密鑰id為2的密鑰,則會(huì)用來(lái)加密臨時(shí)表和臨時(shí)文件。

這里還可以對(duì)密鑰文件本身進(jìn)行加密來(lái)防止密鑰文件外泄,例如把明文的file_key.txt文件加密成file_key_enc.txt,密碼為file_key_encrypt_key: openssl enc -aes-256-cbc -md sha1 -k file_key_encrypt_key -in file_key.txt -out file_key_enc.txt

innodb加密選項(xiàng):
innodb-encrypt-tables:on/off/force, 是否加密所有innodb表, force表示強(qiáng)制加密所有innodb表
innodb-encrypt-log:on/off, 是否加密innodb日志文件
innodb-encryption-rotate-key-age:秒數(shù),如果獲取到了新密鑰多久更新一次頁(yè)面加密
innodb-encryption-rotation-iop:IOPS,最多允許用多少IOPS來(lái)做頁(yè)面加密更新
innodb-encryption-threads:線程數(shù),用多少個(gè)后臺(tái)線程來(lái)做頁(yè)面加密更新

binlog加密選項(xiàng):
encrypt-binlog:on/off,是否加密binlog

其他加密選項(xiàng):
encrypt_tmp_files:on/off,是否加密臨時(shí)文件
encrypt_tmp_disk_tables:on/off,是否加密aria臨時(shí)表
aria_encrypt_tables:on/off,是否加密aria表(只對(duì)ROW_FORMAT=PAGE)

加密測(cè)試:

在/etc/my.cnf.d/server.conf中添加:
plugin-load-add=file_key_management.so
file_key_management_encryption_algorithm=aes_cbc
file_key_management_filename = /etc/my.cnf.d/file_key_enc.txt
file_key_management_filekey = file_key_encrypt_key

innodb-encrypt-tables
innodb-encrypt-log
innodb-encryption-threads=4

encrypt-binlog
encrypt_tmp_files
encrypt_tmp_disk_tables
aria_encrypt_tables
添加完成后重啟MariaDB服務(wù)。

創(chuàng)建不加密的表:
create table unencrypt_t(id int, name varchar(32)) ENCRYPTED=NO;

創(chuàng)建加密的表,指定密鑰id為3:
create table encrypt_t(id int, name varchar(32)) ENCRYPTED=YES ENCRYPTION_KEY_ID=3;

修改不加密的表為加密:
alter table unencrypt_t ENCRYPTED=YES ENCRYPTION_KEY_ID=3;

修改加密的表為不加密:
alter table unencrypt_t ENCRYPTED=NO;

插入數(shù)據(jù):

insert into unencrypt_t(id, name) values(1, 'one');
insert into encrypt_t(id, name) values(1, 'one');

已加密的數(shù)據(jù)文件對(duì)比未加密的數(shù)據(jù)文件:

binlog加密:

加密開(kāi)啟后的主備同步:
開(kāi)啟加密后,主機(jī)和備機(jī)之間的binlog傳輸是不加密的,由備機(jī)在寫relaylog/binlog/數(shù)據(jù)文件時(shí)進(jìn)行加密。所以主備之間的密鑰可以不同,但id信息必須一致,否則建表語(yǔ)句在備機(jī)上無(wú)法執(zhí)行成功,將會(huì)導(dǎo)致slave SQL線程中止。

加密和壓縮:
數(shù)據(jù)加密和數(shù)據(jù)壓縮可以同時(shí)使用,MariaDB先做數(shù)據(jù)壓縮再做數(shù)據(jù)加密,可以節(jié)約很大的存儲(chǔ)空間。

看完上述內(nèi)容是否對(duì)您有幫助呢?如果還想對(duì)相關(guān)知識(shí)有進(jìn)一步的了解或閱讀更多相關(guān)文章,請(qǐng)關(guān)注億速云行業(yè)資訊頻道,感謝您對(duì)億速云的支持。

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

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

AI