Skip to content

TDSQL 身份认证

认证的重要性

身份认证是数据库安全的第一道防线,它确保只有授权用户才能访问数据库资源。强大的身份认证机制可以有效防止未授权访问、数据泄露和恶意攻击。

TDSQL 认证体系

TDSQL 提供了多层次的身份认证体系,包括:

  • 用户认证:验证用户身份的合法性
  • 权限控制:控制用户对数据库资源的访问权限
  • 审计日志:记录用户的所有操作,便于审计和追溯

认证方式

密码认证

密码认证是最基本的认证方式,用户通过输入用户名和密码来验证身份。

配置方式

  • 创建用户CREATE USER 'username'@'host' IDENTIFIED BY 'password';
  • 修改密码ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';
  • 删除用户DROP USER 'username'@'host';

最佳实践

  • 使用强密码:密码长度至少8位,包含大小写字母、数字和特殊字符
  • 定期更换密码:定期更换数据库用户密码
  • 避免共享密码:每个用户使用独立的密码
  • 使用密码管理工具:使用专业的密码管理工具管理数据库密码

密钥认证

密钥认证是一种更安全的认证方式,用户通过密钥对来验证身份,无需输入密码。

配置方式

  1. 生成密钥对:使用 ssh-keygen 命令生成密钥对
  2. 上传公钥:将公钥上传到TDSQL服务器
  3. 配置用户:创建使用密钥认证的用户
  4. 测试连接:使用密钥认证连接数据库

优点

  • 更安全:避免密码泄露风险
  • 更便捷:无需记忆和输入密码
  • 适合自动化:便于脚本和自动化工具使用

LDAP 认证

LDAP(Lightweight Directory Access Protocol)认证是一种集中式认证方式,用户通过企业LDAP服务器进行身份验证。

配置方式

  1. 配置LDAP服务器:确保LDAP服务器正常运行
  2. 配置TDSQL:在TDSQL中配置LDAP认证参数
  3. 创建LDAP用户:创建使用LDAP认证的用户
  4. 测试认证:使用LDAP认证连接数据库

优点

  • 集中管理:所有用户信息集中存储在LDAP服务器
  • 统一认证:企业内所有系统使用同一套认证体系
  • 便于管理:便于用户的添加、删除和修改

Kerberos 认证

Kerberos 是一种网络认证协议,提供强大的身份验证和授权机制。

配置方式

  1. 配置Kerberos服务器:确保Kerberos服务器正常运行
  2. 配置TDSQL:在TDSQL中配置Kerberos认证参数
  3. 创建Kerberos主体:为TDSQL创建Kerberos主体
  4. 测试认证:使用Kerberos认证连接数据库

优点

  • 强大的安全性:使用加密的票据进行认证
  • 单点登录:支持单点登录功能
  • 适合大规模部署:适合企业级大规模部署

多因素认证

多因素认证(MFA)是一种增强的认证方式,要求用户提供两种或更多的认证因素来验证身份。

认证因素

  • 知识因素:用户知道的信息,如密码
  • ** possession因素**:用户拥有的物品,如手机、令牌
  • 生物因素:用户的生物特征,如指纹、面部识别

配置方式

  1. 启用多因素认证:在TDSQL中启用MFA功能
  2. 配置认证因素:配置需要使用的认证因素
  3. 绑定用户设备:将用户账户与认证设备绑定
  4. 测试认证:使用MFA认证连接数据库

优点

  • 更高的安全性:即使一种认证因素泄露,攻击者也无法访问
  • 符合合规要求:满足行业和法规对强认证的要求
  • 减少安全风险:有效防止密码泄露和暴力破解

密码策略

密码复杂度要求

TDSQL 支持配置密码复杂度要求,包括:

  • 密码长度:设置密码的最小和最大长度
  • 字符类型:要求密码包含大小写字母、数字和特殊字符
  • 密码历史:防止重复使用之前的密码
  • 密码过期时间:设置密码的有效期

密码策略配置

配置方式

  • 全局配置:在配置文件中设置全局密码策略
  • 会话级别配置:使用 SET GLOBAL 命令设置密码策略
  • 用户级别配置:为特定用户设置密码策略

示例配置

sql
-- 设置密码最小长度为8位
SET GLOBAL validate_password.length = 8;

-- 设置密码必须包含大写字母
SET GLOBAL validate_password.mixed_case_count = 1;

-- 设置密码必须包含数字
SET GLOBAL validate_password.number_count = 1;

-- 设置密码必须包含特殊字符
SET GLOBAL validate_password.special_char_count = 1;

-- 设置密码过期时间为90天
SET GLOBAL default_password_lifetime = 90;

密码管理

密码重置

  • 管理员重置:管理员可以重置用户密码
  • 自助重置:用户可以通过验证身份自助重置密码
  • 忘记密码:提供忘记密码的恢复机制

密码加密

TDSQL 使用安全的加密算法存储密码,包括:

  • bcrypt:一种强哈希算法,适合密码存储
  • SHA-256:安全哈希算法,用于密码哈希
  • AES-256:高级加密标准,用于敏感数据加密

认证配置

本地认证配置

配置文件设置

在 TDSQL 配置文件中设置本地认证参数:

ini
[mysqld]
# 启用密码验证插件
plugin-load-add=validate_password.so
validate-password=FORCE_PLUS_PERMANENT

# 设置密码策略
validate_password.length=8
validate_password.mixed_case_count=1
validate_password.number_count=1
validate_password.special_char_count=1

# 设置密码过期时间
default_password_lifetime=90

动态配置

使用 SET GLOBAL 命令动态配置认证参数:

sql
-- 启用密码验证插件
INSTALL PLUGIN validate_password SONAME 'validate_password.so';

-- 设置密码策略参数
SET GLOBAL validate_password.policy = 'STRONG';

远程认证配置

LDAP 认证配置

ini
[mysqld]
# 启用LDAP认证插件
plugin-load-add=auth_ldap.so

# 配置LDAP服务器
ldap_host=ldap://ldap.example.com
ldap_port=389
ldap_base_dn=dc=example,dc=com
ldap_bind_dn=cn=admin,dc=example,dc=com
ldap_bind_password=admin_password
ldap_search_attr=uid

Kerberos 认证配置

ini
[mysqld]
# 启用Kerberos认证插件
plugin-load-add=auth_gssapi.so

# 配置Kerberos
krb_server_hostname=tdsql.example.com
krb_realm=EXAMPLE.COM

认证管理

用户管理

创建用户

sql
-- 创建使用密码认证的用户
CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

-- 创建使用LDAP认证的用户
CREATE USER 'username'@'localhost' IDENTIFIED WITH auth_ldap AS 'uid=username,ou=people,dc=example,dc=com';

-- 创建使用Kerberos认证的用户
CREATE USER 'username@EXAMPLE.COM'@'localhost' IDENTIFIED WITH auth_gssapi;

修改用户

sql
-- 修改用户密码
ALTER USER 'username'@'localhost' IDENTIFIED BY 'new_password';

-- 修改用户认证方式
ALTER USER 'username'@'localhost' IDENTIFIED WITH auth_ldap AS 'uid=username,ou=people,dc=example,dc=com';

-- 锁定用户
ALTER USER 'username'@'localhost' ACCOUNT LOCK;

-- 解锁用户
ALTER USER 'username'@'localhost' ACCOUNT UNLOCK;

删除用户

sql
-- 删除用户
DROP USER 'username'@'localhost';

认证日志

启用认证日志

在 TDSQL 配置文件中启用认证日志:

ini
[mysqld]
# 启用认证日志
audit_log=ON
audit_log_format=JSON
audit_log_file=/var/log/tdsql/audit.log
audit_log_policy=ALL

查看认证日志

sql
-- 查看认证日志表
SELECT * FROM mysql.audit_log WHERE event_class='authentication' ORDER BY event_time DESC;

最佳实践

强密码策略

  • 设置复杂密码要求:密码长度至少8位,包含大小写字母、数字和特殊字符
  • 定期更换密码:设置密码过期时间,定期更换密码
  • 禁止密码复用:设置密码历史记录,防止重复使用之前的密码
  • 使用密码管理工具:使用专业的密码管理工具管理数据库密码

最小权限原则

  • 授予最小必要权限:只授予用户完成工作所需的最小权限
  • 定期审查权限:定期审查用户权限,及时回收不必要的权限
  • 使用角色管理:使用角色管理权限,便于权限的统一管理

多因素认证

  • 为管理员启用MFA:为数据库管理员启用多因素认证
  • 为敏感业务用户启用MFA:为访问敏感数据的用户启用多因素认证
  • 定期测试MFA:定期测试多因素认证的有效性

定期审计

  • 启用审计日志:启用认证和操作审计日志
  • 定期审查日志:定期审查认证日志,发现异常登录
  • 设置告警:对异常登录行为设置告警

安全连接

  • 启用SSL/TLS:启用SSL/TLS加密连接,防止密码在网络传输中泄露
  • 强制SSL连接:要求所有用户使用SSL连接数据库
  • 验证证书:配置客户端验证服务器证书

常见问题(FAQ)

Q1: 如何设置强密码策略?

A1: 可以通过以下步骤设置强密码策略:

  1. 启用密码验证插件
  2. 设置密码长度要求
  3. 设置密码复杂度要求
  4. 设置密码过期时间
  5. 设置密码历史记录

Q2: 如何启用多因素认证?

A2: 可以通过以下步骤启用多因素认证:

  1. 在TDSQL中启用MFA功能
  2. 配置认证因素,如手机验证码、令牌等
  3. 将用户账户与认证设备绑定
  4. 测试MFA认证

Q3: 如何防止暴力破解?

A3: 可以通过以下方式防止暴力破解:

  1. 设置强密码策略
  2. 限制登录失败次数
  3. 启用登录延迟
  4. 使用IP白名单
  5. 启用多因素认证

Q4: 如何管理大量用户的认证?

A4: 可以通过以下方式管理大量用户:

  1. 使用LDAP或Kerberos集中认证
  2. 使用角色管理权限
  3. 自动化用户管理
  4. 定期审查用户账户

Q5: 如何审计用户登录行为?

A5: 可以通过以下方式审计用户登录行为:

  1. 启用认证日志
  2. 定期审查认证日志
  3. 设置异常登录告警
  4. 使用SIEM工具分析日志

Q6: 如何处理忘记密码的情况?

A6: 可以通过以下方式处理:

  1. 管理员重置密码
  2. 自助密码重置
  3. 邮箱或手机验证重置
  4. 安全问题验证重置

Q7: 如何安全地存储数据库密码?

A7: 可以通过以下方式安全存储密码:

  1. 使用密码管理工具
  2. 加密存储密码
  3. 限制密码访问权限
  4. 定期更换密码

Q8: 如何迁移认证方式?

A8: 可以通过以下步骤迁移认证方式:

  1. 在测试环境中测试新的认证方式
  2. 为现有用户创建新的认证方式
  3. 逐步迁移用户到新的认证方式
  4. 监控迁移过程中的问题
  5. 完全切换到新的认证方式