返回博客

如何通过数据库恢复 Confluence 管理员访问权限 - 紧急指南

2025-04-245 分钟阅读

设想一下这种情况:周一早上,一个团队需要为关键的 Confluence 空间添加新成员。问题是?唯一的管理员刚刚开始为期两周的完全失联休假。对于任何处于这种情况的人来说,可能会感到恐慌……直到他们想起自己可以访问运行 Confluence 的服务器。这个假设的场景说明了以下技术解决方案可能何时是必要的。

重要免责声明:本文仅供教育目的。此处描述的技术仅应用于您拥有适当授权访问数据库和修改管理员权限的合法紧急情况。未经授权的数据库访问或修改可能违反:

  • 您组织的安保政策和雇佣条款
  • 与 Atlassian 的软件许可协议
  • 您所在司法管辖区的适用计算机访问法律

在尝试任何直接数据库修改之前,请务必咨询您的 IT 部门、法律团队并查阅您组织的政策。作者和本网站不对任何滥用此信息或由此产生的后果承担任何责任。

首先需要什么

在开始之前,请确保您拥有:

  • 对运行 Confluence 数据库的服务器的访问权限。
  • 连接 Confluence 数据库的用户名和密码。(提示:查看 confluence.cfg.xml 文件!)
  • 您希望设置为管理员的 Confluence 用户名。

步骤 1:查找您的 Confluence 数据库详细信息

Confluence 将其数据库连接信息存储在一个名为 confluence.cfg.xml 的文件中。此文件通常位于服务器上的 Confluence“主目录”(通常类似于 /var/atlassian/application-data/confluence)。

查找文件:

如果您知道 Confluence 主目录的路径,可以使用类似以下的命令(将 /path/to/confluence/home 替换为实际路径):

find /path/to/confluence/home -name \"confluence.cfg.xml\"

如果您不确定 Confluence 主目录的位置,可以尝试从根目录开始搜索(这可能需要一些时间),或者导航到可能的父目录(如 /var/atlassian/opt)并从那里开始搜索:

# 首先导航到潜在的父目录,然后运行:
find . -name \"confluence.cfg.xml\"

此命令会在当前目录(.)及其所有子目录中搜索该文件。

读取文件:

找到文件后,打开 confluence.cfg.xml。查找类似以下的行:

<property name=\"hibernate.connection.url\">jdbc:postgresql://your-db-host:5432/confluence</property>
<property name=\"hibernate.connection.username\">confluenceuser</property>
<property name=\"hibernate.connection.password\">yourpassword</property>

这些行会告诉您数据库类型(如 PostgreSQL 或 MySQL)、服务器地址(your-db-host)、数据库名称、用户名和密码,这些是您连接所需的。

步骤 2:连接到数据库

现在,使用您找到的详细信息登录数据库。

如果是 PostgreSQL:

psql -h your-db-host -U confluenceuser -d confluence

如果是 MySQL:

mysql -h your-db-host -u confluenceuser -p confluence

出现提示时输入密码。

步骤 3:获取用户 ID 和管理员组 ID

您需要从数据库中获取两个信息:用户 ID 和管理员组 ID。

查找用户的 ID(user_key):

运行此 SQL 命令。将 'your-username' 替换为您希望设置为管理员的实际 Confluence 用户名:

SELECT user_key FROM cwd_user WHERE user_name = 'your-username';

记下它给出的 user_key(它将是一个数字)。

查找管理员组的 ID:

运行此 SQL 命令:

SELECT id FROM cwd_group WHERE group_name = 'confluence-administrators';

记下它给出的 id(这是管理员组 ID)。

步骤 4:将用户添加到管理员组

这是将用户链接到管理员组的关键步骤。

查找下一个可用的链接 ID:

运行此命令以查看成员资格表中的当前最高 ID:

SELECT MAX(id) FROM cwd_membership;

获取它给出的数字并加 1。例如,如果显示 1000,您将使用 1001。这将是新链接的唯一 ID。

创建链接:

运行以下 `INSERT` 命令。**仔细替换** `NEXT_MEMBERSHIP_ID` 为您刚刚计算出的 ID(例如 `1001`),`ADMIN_GROUP_ID` 为您找到的管理员组 ID,以及 `USER_KEY` 为您找到的用户 ID。另外,再次将 `'your-username'` 替换为实际用户名。

INSERT INTO cwd_membership (id, parent_id, child_user_id, membership_type, group_type, parent_name, lower_parent_name, child_name, lower_child_name) 
VALUES (NEXT_MEMBERSHIP_ID, ADMIN_GROUP_ID, USER_KEY, 'GROUP_USER', 'GROUP', 'confluence-administrators', 'confluence-administrators', 'your-username', 'your-username');

示例:

-- 确保使用您找到的实际 ID!
INSERT INTO cwd_membership (id, parent_id, child_user_id, membership_type, group_type, parent_name, lower_parent_name, child_name, lower_child_name) 
VALUES (1001, 4587522, 241106945, 'GROUP_USER', 'GROUP', 'confluence-administrators', 'confluence-administrators', 'jane.doe', 'jane.doe');

(注意:如果您收到有关缺少列的错误,您的 Confluence 版本可能不同。在 `INSERT` 语句中您可能只需要 `id`、`parent_id` 和 `child_user_id`。如有需要,请检查您的表结构。)

步骤 5:重启 Confluence

在重启 Confluence 之前,更改不会生效。

选项 1:使用 systemd(Linux 上常见)

sudo systemctl restart confluence

选项 2:使用 Confluence 的脚本

cd /path/to/confluence/bin  # 进入 Confluence 的 bin 目录
./shutdown.sh
./startup.sh             # 关机后稍等片刻再启动

Confluence 重新启动后,您选择的用户应该能够以完整的管理员权限登录!

快速提示和警告

  • 先备份!说真的,在直接更改任何内容之前,请务必备份您的数据库。
  • 数据库很重要:如果您使用的不是 PostgreSQL/MySQL 而是 Oracle 或 SQL Server,SQL 命令可能需要进行微调。
  • 检查名称:如果命令失败,请仔细检查表名(cwd_usercwd_groupcwd_membership),因为它们在不同 Confluence 版本之间可能略有不同。
  • 小心操作:您正在绕过正常的安全检查。请务必确保您将管理员权限授予了正确的用户帐户。
  • 检查您的政策:此技术仅应在您拥有适当授权的紧急情况下使用。许多组织都有关于数据库访问和管理员权限的政策。在进行这些更改之前,请务必确保您遵守公司的 IT 治理规则并获得适当的批准。
  • 记录您的操作:如果您确实使用了此方法,请记录您做了什么、何时做的以及为什么做的。在进行此类系统级更改时,透明度至关重要。

结论

丢失 Confluence 实例的管理员访问权限可能是一种令人沮丧的情况,尤其是在关键工作依赖于它时。虽然本指南中描述的方法应被视为最后的手段,但它为 IT 管理员在拥有适当授权时提供了一个可行的紧急解决方案。请记住,预防胜于治疗,实施适当的管理员访问管理和文档可以帮助完全避免这些情况。

常见问题解答

直接修改 Confluence 数据库安全吗?

直接数据库修改始终存在风险,应仅由具备适当授权的合格数据库管理员在创建完整备份后执行。此方法仅应用于不存在其他选项的紧急情况。

此方法适用于云托管的 Confluence 吗?

不,此方法仅适用于您可以直接访问底层数据库的自托管 Confluence 实例。对于云托管的 Confluence,请联系 Atlassian 支持以获取管理员访问恢复选项。

是否有其他方法可以恢复 Confluence 的管理员访问权限?

是的,替代方法包括:1)联系现有管理员,2)使用已启用的 Confluence 恢复模式,3)从您拥有管理员访问权限的备份中恢复,或 4)联系 Atlassian 支持以获取针对您情况的指导。