配景
蔚来被敲诈 225 万好意思元,宽绰数据遭表现!
把柄网络高尚传的截图袒露,黑客似乎掌抓着蔚来里面职工数据 22800 条、车主用户身份证数据 399000 条、用户地址数据 6500000 条、注册用户数据 4850000 条、企业及企业代表联系东谈主数据 10000 条、订单数据 490000 条、退单数据 90000 条,出售的金额以 0.1-0.25 比特币不等。
蔚来公司和蔚来首创东谈主李斌也齐出来谈歉,并甘心对因本次事件给用户形成的吃亏承担背负。
数据安全
现时企业齐依然数字化办公了,在进步后果的同期,数据安全亦然重中之重,许多公司为了追求后果,却忽略安全这方面的责任。从上头的申报看,蔚来此次表现的数据包含:用户身份证、地址,这些数据守密级别齐是最高的,在数据库存储也应该要加密存储。
而加密存储就波及以下几个问题:
1、加密存储的花式;
2、加密存储后,数据怎样展示;
3、加密存储怎样空洞搜索。
今天就给世界共享下,MySql数据加密的处分决策、以及怎样处分以上的问题。
Mysql加密决策
Mysql自身自带的加密秩序,分为2种:
1、不成逆加密算法:
PASSWORD,ENCRYPT,MD5,SHA。
2、可逆的加密算法:
AES_ENCRYPT、AES_DECRYPT 和 ENCODE、DECODE。
以上两组分辨为可逆的加解密函数,齐是复返一个二进制字符串,要以BLOB类型存储。不外ENCODE与DECODE,在MySql 5.7后依然取消,何况安全性相比低,提出不要遴荐。
在形貌征战中,比如密码等小数的数据,不波及袒露和搜索的业务需求,不错遴荐不成逆加密,但大部分数据,咱们如故需要遴荐可逆的加密花式。
Mysql 加密存储
底下咱们以AES_ENCRYPT、AES_DECRYPT 为例子,来先容下怎样处分,数据加密存储与查询。
1、创建表
当先先创建一张表,惟有一个字段data,用来存储解密后的数据,sql语句如下:
CREATE TABLE `tab_aes` (`data` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci')COMMENT='数据加密存储表'COLLATE='utf8_general_ci'ENGINE=InnoDB;
2、插入数据
通过Sql语句插入加密的数据,1ql语句如下:
INSERT INTO tab_aes VALUES( TO_BASE64( AES_ENCRYPT('要加密的践诺','秘钥') ) );
TO_BASE64函数把加密的二进制调度为Base64,便捷咱们检察。
插入的戒指如下:
3、查询复返解密数据
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET utf8 ) FROM tab_aes
解密后,要用CAST把字符串编码转为UTF8,不然复返是乱码。
空洞搜索
数据加密存储与解密数据,这些齐莫得太大问题,加密存储产生最大的问题,即是空洞搜索,对于空洞搜索有以下决策:
1、数据预加载至内存数据库
此决策是形势运转的技术,事先把数据库的数据解密,并加载至内存中,比如遴荐MongoDB,此决策存在的优污点如下:
优点:
数据安全,查询性能速率快
污点:
职业器占用内存大;
数据表无法关联查询;
内存数据与数据库要及时保存一致,需要特殊责任量。
2、形势及时加载数据,并解密处理
此决策是,用户触发苦求的技术,形势及时加载并解密,保存至内存,诚然此决策处分了与数据库同步的问题,但也存在其他问题,此决策优污点如下:
优点:
数据安全,查询性能速率快、数据处理天真。
污点:
职业器内存不成控,短暂内存容易飙升,可能导致职业器不潜入;
数据表无法关联查询。
3、在Sql语句处理空洞搜索
要是数据量相比少,以上两种决策可能不会产生太大的影响,但对于大多数形貌以上两种决策如故不靠谱的。
在Sql语句处理空洞搜索,也有以下几种决策:
3.1、及时解密搜索
平直在数据库端,把加密的数据解密。
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) FROM tab_aesWHERECAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) LIKE '要加密%'
优点
搜索天真
污点:
无法运用索引,搜索性能慢;
数据需要先解密,导致性能慢。
3.2、字段冗孑遗储
咱们齐知谈MySql空洞搜索,惟有当匹配发轫、巧合匹配扫尾的技术,索引才会奏效。是以咱们不错彭胀一个字段,用来存储发轫和扫尾加密后的数据。
创建表sql语句如下,新增一个字段data_ext,并配置索引:
CREATE TABLE `tab_aes` (`data` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci',`data_ext` VARCHAR(250) NULL DEFAULT NULL COLLATE 'utf8_general_ci',INDEX `data_ext` (`data_ext`) USING BTREE)COMMENT='数据加密存储表'COLLATE='utf8_general_ci'ENGINE=InnoDB;
比如,要加密的践诺为:123456789,字段data_ext取字段data,发轫和扫尾3个字符存储,储存形势为:AES(123) , AES(789),插入数据的sql语句如下:
INSERT INTO tab_aes VALUES( TO_BASE64( AES_ENCRYPT('要加密的践诺','秘钥')), CONCAT(TO_BASE64( AES_ENCRYPT('要加密','秘钥')), ',', TO_BASE64( AES_ENCRYPT('践诺','秘钥'))));
存储戒指如下:
相应的空洞搜索sql语句如下:
SELECT CAST( AES_DECRYPT( FROM_BASE64(tab_aes.data), '秘钥') AS CHAR CHARACTER SET UTF8 ) FROM tab_aesWHEREtab_aes.data_ext LIKE CONCAT(TO_BASE64(AES_ENCRYPT(('要加密'),'秘钥')),'%')AND tab_aes.data_ext LIKE CONCAT('%',TO_BASE64(AES_ENCRYPT(('践诺'),'秘钥')))AND tab_aes.data_ext LIKE CONCAT(TO_BASE64(AES_ENCRYPT(('要加密'),'秘钥')),'%', TO_BASE64(AES_ENCRYPT('践诺','秘钥')));
通过Explain分析戒指,该查询sql语句索引是奏效的。
此决策优点:
1、搜索性能高;
2、复古表关联搜索。
此决策也有以下污点:
1、匹配字符数是固定,要是业务有变,需要再行更新数据库;
2、数据存储需要特殊责任量;
3、冗尾数据,需要特殊的存储空间。
写在终末
任何一种决策齐有其优点,也有它的局限性,但有一丝的是,数据安全是最迫切的,任何企业切不成只为了业务发展,而忽略安全的迫切性。
- End -
- 垃圾股为何疯相似高潮,主淌若量化往复放开,再好的行情也烂掉了 2024-12-25
- 投资新动力股时的策略与风险 2024-12-25
- 马斯克:商界权术家的政事博弈 2024-12-25
- 尚纬股份涨0.00%,该股筹码平均往还资本为5.04元,近期该股有吸筹放心,但吸筹力度不彊 2024-12-25
- 12月25日立讯转债下降0.08%,转股溢价率63.06% 2024-12-25