当你打算合并的外部目录服务器(Crowd 或 Jira 应用)有大量的用户到 Confluence 数据库中的时候,请使用这个选项。你需要有基本的 SQL 知识才能完成这个任务。

下面的 SQL 命令假设你使用的数据库为 MySQL 数据库。如果你使用的数据库不是 MySQL 数据库的话,你需要针对你使用的数据库对你的脚本进行一些修改后才能执行。

第 1 步. 创建备份

创建备份是在你对系统进行操作时候出现错误后恢复的唯一办法。

  1. 从 Confluence 中,你可以创建一个完整的 XML 站点备份包括所有的附件。

  2. 停止 Confluence。

  3. 将你服务器上的  Confluence home 和 安装目录中的所有文件和目录拷贝到系统的其他地方备份。

  4. 针对你的外部应用程序,重复上面的步骤。

  5. 从你的 MySQL 数据库管理工具中,为 Crowd/Jira 和 Confluence 都创建一个备份。

第 2 步. 替换 Confluence 用户管理

使用下面的 SQL 脚本备份外部应用程序中的用户和用户组到 Confluence 表中。下面的脚本是针对 MySQL 数据库设计运行的,如果你使用其他的数据库,你需要对脚本进行修改。

找到你目录使用的 ID
  1. 运行下面的脚本,然后对返回的结果数进行记录,这个 ID 将会在后面的 <Confluence Internal ID> 参数中引用。

    select id from cwd_directory where directory_name='Confluence Internal Directory';
  2. 针对用户目录关里界面,找到你希望移动的用户,用户组名字。运行下面的脚本,然后对返回的结果数进行记录,这个 ID 将会在后面的 <External Application ID> 参数中引用。

    select id from cwd_directory where directory_name='<External Directory Name>';
移动用户组到 Confluence
  1. 在你的内部目录中,外部目录的名字是相同情况是被允许的,希望找到这些名字,请运行下面的脚本:

    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;
    1. 如果上面的脚本有返回插件结果,针对每一条记录表明的是名字出现了重复,在 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>;
  2. 移动所有外部应用中的所有组到 Confluence 内部目录中。

    update cwd_group set directory_id=<Confluence Internal ID> where directory_id=<External Application ID>;
移动用户到 Confluence
  1. 在内部目录中是允许有多个相同的用户名的,如果这些用户组在不同的外部应用目录中的话。找到这些用户,运行:

    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;
    1. 如果上面的脚本返回了多条记录的话,表明的是你的系统中有多个用户具有相同的用户名在不同的外部目录中。在 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>;
  2. 移动所有外部应用中的所有用户到 Confluence 内部目录中。

    update cwd_user set directory_id=<Confluence Internal ID> where directory_id=<External Application ID>;
删除外部应用目录
  1. 你需要移动你的系统中的目录顺序,将内部用户目录移动到系统目录列表中的最顶端,然后激活它。

  • 列出内部目录。一个被激活的目录将会在字段 'active' 中设置为 'T'

    select id, directory_name, active from cwd_directory where id = <Internal Directory id>;
  • 如果内部目录不是激活的,请激活它

    update cwd_directory set active = 'T' where id = <Internal Directory id>;
  • 列出所有用户的排序列表

    select d.id, d.directory_name, m.list_index from cwd_directory d join cwd_app_dir_mapping m on d.id=m.directory_id order by m.list_index;
  • 修改列表索引,这样这些目录将会按照你希望的顺序进行排序。用户目录的排序可以使用下面的方法进行重排序

    update cwd_app_dir_mapping set list_index = <position> where directory_id = <directory id>;
  1. 如果你仅仅有 2 个目录 - 内部和外部目录的删除可以用下面的脚本:

    update cwd_app_dir_mapping set list_index = 0 where directory_id = <Confluence Internal ID>;
  2. 如果你具有超过 2 个的用户目录,你需要将你的内部目录移动到顶部(list_index 0)需要删除的外部目录在这个目录的后面。

  3. 检查内部目录是否被启用。

当所有的目录排序是正确的话,从目录列表中删除外部应用目录:

delete from cwd_app_dir_operation where app_dir_mapping_id = (select id from cwd_app_dir_mapping where directory_id = <External Application ID>);
delete from cwd_app_dir_mapping where directory_id = <External Application ID>;

如果被删除的外部目录在系统中与其他的表有约束的话,你需要根据这些约束从数据库中先删除其他表中的数据:

delete from cwd_directory_attribute where directory_id=<External Application ID>;
delete from cwd_directory_operation where directory_id=<External Application ID>;

所有引用的外部目录现在应该可以从系统中被删除了。使用下面的命令进行删除:

delete from cwd_directory where id = <External Application ID>;
重置密码
  1. 所有在你删除的外部目录中的用户现在还不能登录系统,包括外部目录的管理员。这些用户需要先重置密码后才能登录系统。你可以通知你的用户使用登录页面的 忘记你的密码(Forgot your password)连接重置密码。可选的你可以使用Restore Passwords To Recover Admin User Rights页面的内容重置管理员的密码,然后通过管理员界面中的管理用户选项为你的用户重置密码。

https://www.cwiki.us/display/CONFLUENCEWIKI/Reverting+from+Crowd+or+JIRA+applications+to+Internal+User+Management

转载于:https://blog.51cto.com/ossez/2103374

Confluence 6 选项 2 – 转移 Crowd/Jira 应用程序中的用户和用户组到 Co相关推荐

  1. Atlassian 系列软件安装(Crowd+JIRA+Confluence+Bitbucket+Bamboo)

    公司使用的软件开发和协作工具为 Atlassian 系列软件,近期需要从腾讯云迁移到阿里云环境,简单记录下安装和配置过程.(Atlassian 的文档非常详尽,过程中碰见的问题都可以找到解决办法.) ...

  2. Confluence 6 选项 1 – 在 Confluence 中手动重建用户和用户组

    当你只有少量的用户和用户组的时候,使用这个方法. 使用 Confluence 的系统管理员登录 Confluence. 进入用户目录管理界面,然后移动 内部目录(internal directory) ...

  3. java 是怎么在中删除下拉列表_删除在一个下拉列表字段中选择的选项,并且不显示在该行中存在的其他下拉列表中不工作-jquery...

    我有一个包含多列的html表,在两列中我显示下拉列表 . 当用户从一个下拉列表中选择值时(选择Product1或Select Product2下拉列表),我想删除在一个下拉列表中选择的选项,并且不要在 ...

  4. 关于python缩进的描述中_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()...

    关于Python程序中与"缩进"有关的说法中,以下选项中正确的是() 答:缩进在程序中长度统一且强制使用 同文学或同音乐主题的民歌,<_______>是其中之一.此曲经 ...

  5. SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错

    SAP S4HANA 账户组的配置里'Int.Std.Grping'选项没勾选导致ABAP程序报错 BP,试图创建一个新的vendor code, 角色是ZGM001, Grouping是G001, ...

  6. 转移的目的地址在指令中的jmp指令 转移地址在寄存器中的jmp指令

    机器码中并没有包含转移的目的地址,只是给了一个位移的范围,通过位移的方式,实现对ip寄存器的修改. 转移的目的地址在机器码中的jmp指令 jmp far ptr s 转移的目的地址在寄存器中的jmp指 ...

  7. 哪个是python程序中与缩进有关的正确说法_关于Python程序中与“缩进”有关的说法中,以下选项中正确的是()。_学小易找答案...

    [单选题]白内障的主要症状 [多选题]白内障病人手术后护理重点观察是 [单选题]某女,21岁.排球比赛时与队员发生碰撞,后诉鼻梁疼痛来院就诊,检查鼻腔发现鼻中隔有一小血肿.正确处理方法是 [单选题]开 ...

  8. .NET Core开发实战(第17课:为选项数据添加验证:避免错误配置的应用接收用户流量)--学习笔记...

    17 | 为选项数据添加验证:避免错误配置的应用接收用户流量 三种验证方法 1.直接注册验证函数 2.实现 IValidateOptions 3.使用 Microsoft.Extensions.Opt ...

  9. python缩进说法_【多选题】关于Python程序中与“缩进”有关的说法中,以下选项中错误的是()。...

    问题:[多选题]关于Python程序中与"缩进"有关的说法中,以下选项中错误的是(). 更多相关问题 因方某将赵某打伤,方某住所地的市劳动教养委员会对方某作出劳动教养2年的决定,并 ...

最新文章

  1. 公司升级ERP软件的三大诱因
  2. Project Euler 50 Consecutive prime sum
  3. 微软嵌入式WEC2013产品研讨会(深圳站---2013.10.16)
  4. 基础知识---汇编学习笔记
  5. php-fpm 无法运行cli,linux-怎样让php在cli与fpm环境下运行时加载不同的扩展?
  6. php脚本哪里找,我在哪里可以找到PHP-FPM RC脚本?
  7. 【java】java 模拟 实现一个 ThreadPoolExecutor
  8. C#学习-程序集和反射
  9. LeetCode(38)——报数(JavaScript)
  10. System V 共享内存 和 系列函数
  11. 分享一款WIFI抓包工具,支持Mac和Windows
  12. 【预测模型-ELAMN预测】基于哈里斯鹰算法优化ELMAN神经网络实现数据回归预测matlab代码
  13. Php真太阳时计算公式,李顺祥:真太阳时的计算与应用
  14. linux 扫描开放的端口命令,在Linux中,如何检查开放的端口(扫描)
  15. 如何做一个基于微信外卖点餐小程序系统毕业设计毕设作品
  16. rv1126rv1109开发环境搭建
  17. Selenium元素定位方法总结
  18. Android全局捕获异常信息,并上传到服务器。
  19. 美容院共享系统开发|共享模式具体应该怎么去做?
  20. 升级扩散模型!一步成图,1秒18张,OpenAI开源

热门文章

  1. 转:Siri之父:语音交互或将主导未来十年发展
  2. ios开发多线程篇--异步加载网络图片GCD
  3. Spore是一个平台,就知道没那么简单
  4. Python第一章-基础知识
  5. hdu2438 三分
  6. hdu3786 找出直系亲属 水题
  7. hdu4604 不错的子序列问题
  8. hdu4022 map+multiset
  9. 【Android Gradle 插件】工程根目录下 build.gradle 配置文件 ( 远程仓库配置 | 依赖配置 | 所有子模块配置 | task clean 任务 )
  10. 【Groovy】集合遍历 ( 使用 for 循环遍历集合 | 使用集合的 each 方法遍历集合 | 集合的 each 方法返回值分析 )