白名单
平凯数据库以插件形式提供了白名单功能,使用该插件,你不需要在自己的业务层开发管理白名单功能,也不需要使用 MySQL 的用户功能逐个添加用户、管理权限,而是可以直接通过配置插件来管控白名单,提高管理效率。
本文档介绍了如何部署及使用白名单插件。
获取插件
请联系平凯数据库销售获取插件安装包。
部署插件
你可以使用 TiDB Operator 或者 TiUP 部署白名单插件。
使用 TiDB Operator 部署插件
配置 TidbCluster CR。
tidb:
additionalContainers:
- command:
- sh
- -c
- touch /var/log/tidb/tidb-whitelist.log; tail -n0 -F /var/log/tidb/tidb-whitelist.log;
image: busybox:1.26.2
imagePullPolicy: IfNotPresent
name: whitelistlog
resources:
limits:
cpu: 100m
memory: 50Mi
requests:
cpu: 20m
memory: 5Mi
terminationMessagePath: /dev/termination-log
terminationMessagePolicy: File
volumeMounts:
- mountPath: /var/log/tidb
name: slowlog
baseImage: <your_private_docker_hub_username>/tidb-ent:v5.4.0
plugins:
- whitelist-1
使用 TiUP 部署插件
在已部署集群上追加插件
在所有目标服务器建立文件夹。
tiup cluster exec cluster_name --command "mkdir {{.DeployDir}}/plugin" -R tidb传输插件到所有目标服务器。
tiup cluster push cluster_name \~/Download/whitelist-1.so {{.DeployDir}}/plugin/whitelist-1.so -R tidb修改集群配置文件。
tiup cluster edit-config cluster_name在每个 TiDB Server 节点下的 config 字段中,配置 plugin.dir 为对应绝对路径,plugin.load 为插件名。
tidb_servers: - host: 172.16.7.213 ssh_port: 22 port: 4000 status_port: 10080 deploy_dir: /tidb-deploy/tidb-4000 log_dir: /tidb-deploy/tidb-4000/log arch: amd64 os: linux config: plugin.dir: /tidb-deploy/tidb-4000/plugin plugin.load: whitelist-1滚动重启所有 TiDB Server 节点。
tiup cluster reload cluster_name -R tidb
安装时部署
安装时部署与在已部署集群上追加插 的操作步骤相似:在部署前的拓扑文件中配置好 plugin.load 和 plugin.dir,在启动集群前执行 tiup cluster exec 和 tiup cluster push。
扩容
按照常规操作正常扩容节点,然后参考 在已部署集群上追加插件 的操作步骤,通过 -N 参数指定刚扩容的节点。
升级集群
删除老插件。
tiup cluster exec cluster_name --command "rm {{.DeployDir}}/plugin/whitelist-1.so" -R tidb传输新插件到所有目标服务器。为了避免修改配置,使用相同名称。
tiup cluster push cluster_name \~/Download/whitelist-1_new.so {{.DeployDir}}/plugin/whitelist-1.so -R tidb升级集群。
tiup cluster upgrade cluster_name version
查看插件状态
使用 MySQL 的 show plugins 命令,可以查看当前插件加载和启用状态信息:
mysql> show plugins;
+-----------+--------------+-------+----------------------------------------------------------+---------+---------+
| Name | Status | Type | Library | License | Version |
+-----------+--------------+-------+----------------------------------------------------------+---------+---------+
| whitelist | Ready-enable | Audit | /data4/tidb5/tidb-deploy/tidb-4604/plugin/whitelist-1.so | | 1 |
+-----------+--------------+-------+----------------------------------------------------------+---------+---------+
1 row in set (0.03 sec)
Name:插件名称。
Status:插件状态。由加载状态 (uninitialized, ready) 和启用状态 (enable, disable) 组成。
Type:插件类型。
Library:插件二进制文件位置。
启用和禁用插件
开启白名单以后,平凯数据库会根据用户 IP 进行过滤,只有属于白名单的 IP 才允许登录。启用或禁用命令在可以在任意一个 TiDB Server 节点执行。执行成功后,会作用于集群中所有 TiDB Server 节点。 如不希望过滤 IP,可以禁用白名单插件。
要禁用和重启用白名单插件,分别执行以下相应的 admin plugins 命令即可:
mysql> admin plugins disable whitelist;
mysql> admin plugins enable whitelist;
你可以使用 MySQL 的 show plugins 命令查看插件的启用状态信息。
使用和验证插件功能
白名单插件启用后,TiDB Server 会从 mysql.whitelist 系统表读取白名单信息。
mysql> show create table mysql.whitelist;
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table | Create Table |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| whitelist | CREATE TABLE `whitelist` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(16) DEFAULT NULL,
`list` text DEFAULT NULL,
PRIMARY KEY (`id`) /*T![clustered_index] CLUSTERED */,
UNIQUE KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin AUTO_INCREMENT=30001 |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)
表中 id 为自增主键,name 为白名单名称,list 为白名单 IP 列表。
其中 list 字段格式为一个字符串,以单个英文逗号 , 为分隔符,连接一串的 IP 网段。IP 网段以 CIDR 格式表示,比如 192.0.2.1/24。具体使用方法,请参考 Go 的 ParseCIDR 函数。
白名单插件一般配合前端 Web 使用。使用方法如下:
添加允许访问的 IP
添加 IP 记录,允许 192.0.2.0 网段和 127.0.0.0 网段的 IP 访问服务器:
mysql> insert into mysql.whitelist (name, list ) values ('accept', '192.0.2.1/24,127.0.0.1/24' ); Query OK, 1 row affected (0.04 sec)修改完成后,需要 reload 重启集群使配置生效,重启过程中集群仍然可用:
tiup cluster reload cluster_name -R tidb从白名单允许访问的 IP 去连接 TiDB Server 时可以正常连接。