当你打算合并的外部目录服务器(Crowd 或 Jira 应用)有大量的用户到 Confluence 数据库中的时候,请使用这个选项。你需要有基本的 SQL 知识才能完成这个任务。 下面的 SQL 命令假设你使用的数据库为 MySQL 数据库。如果你使用的数据库不是 MySQL 数据库的话,你需要针对你使用的数据库对你的脚本进行一些修改后才能执行。 第 1 步. 创建备份 创建备份是在你对系统进行操作时候出现错误后恢复的唯一办法。 从 Confluence 中,你可以创建一个完整的 XML 站点备份包括所有的附件。 停止 Confluence。 将你服务器上的 Confluence home 和 安装目录中的所有文件和目录拷贝到系统的其他地方备份。 针对你的外部应用程序,重复上面的步骤。 从你的 MySQL 数据库管理工具中,为 Crowd/Jira 和 Confluence 都创建一个备份。 第 2 步. 替换 Confluence 用户管理 使用下面的 SQL 脚本备份外部应用程序中的用户和用户组到 Confluence 表中。下面的脚本是针对 MySQL 数据库设计运行的,如果你使用其他的数据库,你需要对脚本进行修改。 找到你目录使用的 ID 运行下面的脚本,然后对返回的结果数进行记录,这个 ID 将会在后面的 <Confluence Internal ID> 参数中引用。 select id from cwd_directory where directory_name='Confluence Internal Directory'; 针对用户目录关里界面,找到你希望移动的用户,用户组名字。运行下面的脚本,然后对返回的结果数进行记录,这个 ID 将会在后面的 <External Application ID> 参数中引用。 select id from cwd_directory where directory_name='<External Directory Name>'; 移动用户组到 Confluence 在你的内部目录中,外部目录的名字是相同情况是被允许的,希望找到这些名字,请运行下面的脚本: select distinct a.id, a.directory_id, a.group_name, d.directory_name from cwd_group a join cwd_group b on a.group_name=b.group_name join cwd_directory d on d.id=a.directory_id where a.directory_id != b.directory_id; 如果上面的脚本有返回插件结果,针对每一条记录表明的是名字出现了重复,在 Confluence 的内部目录中找到这些重复名字的 ID(<internal group id>)和外部应用(<external group id>)。运行下面的脚本: update cwd_group_attribute set group_id=<internal group id>, directory_id=<Confluence Internal Id> where group_id=<external group id>; update cwd_membership set child_group_id=<internal group id> where child_group_id=<external group id>; update cwd_membership set parent_id=<internal group id> where parent_id=<external group id>; delete from cwd_group where id=<external group id>; 移动所有外部应用中的所有组到 Confluence 内部目录中。 update cwd_group set directory_id=<Confluence Internal ID> where directory_id=<External Application ID>; 移动用户到 Confluence 在内部目录中是允许有多个相同的用户名的,如果这些用户组在不同的外部应用目录中的话。找到这些用户,运行: select distinct a.id, a.directory_id, a.user_name, d.directory_name from cwd_user a join cwd_user b on a.user_name=b.user_name join cwd_directory d on d.id=a.directory_id where a.directory_id != b.directory_id; 如果上面的脚本返回了多条记录的话,表明的是你的系统中有多个用户具有相同的用户名在不同的外部目录中。在 Confluence 的内部目录中找到这些重复名字的 ID((<internal user id>)和外部应用(<external user id>)。运行下面的脚本: update cwd_membership set child_user_id=<internal user id> where child_user_id=<external user id>; update cwd_user_credential_record set user_id=<internal user id> where user_id=<external user id>; update cwd_user_attribute set user_id=<internal user id>, directory_id=<Confluence Internal ID> where user_id=<external user id>; delete from cwd_user where id=<external user id>; 移动所有外部应用中的所有用户到 Confluence 内部目录中。 update cwd_user set directory_id=<Confluence Internal ID> where directory_id=<External Application ID>; 删除外部应用目录…