データベース経由で Confluence からグループを削除する方法
プラットフォームについて: Server および Data Center のみ。この記事は、Server および Data Center プラットフォームのアトラシアン製品にのみ適用されます。
Support for Server* products ended on February 15th 2024. If you are running a Server product, you can visit the Atlassian Server end of support announcement to review your migration options.
*Fisheye および Crucible は除く
目的
現在、Confluence の UI でグループを一括削除することはできません。お客様が LDAP フィルターの設定ミスによって何百ものグループを誤って作成してしまった場合、余分なグループを削除する簡単な方法はありません。不要なグループを削除するために SQL コマンドを使用できますが、これらは慎重に扱ってください。
次のようにします。
- ユーザーがエラーに遭遇しないよう、グループを削除する間は Confluence をシャットダウンするようにします。
- ユーザーとグループに関連するメモリ内のキャッシュをリセットするために再起動が必要です。
- ユーザー管理に LDAP または Crowd を使用する場合、LDAP フィルターや Crowd グループを編集した場合を除いて、次回の同期時にグループが再作成されます。
SQL クエリはテスト環境でテストするようにしてください。グループやグループ メンバーシップを削除した場合にそれらを戻すことはできません。
診断
- Confluence 内に 50 個以上のグループがあり、グループ メンバーシップの管理の妨げになっている。UI 経由や LDAP フィルターの変更ではグループを削除できない。
回避策
データベースの変更を行う場合は必ず事前にバックアップを取得してください。可能な場合は、まずステージング サーバーで SQL コマンドの変更、挿入、更新、または削除を行うようにします。
以降の手順を進める前に、Confluence の UI (http://<baseurl>/admin/users/browsegroups.action) でグループの使用状況を確認し、グループを削除してもインスタンスが破壊されないことを確認します。次に、以降のクエリを使用して追加の確認を行います。
重要: クエリでは、ユーザーおよびグループ名の大文字と小文字が区別されます。これらのクエリは Postgres および MySQL でテスト済みです。サポート対象の他のデータベースで使用するには構文を変更する必要がある場合があります。
セクション 1: グループを安全に削除できるかどうかを確認
注: 安全に削除できるグループとは、メンバーが存在せず、コンテンツ権限、スペース権限、またはグローバル権限で参照されていないグループを指します。
次の SQL スクリプトを実行して空のグループを見つけます。
SELECT id, lower_group_name FROM cwd_group WHERE cwd_group.id NOT IN (SELECT cwd_membership.parent_id FROM cwd_membership);
注: id とグループ名は以降のスクリプトで使用します。
次の SQL スクリプトを実行し、削除対象のグループにメンバーが含まれないことを確認します。
Select cwd_user.id, user_name FROM cwd_user INNER JOIN cwd_membership ON cwd_user.id = cwd_membership.child_user_id WHERE parent_id IN (id1, id2);
次の SQL スクリプトを実行し、グループがコンテンツ権限で使用されているかどうかを確認します。
SELECT * FROM content_perm INNER JOIN cwd_group ON cwd_group.lower_group_name = content_perm.groupname WHERE cwd_group.lower_group_name IN ('group-to-delete', 'another-group-to-delete');
次の SQL スクリプトを実行し、グループがスペース権限で使用されているかどうかを確認します。
SELECT * FROM spacepermissions INNER JOIN cwd_group ON cwd_group.lower_group_name = spacepermissions.permgroupname WHERE cwd_group.lower_group_name IN ('group-to-delete', 'another-group-to-delete');
セクション 2: グループを削除するための SQL スクリプト
グループを削除しても絶対に安全だと判断できた場合、以降のスクリプトを記載されている順序で実行します。
データベースの変更を行う場合は必ず事前にバックアップを取得してください。可能な場合は、まずステージング サーバーで SQL コマンドの変更、挿入、更新、または削除を行うようにします。
上述のステップ 2 でユーザーが返されていた場合はグループ メンバーを削除します。
DELETE FROM cwd_membership WHERE parent_id IN (id1, id2)
上述のステップ 3 で結果が返されていた場合はグループに関連付けられているコンテンツ権限を削除します。
DELETE FROM content_perm WHERE groupname IN ('group-to-delete', 'another-group-to-delete');
上述のステップ 4 で結果が返されていた場合はグループに関連付けられているスペース権限を削除します。
DELETE FROM spacepermissions WHERE permgroupname IN ('group-to-delete', 'another-group-to-delete');
グループを削除します。
DELETE from cwd_membership WHERE parent_id IN (id1, id2); DELETE from cwd_group WHERE id IN (id1, id2);