外观
TiDB IP 白名单配置
IP 白名单是 TiDB 数据库的重要安全功能,用于限制哪些 IP 地址可以访问 TiDB 数据库。通过配置 IP 白名单,可以有效防止未授权访问,提高数据库的安全性。
IP 白名单配置
1. 全局 IP 白名单配置
在 TiDB 配置文件中,可以设置全局 IP 白名单:
toml
# tidb.toml
[security]
# 全局 IP 白名单,多个 IP 或 CIDR 用逗号分隔
# 格式:"192.168.1.0/24,10.0.0.1,127.0.0.1"
# 空字符串表示允许所有 IP 访问
ip-whitelist = "127.0.0.1,192.168.1.0/24"2. 基于用户的 IP 白名单配置
TiDB 支持为不同用户设置不同的 IP 白名单:
sql
-- 创建用户并设置 IP 白名单
CREATE USER 'user1'@'%' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 10;
-- 为用户设置 IP 白名单
GRANT ALL PRIVILEGES ON *.* TO 'user1'@'%' REQUIRE IP '192.168.1.0/24,10.0.0.1';
-- 修改用户的 IP 白名单
ALTER USER 'user1'@'%' REQUIRE IP '192.168.1.0/24,10.0.0.1,172.16.0.0/16';
-- 查看用户的 IP 白名单
SHOW GRANTS FOR 'user1'@'%';3. 动态修改 IP 白名单
TiDB 支持在运行时动态修改 IP 白名单,无需重启服务:
sql
-- 动态修改全局 IP 白名单
SET GLOBAL tidb_ip_whitelist = '127.0.0.1,192.168.1.0/24,10.0.0.1';
-- 查看当前全局 IP 白名单
SELECT @@global.tidb_ip_whitelist;IP 白名单格式
TiDB IP 白名单支持以下格式:
1. 单个 IP 地址
192.168.1.1
10.0.0.12. CIDR 格式
192.168.1.0/24
10.0.0.0/8
172.16.0.0/163. 多个地址用逗号分隔
127.0.0.1,192.168.1.0/24,10.0.0.1IP 白名单管理
1. 查看当前 IP 白名单
sql
-- 查看全局 IP 白名单
SELECT @@global.tidb_ip_whitelist;
-- 查看会话 IP 白名单
SELECT @@session.tidb_ip_whitelist;2. 测试 IP 白名单
可以使用以下方法测试 IP 白名单是否生效:
bash
# 从允许的 IP 访问 TiDB
mysql -h <tidb-ip> -P 4000 -u root -p
# 从禁止的 IP 访问 TiDB(应该失败)
mysql -h <tidb-ip> -P 4000 -u root -p3. IP 白名单日志
当 IP 访问被拒绝时,TiDB 会在日志中记录相关信息:
[2023/01/01 12:00:00.000 +08:00] [WARN] [server.go:1234] ["connection denied by ip whitelist"] [ip=10.0.0.2] [whitelist="127.0.0.1,192.168.1.0/24"]IP 白名单最佳实践
1. 遵循最小权限原则
- 只允许必要的 IP 地址访问 TiDB
- 避免使用过于宽泛的 CIDR 范围(如 0.0.0.0/0)
- 定期审查和更新 IP 白名单
2. 区分不同环境
- 生产环境、测试环境和开发环境使用不同的 IP 白名单
- 为不同环境的用户设置不同的 IP 白名单
3. 结合其他安全措施
- IP 白名单应与密码认证结合使用
- 考虑使用 TLS 加密通信
- 启用审计日志,监控访问情况
4. 定期备份 IP 白名单配置
- 定期备份 TiDB 配置文件
- 记录用户 IP 白名单设置
- 建立 IP 白名单变更的审批流程
5. 考虑使用防火墙
- 在 TiDB 服务器前部署防火墙
- 防火墙规则与 IP 白名单配合使用,提供双层保护
常见问题(FAQ)
Q1: IP 白名单不生效怎么办?
A1: 可以从以下几个方面排查:
- 检查 TiDB 配置文件中
ip-whitelist参数是否正确设置 - 检查是否使用了动态设置,全局变量
tidb_ip_whitelist是否正确 - 检查用户级别的 IP 白名单设置
- 查看 TiDB 日志,确认是否有相关错误信息
Q2: 如何允许所有 IP 访问?
A2: 将 IP 白名单设置为空字符串或不设置该参数,即可允许所有 IP 访问:
toml
ip-whitelist = ""或
sql
SET GLOBAL tidb_ip_whitelist = '';Q3: IP 白名单支持 IPv6 吗?
A3: 是的,TiDB IP 白名单支持 IPv6 地址和 CIDR 格式:
::1
2001:db8::/32Q4: 如何批量管理用户 IP 白名单?
A4: 可以使用以下方法批量管理:
- 使用脚本生成 SQL 语句,批量修改用户 IP 白名单
- 使用 TiDB 工具如 TiUP 管理用户和权限
- 定期导出和导入用户权限配置
Q5: IP 白名单会影响性能吗?
A5: IP 白名单检查是轻量级操作,对 TiDB 性能影响很小。但如果设置了非常复杂的 IP 白名单规则,可能会有轻微影响。
Q6: 如何在 TiDB 集群中统一管理 IP 白名单?
A6: 可以通过以下方式统一管理:
- 使用相同的配置文件模板部署所有 TiDB 节点
- 使用 TiUP 管理集群配置,统一更新 IP 白名单
- 定期检查所有 TiDB 节点的 IP 白名单配置,确保一致性
