面试题答案
一键面试数据加密
- 字段级加密:
- 方法:使用加密函数(如在MySQL 8.0及以上版本支持的
CREATE ENCRYPTED COLUMN
语法)对敏感字段进行加密存储。例如,对于用户密码字段password
,可以采用CREATE TABLE users (id INT, password VARBINARY(255) ENCRYPTED WITH 'aes-256-cbc' STORED AS ('iv' = '1234567890123456', 'key' = 'my_secret_key'));
。 - 对Schema结构影响:会改变字段的数据类型,通常从明文类型(如
VARCHAR
)变为VARBINARY
等二进制类型,因为加密后的数据是以二进制形式存储。 - 对性能影响:加密和解密操作会增加CPU的负载,导致插入、更新和查询操作变慢。插入和更新时需要加密数据,查询时需要先解密数据。
- 方法:使用加密函数(如在MySQL 8.0及以上版本支持的
- 透明数据加密(TDE):
- 方法:MySQL Enterprise Edition支持TDE,它对整个数据库文件进行加密。启用TDE后,数据库文件在磁盘上以加密形式存储,当数据库服务器读取或写入文件时,数据会自动解密或加密。
- 对Schema结构影响:Schema结构本身不受影响,因为加密是在文件层面,对数据库的逻辑结构没有改变。
- 对性能影响:由于文件的加密和解密操作,会带来一定的I/O性能开销,尤其是在大数据量读写时。
权限控制
- 用户权限管理:
- 方法:使用
GRANT
和REVOKE
语句来控制用户对敏感数据的访问权限。例如,只允许特定用户对users
表的非敏感字段有SELECT
权限,而对敏感字段(如password
)没有任何权限:GRANT SELECT (id, username) ON database_name.users TO'specific_user'@'host';
。 - 对Schema结构影响:不影响Schema的物理或逻辑结构,但从安全设计角度,可能需要在创建表和用户时,根据权限规划进行合理安排。
- 对性能影响:权限检查在每次数据库操作时都会进行,会带来轻微的性能开销,但相比加密操作,这种开销通常较小。
- 方法:使用
- 角色权限管理:
- 方法:创建角色并赋予角色特定的权限,然后将用户添加到角色中。例如,创建一个
finance_role
角色,对财务相关表有特定的读写权限,然后将相关财务人员的用户添加到该角色:CREATE ROLE 'finance_role'; GRANT SELECT, INSERT, UPDATE ON finance_table TO 'finance_role'; GRANT 'finance_role' TO 'user1'@'host', 'user2'@'host';
。 - 对Schema结构影响:不影响Schema结构,但在设计Schema时,可以考虑按业务功能(如财务、人事等)对表进行划分,以便更好地进行角色权限管理。
- 对性能影响:与用户权限管理类似,角色权限检查带来的性能开销较小。
- 方法:创建角色并赋予角色特定的权限,然后将用户添加到角色中。例如,创建一个