我知道我可以encryption数据库的特定领域,但我有兴趣encryption数据库的每个领域。 我想确保没有人能够访问一个mysql shell但是没有解密密钥的访问者根本不能从数据库中读取任何东西。
我也想确定,如果有人能够访问本机,但没有解密密钥,他们将无法读取数据。
我应该怎么做? 这样做有意义吗? 我担心,如果有人访问MySQL数据库,他们不可避免地将有权访问密钥,所以这是没有意义的。 我错过了什么吗?
最小的现场级AES和DESencryption可用: 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连接到数据库。
在较低的水平上 – 你也可以encryption文件系统。
MariaDB最近为InnoDB和XtraDB表添加了表级encryption。 https://mariadb.com/kb/en/mariadb/data-at-rest-encryption/#specifying-what-tables-to-encrypt
MySQL还支持InnoDB的表级encryption。 https://dev.mysql.com/doc/refman/5.7/en/innodb-tablespace-encryption.html
首先:您将密钥存储在应用程序中,并在应用程序层处理所有encryption。
下一步:确保MySQL实例和应用程序[server]位于不同的计算机上,这样MySQL服务器上的根目录就不允许攻击者从应用程序源中读取密钥。
这种方法似乎过度。 正确处理敏感数据(密码,信用卡等),但encryption一切是矫枉过正。 (并且在主键的世界中可能会产生反效果)