TiDB部署全攻略——安全加固

本文介绍了如何为TiDB集群开启落盘文件加密、日志脱敏以及详细阐述了TiDB、TiKV、PD和TiFlash的日志脱敏配置。此外,详细讨论了TiDB的密码管理,包括密码复杂度策略、重用策略、连续错误限制和过期策略。最后,讲解了如何通过TiUP开启TLS加密通信以及缩容、扩容PD节点的相关操作。

目录

为 TiDB 落盘文件开启加密

日志脱敏

TiDB 组件日志脱敏

TiKV 组件日志脱敏

PD 组件日志脱敏

TiFlash 组件日志脱敏

TiDB 密码管理

密码复杂度策略

配置密码复杂度策略

开启密码复杂度策略检查

设置不允许密码与当前用户名相同

设置密码复杂度的检查等级

设置密码最小长度

设置密码字符规则

设置密码字典功能

密码重用策略

全局级别密码重用策略

账户级别密码重用策略

密码连续错误限制登录策略

配置密码连续错误限制登录策略

锁定账户解锁

密码过期策略

手动密码过期

自动密码过期

全局级别自动密码过期

账户级别自动密码过期

密码过期策略检查机制

密码过期处理机制

开启加密通信传输

TiUP组件开启TLS加密通信传输(推荐)

缩容PD节点

为集群开启TLS

验证已开启TLS

扩容PD节点

检查集群存在的潜在风险:

自动修复集群存在的潜在风险:

执行 scale-out 命令扩容 TiDB 集群:

开启TLS后的PD DashBoard使用


为 TiDB 落盘文件开启加密

当系统变量 tidb_enable_tmp_storage_on_oom 为 ON 时(默认为ON),如果单条 SQL 语句的内存使用超出系统变量 tidb_mem_quota_query 的限制,某些算子可以将执行时的中间结果作为临时文件落盘保存,直到查询执行完成之后将它们删除。

用户可以开启落盘文件加密功能,防止攻击者通过读取临时文件来访问数据。

  • 修改tidb配置文件
vim /datalist/tidb-deploy/tidb-4000/conf/tidb.toml

添加如下配置([security]段若已存在,不要重复添加):

[security]
spilled-file-encryption-method = "aes128-ctr"

  • spilled-file-encryption-method 的可选值为 aes128-ctr 和 plaintext。默认值为 plaintext,表示不启用加密。

日志脱敏

TiDB 在提供详细的日志信息时,可能会把数据库敏感的数据(例如用户数据)打印出来,造成数据安全方面的风险。因此 TiDB、TiKV、PD 等组件各提供了一个配置项开关,开关打开后,会隐藏日志中包含的用户数据值。

TiDB 组件日志脱敏

  • TiDB 侧的日志脱敏需要将 global.tidb_redact_log 的值设为 1。该变量值默认为 0,即关闭脱敏。
set @@global.tidb_redact_log=1;

  • 设置后,所有新 session 产生的日志都会脱敏:
create table t (a int, unique key (a));
insert into t values (1),(1);

注:set命令设置脱敏后,测试inset插入语句时应新建一个新的窗口或退出mysql客户端重新链接,以便变更新的session。

  • 查看TiDB日志
tail /datalist/tidb-deploy/tidb-4000/log/tidb.log

从以上报错日志可以看到,开启 tidb_redact_log 后,报错信息里的敏感内容被隐藏掉了(目前是用问号替代)。TiDB 日志中会把敏感信息隐藏掉,以此规避数据安全风险。 

TiKV 组件日志脱敏

TiKV 侧的日志脱敏需要将 security.redact-info-log 的值设为 true。该配置项值默认为 false,即关闭脱敏。

  • 修改tikv配置文件
vim /datalist/tidb-deploy/tikv-20160/conf/tikv.toml

添加如下配置([security]段若已存在,不要重复添加):

[security]
redact-info-log = true

PD 组件日志脱敏

PD 侧的日志脱敏需要将 security.redact-info-log 的值设为 true。该配置项值默认为 false,即关闭脱敏。

  • 修改pd配置文件
vim /datalist/tidb-deploy/pd-2379/conf/pd.toml

添加如下配置([security]段若已存在,不要重复添加):

[security]
redact-info-log = true

TiFlash 组件日志脱敏

TiFlash 侧的日志脱敏需要将 tiflash-server 中 security.redact_info_log 配置项的值以及 tiflash-learner 中 security.redact-info-log 配置项的值均设为 true。两配置项默认值均为 false,即关闭脱敏。

  • 修改tiflash-server和tiflash-learner配置文件
vim /datalist/tidb-deploy/tiflash-9000/conf/tiflash.toml
vim /datalist/tidb-deploy/tiflash-9000/conf/tiflash-learner.toml

添加如下配置([security]段若已存在,不要重复添加):

[security]
redact-info-log = true

 

TiDB 密码管理

密码复杂度策略

在 TiDB 中,密码复杂度检查默认未开启。通过配置密码复杂度相关的系统变量,你可以开启密码复杂度检查,并确保为账户设置的密码符合密码复杂度策略。

密码复杂度策略支持以下功能:

  1. 对采用明文方式设置用户密码的 SQL 语句(包括 CREATE USER、ALTER USER、SET PASSWORD ),系统会根据密码复杂度策略检查该密码,如果该密码不符合要求,则拒绝该密码。
  2. 可以使用 SQL 函数 VALIDATE_PASSWORD_STRENGTH() 评估给定密码的强度。
  • 注意
    1. 对于 CREATE USER 语句,即使该账户最初被锁定,也必须提供满足密码复杂度策略的密码,否则将账户解锁后,该账户可以使用不符合密码复杂度策略的密码访问 TiDB。
    2. 对密码复杂度策略的变更不影响已存在的密码,只会对新设置的密码产生影响。
  • 通过以下 SQL 语句,你可以查看所有密码复杂度策略相关的系统变量:
SHOW VARIABLES LIKE 'validate_password.%';

  • 参数解释:
    1. validate_password.check_user_name默认值:ON。当该变量生效且为 ON 时,如果设置账户密码,TiDB 会将密码与当前会话账户的用户名部分(不包含主机名部分)进行比较,如果匹配则拒绝该密码。
    2. validate_password.dictionary默认值:""。默认情况下,该变量为空值,不执行字典检查。要进行字典检查,该变量值必须包含待匹配的单词。配置了该变量后,在设置账户密码时,TiDB 会将长度为 4 到 100 的密码的每个子字符串与该变量中配置的单词进行比较。任何匹配都会导致密码被拒绝。比较不区分大小写。
    3. validate_password.enable默认值:OFF。该变量是密码复杂度策略检查的开关。该变量设置为 ON 后,当设置账户密码时,TiDB 才会进行密码复杂度的各项检查。
    4. validate_password.length该变量是密码复杂度策略检查中的一个检查项,用于限定密码的最小长度,默认最小长度为 8。设置该变量时有最小值要求,最小值由其他几个相关的系统变量控制,即该变量的值不能设置为小于此表达式的值:validate_password.number_count + validate_password.special_char_count + (2 * validate_password.mixed_case_count)。当用户修改 validate_password.number_count、validate_password.special_char_count、validate_password.mixed_case_count 后导致表达式的值大于 validate_password.length 时,validate_password.length 将自动被修改为满足表达式的最小值。
    5. validate_password.mixed_case_count默认值:1。该变量是密码复杂度策略检查中的一个检查项,用于限定密码中至少需要包含多少个大写字符和小写字符。只有当 validate_password.enable 开启且 validate_password.policy 大于或等于 1 (MEDIUM) 时,该变量才生效。
    6. validate_password.number_count默认值:1。该变量是密码复杂度策略检查中的一个检查项,用于限定密码中至少需要包含多少个数字字符。只有当 validate_password.enable 开启且 validate_password.policy 大于或等于 1 (MEDIUM) 时,该变量才生效
    7. validate_password.policy默认值:1。可选值:[0, 1, 2]。该变量是密码复杂度策略检查的强度策略,该变量影响其他密码复杂度系统变量(前缀为 validate_password)在密码检查时是否生效,但是 validate_password.check_user_name 除外。只有 validate_password.enable 开启时,该变量才生效。该变量可以使用数值 0、1、2 或相应的符号值 LOW、MEDIUM、STRONG,密码强度策略对应的检查项如下:
      1. 0 或者 LOW:检查密码长度。
      2. 1 或者 MEDIUM:检
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值