我知道我可以加密数据库的特定字段,但是我对加密数据库的每个字段感兴趣。我要确保没有人可以访问mysql shell,但不能访问解密密钥,则根本无法从数据库中读取任何内容。
我还想确保,如果有人对计算机具有root访问权限,但没有解密密钥,那么他们将无法读取数据。
我应该怎么做?这样做有意义吗?我担心是否有人可以访问mysql数据库,他们不可避免地将有权访问密钥,因此这毫无意义。我想念什么吗?
我知道我可以加密数据库的特定字段,但是我对加密数据库的每个字段感兴趣。我要确保没有人可以访问mysql shell,但不能访问解密密钥,则根本无法从数据库中读取任何内容。
我还想确保,如果有人对计算机具有root访问权限,但没有解密密钥,那么他们将无法读取数据。
我应该怎么做?这样做有意义吗?我担心是否有人可以访问mysql数据库,他们不可避免地将有权访问密钥,因此这毫无意义。我想念什么吗?
Answers:
可以使用最小的字段级AES和DES加密:https : //dev.mysql.com/doc/refman/5.5/en/encryption-functions.html#function_encrypt
没有为每个查询指定键(或没有将其添加到触发器/过程)的任何人都无法读取数据。
例:
插入:
INSERT INTO users (username, password) VALUES ('root', AES_ENCRYPT('somepassword', 'key12346123'));
和SELECT:
SELECT AES_DECRYPT(password, 'key12346123') FROM users WHERE username = 'root';
而且,这需要与数据库的SSL连接。
在较低级别上-您也可以加密文件系统。
MariaDB最近为InnoDB和XtraDB表添加了表级加密。 https://mariadb.com/kb/zh-CN/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL还支持InnoDB的表级加密。 https://dev.mysql.com/doc/refman/5.7/zh-CN/innodb-tablespace-encryption.html