跳到主要内容

用户管理

概述

本文档介绍 PlantPulse 平台的用户账户、安全组和权限管理方法。 用户管理在左侧菜单 System > 用户 (/user/index) 中执行。

用户结构

PlantPulse 的用户管理由三个核心要素组成。

  • 用户(User): 登录平台的个人账户。
  • 安全组(Security Group): 定义用户角色的组。每个用户属于一个安全组。
  • 权限(Permission): 分配给安全组的功能级访问权限。控制对菜单、屏幕和 API 的访问。

三种角色

产品提供的角色只有三种

角色屏幕显示用途
ADMIN系统管理员全部功能。可修改他人密码和管理用户
APIAPI 开发者外部系统集成账户
USER普通用户基本功能
不存在 OPERATOR · ENGINEER · VIEWER

旧文档中提到这些角色名称,但产品中并不存在。用户注册 屏幕的角色选择中也不会出现。MANAGER 同样不存在。

最小权限原则:人员账户应从 USER 开始,仅对需要管理的人员授予 ADMIN

用户属性

属性必需说明
用户 IDO用于登录的唯一标识符(英文、数字,4~20 字符)
用户名O屏幕上显示的名称
密码O登录密码(12~50 字符,参见下方 密码策略
电子邮件-接收通知的电子邮件地址
角色OADMIN / API / USER 之一
状态O活跃(Active)或停用(Inactive)
描述-关于用户的备注
创建日期自动账户创建时间
最后登录自动最后一次登录时间

用户列表查询

选择左侧菜单 System > 用户 可查看已注册的用户列表。

  • URL: /user/index
  • 可查看用户 ID、名称、安全组、状态和最后登录时间。
  • 使用搜索过滤器可快速找到特定用户。

说明: 只有属于 ADMIN 安全组的用户才能查看用户列表。

添加用户

  1. 在用户列表屏幕上点击 添加 按钮。
  2. 输入必需项。
    • 用户 ID: 由英文和数字组成的唯一 ID(4~20 字符)
    • 用户名: 屏幕上显示的名称
    • 密码: 12~50 字符,必须包含英文大写字母、小写字母、数字和特殊字符中的至少 3 种。不符合则保存被拒绝。
    • 角色: 选择 ADMIN / API / USER 之一。
  3. 根据需要输入可选项(电子邮件、描述等)。
  4. 点击 保存 按钮。

注意: 用户 ID 创建后无法更改。请谨慎设置。

修改用户

  1. 在用户列表中点击要修改的用户。
  2. 修改可编辑的项(名称、电子邮件、安全组、状态、描述等)。
  3. 点击 保存 按钮。

说明: 用户 ID 无法修改。要更改 ID,必须删除现有用户并重新创建。

删除用户

  1. 在用户列表中选择要删除的用户。
  2. 点击 删除 按钮。
  3. 在确认弹窗中点击 确认

警告: 删除的用户无法恢复。要临时禁用用户,建议使用 停用 而不是删除。

停用用户

要在不删除用户账户的情况下禁止登录,请使用停用功能。

  1. 在用户编辑屏幕中将 状态 改为 Inactive
  2. 点击 保存 按钮。

停用的用户无法登录,但数据(审计日志、配置历史等)保持不变。要重新激活,请将状态改为 Active


密码管理

密码在一个位置更改 — 左侧菜单 System > 用户 列表。

密码变更(更换初始密码)

这是安装后更换初始密码的方法。

  1. 打开左侧菜单 System > 用户
  2. 点击目标用户行的 🔑 钥匙图标(提示:"密码变更")。
  3. 输入新密码。如果是本人账户则必须同时 输入当前密码。
  4. 保存。

谁可以更改谁的密码有明确的规则。

对象必需权限验证当前密码
本人无(仅需登录)必需 — 错误将被拒绝
其他用户ADMIN不必需

ADMIN 的用户试图更改他人密码将被拒绝,并在服务器日志中留下审计记录。 成功的更改也被记录为 Password changed: session_user=[...], target_user=[...] 形式。

也可以通过 REST API 执行相同操作。

POST /api/v5/user/{user_id}/password
Content-Type: application/json

{ "current_password": "<current-password>", "password": "<new-password>" }

密码遗失处理

  • 向管理员请求: ADMIN 用户通过上述程序为你重置。
  • 直接重置数据库(紧急): 仅在 ADMIN 账户也被锁定时使用。
用 SHA-256 会导致账户永久锁定

密码以 BCrypt 哈希的形式存储。旧文档中提到的 encode(digest(..., 'sha256'), 'hex') 方式会导致登录时 BCrypt 验证无法 解析该字符串,导致使用任何密码都无法登录。恰好这个步骤在已锁定的情况下使用,因此没有恢复手段。

表名也不是 pp_user,而是 USER_LOGIN

先生成 BCrypt 哈希,然后插入该值。

# BCrypt 해시 생성 (htpasswd — apache2-utils / httpd-tools 패키지)
htpasswd -bnBC 10 "" '<new-password>' | tr -d ':\n'
# → $2y$10$... 형태의 문자열이 나옵니다
-- 비상 시에만. 위에서 만든 BCrypt 해시를 그대로 넣습니다.
UPDATE USER_LOGIN
SET PASSWORD = '<$2y$10$... paste-here>'
WHERE USER_ID = 'admin';

插入后必须立即用登录验证,成功后再通过正常途径在屏幕上更改一次。 基础设施服务账户(PostgreSQL、Cassandra、MinIO 等)的密码不按本文档操作, 而要按 密码变更(凭证轮换) 进行 — 顺序错误将导致平台无法启动。

密码策略

产品强制执行 — 违反以下规则保存将被拒绝。

项目
长度12 字符以上 50 字符以下
复杂度英文大写字母、小写字母、数字、特殊字符 4 种中的至少 3 种

产品不强制执行 — 应通过运营规程管理。以下项目平台 没有功能,需要的话请通过组织程序处理。

项目状态
强制变更周期、过期
禁止重用旧密码
字典词汇阻止
账户永久锁定无 — 但有以下临时阻止

暴力破解防护(临时阻止)

登录失败累积不会锁定账户,而是在一段时间内阻止请求 (HTTP 429 + Retry-After)。时间过后会自动解除,无需管理员操作。

设置属性默认值
启用功能engine.session.bruteforce.enabled启用
每 IP 允许失败次数engine.session.bruteforce.ip_limit30 次
每账户允许失败次数engine.session.bruteforce.user_limit10 次
聚合时间窗口engine.session.bruteforce.window.seconds300 秒(5 分钟)

阻止按 IP 维度和账户维度分别 独立计数。如在办公室中多人共享同一公网 IP, 其他人的失败也会共同填充 IP 限额(30 次)。 阻止和失败都记录在审计日志(LOGIN_BLOCKED / LOGIN_FAILURE)中。


安全组管理

默认安全组

PlantPulse 提供三个默认安全组。

安全组说明主要权限
ADMIN系统管理员全部功能访问(用户管理、系统设置、所有菜单)
OPERATOR运营人员运营相关功能访问(监控、报警管理、数据查询)
USER普通用户基本功能访问(仪表板查看、数据查询)

添加安全组

除默认组外,可添加符合组织角色的安全组。

  1. 选择 安全管理 > 安全组 菜单。
  2. 点击 添加 按钮。
  3. 输入组 ID、组名称和描述。
  4. 点击 保存 按钮。

权限设置

为安全组设置菜单和功能级权限。

  1. 安全管理 > 安全组 菜单中选择组。
  2. 点击 权限设置 选项卡。
  3. 为每个菜单/功能勾选 读取写入删除 权限。
  4. 点击 保存 按钮。

权限设置示例:

菜单ADMINOPERATORUSER
连接管理读取/写入/删除读取/写入读取
工厂管理读取/写入/删除读取/写入读取
报警管理读取/写入/删除读取/写入读取
用户管理读取/写入/删除--
系统设置读取/写入/删除读取-
画布读取/写入/删除读取/写入读取

访问控制

站点访问控制

在多站点环境中,可限制每个用户可访问的站点。

  1. 在用户编辑屏幕中选择 站点访问权限 选项卡。
  2. 勾选允许访问的站点。
  3. 点击 保存 按钮。

说明: 未设置站点访问权限的用户可访问所有站点。

画布共享

画布屏幕可与特定用户或安全组共享。

  1. 在画布编辑屏幕中点击 共享设置
  2. 选择共享对象。
    • 完全公开: 所有用户可访问。
    • 安全组: 仅选定安全组的用户可访问。
    • 指定用户: 仅选定用户可访问。
  3. 点击 保存 按钮。

会话管理

会话超时

用户会话超时的默认设置为 30 分钟。30 分钟内无活动将自动登出。

要修改会话超时,请在 web.xml 中更改设置。

<!-- WEB-INF/web.xml inside the webapp (bundled in the WAR — reset on deploy, so change it in the source) -->
<session-config>
<session-timeout>30</session-timeout> <!-- in minutes -->
</session-config>

并发登录

默认情况下,同一账户可从多个浏览器/设备并发登录。在安全要求高的环境中,建议为用户分别发放账户,并通过网络级控制(如限制访问 IP)进行补充。


审计日志

用户的主要活动会自动记录在审计日志中。通过审计日志可追踪系统变更历史。

记录的活动:

活动类型说明
登录/登出用户认证事件
用户管理用户创建、修改、删除、停用
安全组变更组创建、修改、删除、权限变更
系统设置变更属性、连接信息等设置变更
数据修改工厂、设备、数据点等主数据变更

审计日志可从 工具 > 审计日志 菜单查看,支持按时间段、用户、活动类型过滤。


批量用户注册

可使用 Excel 文件批量注册多个用户。

注册步骤

  1. 安全管理 > 用户管理 菜单中点击 Excel 上传 按钮。
  2. 下载模板 Excel 文件。
  3. 按模板格式填入用户信息。
必需说明示例
user_idO用户 IDoperator01
user_nameO用户名홍길동
passwordO初始密码Temp1234!
email-电子邮件hong@example.com
security_groupO安全组 IDOPERATOR
description-描述생산1팀
  1. 上传已填写的 Excel 文件。
  2. 在预览中确认待注册的用户信息。
  3. 点击 注册 按钮。

说明: 上传时将执行有效性检查。如有重复 ID、必需项缺失等错误,该行将被标记,修正后可重新上传。


最佳实践

  • 最小权限原则: 只给用户分配工作所需的最低权限。
  • 最小化管理员账户: 保持 ADMIN 组用户数最少,常规运维使用 OPERATOR 组。
  • 定期审计: 每季度审查用户列表和权限,停用不必要的账户。
  • 离职处理: 离职时立即停用或删除账户。
  • 禁止共享账户: 使用个人账户,避免使用共享账户。
  • 密码管理: 确保更改初始密码,推动定期更换密码。
  • 日志监控: 监控异常登录尝试(重复失败、非正常时间访问等)。

常见问题

登录失败

症状原因解决方案
"用户 ID 或密码错误"密码输入错误检查密码并重试。也检查 Caps Lock 状态。
"账户已停用"账户处于 Inactive 状态向管理员申请激活账户。
"账户已锁定"连续登录失败导致锁定向管理员申请解除锁定。
登录屏幕未显示Web 服务器未运行或网络问题检查服务器状态和网络连接。

权限不足

症状原因解决方案
菜单不可见安全组无该菜单的访问权限向管理员申请添加权限。
"无访问权限" 提示API 或功能权限不足检查安全组的权限设置。
特定站点数据未显示站点访问权限未设置检查用户的站点访问权限。

会话过期

症状原因解决方案
工作中跳转至登录屏幕会话超时(默认 30 分钟)重新登录。如超时过短,在 web.xml 中调整。
其他设备被登出并发登录策略(KICK)强制退出检查并发登录设置。
会话相关错误反复出现Redis 缓存故障检查 Redis 服务状态。