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

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

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

被折叠的 条评论
为什么被折叠?



