面试题答案
一键面试常见错误做法
- 授予过多权限:给用户授予远超其实际工作所需的权限,例如给一个只负责查询数据的用户授予了数据库的所有权限,包括创建、修改、删除表等权限。这增加了数据被误操作或恶意篡改的风险。
- 使用通配符授权:在授权语句中过度使用通配符,如
GRANT ALL PRIVILEGES ON *.* TO 'user'@'%';
,这种方式允许该用户从任何主机连接到MySQL服务器并对所有数据库和表执行所有操作,极大地增加了安全漏洞。 - 不及时回收权限:当用户职责发生变化或者离职后,没有及时收回其不再需要的权限,使得其仍然可以访问和操作数据库,存在潜在的安全风险。
- 明文存储密码:在配置文件或脚本中以明文形式存储数据库用户密码,一旦这些文件或脚本泄露,密码就会暴露,导致数据库面临被攻击的危险。
- 使用默认或弱密码:设置数据库用户密码为默认值(如空密码)或非常简单易猜的密码(如123456),使得攻击者可以轻易通过暴力破解等方式获取数据库访问权限。
避免方法
- 最小权限原则:根据用户实际工作需求,精确授予所需的最小权限。例如,只需要查询数据的用户,仅授予
SELECT
权限;如果需要更新特定表的数据,则只授予该表的UPDATE
权限。例如:GRANT SELECT ON database_name.table_name TO 'user'@'host';
- 精确授权:避免使用通配符,尽可能精确指定数据库、表、甚至列的权限。例如:
GRANT SELECT, INSERT ON specific_database.specific_table TO 'user'@'specific_host';
- 定期审查和回收权限:定期检查用户权限,当用户职责变动或离职时,及时收回不必要的权限。可以使用
REVOKE
语句,如REVOKE ALL PRIVILEGES ON *.* FROM 'user'@'host';
- 加密存储密码:使用安全的方式存储数据库用户密码,如在配置文件中使用加密工具对密码进行加密,或者使用支持密码加密存储的配置管理工具。在应用程序中,使用安全的密码哈希算法(如bcrypt、argon2等)对用户输入的密码进行哈希处理后再存储。
- 设置强密码策略:要求数据库用户设置足够复杂的密码,包含大小写字母、数字和特殊字符,并且定期更换密码。同时,在MySQL配置中,可以通过设置密码强度验证插件等方式来强制实施强密码策略。