账号安全
账号安全
TimechoDB 支持通过密码策略、登录失败锁定、用户连接配额和失效连接剔除等机制保护数据库账号。除特别说明外,相关参数均在 iotdb-system.properties 中配置。
本页介绍的功能自 V2.0.11.1 起提供。用户、角色及权限管理请参见权限管理。
1. 密码策略
1.1 配置参数
| 参数 | 说明 |
|---|---|
enforce_strong_password | 是否启用强密码策略。启用后,密码长度必须为 12~32 个字符,同时包含大写字母、小写字母、数字和特殊字符 !@#$%^&*()_+-=,且不能与用户名相同。 |
password_expiration_days | 密码有效期,单位为天。值大于 0 时,密码超过有效期后将拒绝登录;未过期时,登录过程会提示密码到期时间。 |
password_reuse_interval_days | 历史密码限制周期,单位为天。值大于 0 时,在限制周期内不能重新使用已记录的历史密码。 |
password_stale_warning_days | 密码长期未修改的提醒阈值,单位为天。默认值为 30;值小于等于 0 时禁用提醒。 |
已登录的会话不会仅因密码到期而被立即断开。密码被主动修改时,相关连接的处理方式参见【4.3 删除用户或修改密码】。
1.2 强密码示例
启用 enforce_strong_password 后,弱密码将被拒绝:
CREATE USER user1 'userpw';符合强密码要求的示例:
CREATE USER user1 'User1@Password';1.3 密码到期和历史密码限制
密码超过 password_expiration_days 有效期后,将无法正常登录。已登录的会话不会因为密码过期被踢出。可按照登录提示通过 ALTER USER 修改密码。修改密码时,如果新密码命中 password_reuse_interval_days 限制范围内的历史密码,本次修改将被拒绝。
1.4 交互式输入密码
CLI 启动时可以只提供 -pw 参数而不直接提供密码值。CLI 随后通过交互方式读取密码,并隐藏输入内容:
./sbin/start-cli.sh -u user1 -pw建议使用上述交互方式输入密码,避免密码保存在命令历史中。
2. 登录失败锁定
TimechoDB 使用"用户"和"用户 + 客户端 IP"两级登录失败计数限制连续密码尝试。达到阈值后,账号或对应的账号/IP 组合将被暂时锁定。已创建的连接不受影响。
2.1 配置参数
| 参数 | 默认值 | 说明 |
|---|---|---|
failed_login_attempts | 5 | 同一用户从同一地址连续登录失败的最大次数。-1 表示关闭该限制。启用时必须同时启用 failed_login_attempts_per_user。 |
failed_login_attempts_per_user | 1000 | 同一用户从任意地址累计登录失败的最大次数。-1 表示完全关闭用户级限制;0 会调整为最小值 1;大于等于 1 表示自定义阈值。 |
password_lock_time_minutes | 10 | 达到失败阈值后的锁定时间,单位为分钟。 |
系统支持以下两种锁定方式:
指定 IP 锁定(用户 + IP):同一用户从同一地址连续失败达到
failed_login_attempts后,锁定该用户与地址的组合。用户全局锁定(用户):同一用户从任意地址累计失败达到
failed_login_attempts_per_user后,在全局范围锁定该用户。
root 用户以及三权分立模式下的安全管理员从本机登录时,不受登录失败锁定策略限制。
2.2 解锁账号
锁定时间到期后,系统自动解除锁定。root 用户或三权分立模式下的安全管理员也可以手动解锁。
解除用户的全局锁定:
ALTER USER <USERNAME> ACCOUNT UNLOCK;
eg: ALTER USER user1 ACCOUNT UNLOCK;解除用户在指定 IP 地址上的锁定:
ALTER USER <USERNAME> @ <IP ADDRESS> ACCOUNT UNLOCK;
eg: ALTER USER user1 @ '127.0.0.1' ACCOUNT UNLOCK;3. 用户连接数管理
系统管理员可以为每个用户设置最大和最小并发连接数。达到最大连接数后,系统拒绝该用户的新连接;设置最小连接数后,系统为该用户保留相应数量的连接资源,避免被其他用户占用。
3.1 设置连接数
设置最大并发连接数:
ALTER USER username SET MAX_SESSION_PER_USER n;
eg: ALTER USER user3 SET MAX_SESSION_PER_USER 10;设置最小并发连接数:
ALTER USER username SET MIN_SESSION_PER_USER n;
eg: ALTER USER user3 SET MIN_SESSION_PER_USER 1;将值设置为 -1 可取消对应限制:
ALTER USER user3 SET MAX_SESSION_PER_USER -1;
ALTER USER user3 SET MIN_SESSION_PER_USER -1;3.2 查看连接数配置
使用以下语句查看用户及连接数限制:
LIST USER;结果中的 MaxSessionPerUser 和 MinSessionPerUser 分别表示最大、最小连接数。值为 -1 表示未限制。
+------+--------------+-----------------+-----------------+
|UserId| User|MaxSessionPerUser|MinSessionPerUser|
+------+--------------+-----------------+-----------------+
| 0| root| -1| -1|
| 10000| user3| 10| 1|
+------+--------------+-----------------+-----------------+3.3 注意事项
设置或修改用户连接数后立即生效,无需重启实例。
未设置最大或最小连接数时,对应结果显示为
-1。系统总并发客户端连接数由
dn_rpc_max_concurrent_client_num控制。用户级连接数配置不能突破系统总连接数限制。三权分立模式下,连接数配置权限受管理员身份限制,详见【三权分立】功能。
4. 会话连接管理
出现以下情况时,TimechoDB 可以断开相关连接:会话空闲时间超过限制、黑白名单发生变化、用户被删除或密码被修改。
4.1 空闲连接剔除
通过 idle_session_timeout_in_minutes 可以限制会话允许的最长连续空闲时间。超过阈值后,系统自动断开空闲连接并回收资源。
| 参数 | 数据类型 | 取值范围 | 默认值 | 生效方式 |
|---|---|---|---|---|
idle_session_timeout_in_minutes | Integer | -1,或大于等于 1 的分钟数 | -1 | 重启或热加载 |
取值说明:
-1:禁用空闲会话自动超时。0:自动调整为最小值1。大于等于
1:会话允许的最长连续空闲时间,单位为分钟。
配置文件示例:
idle_session_timeout_in_minutes=10通过 SQL 修改:
SET CONFIGURATION "idle_session_timeout_in_minutes" = "10";4.2 黑白名单更新
热加载黑白名单后,系统将断开不符合最新规则的现有连接。黑白名单的配置方法参见黑白名单。
4.3 删除用户或修改密码
删除用户或修改用户密码后,系统将断开该用户的现有连接。修改密码后,客户端需要使用新密码重新连接;用户被删除后,该用户不能再次建立连接。