ドメイン分離 - 高度なコンセプトと構成Issue ドメイン分離について理解する - 基本 - KB0715934 では、基本的なドメイン分離の概念と、プラットフォーム内でドメイン分離がどのように機能するかについて説明します。この記事では、インスタンス上でドメイン分離を構成し、管理する方法について詳しく説明します。ここでは、ドメイン分離を可能にするためにシステムがどのように構成されているかを理解し、お客様がインスタンス上で動作するようにドメイン分離を構成する方法を見ていきます。 KB0715934 では、データ分離は sys_domain 列をデータテーブルに追加することで、データベースレベルで行われることを確認しました。ユーザーがドメインにログインすると、システムは、そのドメインとすべての子ドメインのデータをデータベースから検索して取得するためのクエリをバックグラウンドで構築します。その後で選択したドメイン分離テーブルにデータが表示されます。 ドメインパス ドメインのデータを検索および取得するために、SQL は sys_domain_path の値に依存する「ドメインパス」クエリメソッドを使用します。このクエリは、glide.sys.domain.provider プロパティを通じてサポートされています。 ドメインパスのクエリ方法を機能させるために、[ドメイン] テーブルには [ドメインコード] と [ドメインパス] という 2 つの追加列があります。ドメイン分離テーブルには、「sys_domain」列に加えて [ドメインパス] 列があります。 プロセス分離テーブルには、これらの列と sys_overrides 列の両方があります。 [ドメインコード] とは、システムが生成した、特定のドメインレコードに対応する一連の 3 文字コードのことで、[ドメインパス] とは、このコードの先頭に、直近の親のパスのドメインコードをスラッシュで区切ったものです。sys_domain_path 値はドメインテーブル内で一意です。特定のドメインのデータを検索するために、システムはそのドメインパス値を使用してクエリを実行します。[ドメインパス] を使用すると、ドメインからクエリが自動的に生成され、これらのクエリは常に再計算されます。 たとえば、あるユーザーがインスタンスにログインし、そのユーザープロファイルレコードが INITECH ドメインに割り当てられているとします。 タスクテーブルにアクセスすると、システムはバックグラウンドでドメインパスのクエリを構築し、INITECH ドメインとその階層内にあるすべての子ドメインからデータをフィルタリングして取得します。これはクエリが基本的に、システムに対して「ドメインパスが !!!/!!#/!!!/ で始まるすべてのタスクを選択してください」と伝えていることを意味します。その後、システムはドメインとサブドメイン内のすべてのレコードを検索し、[タスクテーブル] にデータを入力します。 以下は、ドメイン階層と関連するパスの図です。 ドメインパスは最大 255 文字です。 システムは、レベルごとに 216,000 のドメインと、63 の階層に対応していますが、これらのシステム制限を最大限に活用した場合、パフォーマンスに影響が出る可能性があります。 ドメインパスが機能するためには、ドメイン分離テーブル内のドメインパスの値が、ドメイン (システム) テーブルにリストされているパスの値と一致する必要があります。ドメインが構成されると、システムはパスを構成し、システムドメインテーブルのドメインパス値に基づいてドメイン分離テーブルにドメインパスを入力します。 特定のシナリオでは、現在ログインしているユーザーのドメインとは別のドメインにレコードが作成されるとドメインパスの問題が発生し、システムがレコードに間違ったドメインパスを入力する可能性があります。ドメインパスのエラーは、ユーザーがドメインパスを手動で変更した場合や、パスが正しく入力されなかった場合にも発生する可能性があります。たとえば、ドメインパスが異なる別のインスタンスからドメイン分離テーブルのデータがインポートされた場合や、ドメインテーブルのデータがインポートされた場合などです。 ドメイン検証 ドメインパスの問題の修正を容易にするために、検証ジョブを実行して sys_domain パス内のエラーをチェックできるドメイン検証が装備されています。これにより、sys_domain パスが正しい場所を指し、ドメイン分離テーブルに格納されたドメイン sys_domain_path がドメインテーブルの sys_domain_path と同期するようになります。 インスタンスのドメイン検証は、[ドメイン構成 (Domain Configuration)] ページからアクセスできます。 ServiceNow の以前のバージョンでは、ドメインパスのエラーを修正するために、リソースを大量に消費する夜間に検証ジョブが実行されていました。 Kingston 以降、この夜間ジョブの機能は大幅に縮小され、夜間ジョブはドメインテーブルの一貫性と、すべてのドメイン対応テーブルにおける sys_domain_path の存在のみをチェックします。 Kingston 以降のリリースでは、実際のドメイン検証とドメインエラーの修正は、[ドメイン構成 (Domain Configuration)] ページからお客様によってオンデマンドでのみ実行できるようになりました。 影響: テーブル内のレコード数が多い場合、ドメイン階層の検証に膨大な時間がかかることがあります。パフォーマンスへの影響を最小限に抑えるため、必要に応じて営業時間外に実行するようにしてください。 ドメイン階層が変更されると、新しいパスが計算され、変更されたドメインパス値がドメインで分離されたテーブル内のシステムのあらゆる場所に伝搬されます。 たとえば、階層内のドメインを削除すると、システムは自動的に削除されたドメインの子ドメインをその親ドメインに再ペアレンティングします。ただし、ドメイン管理者は子ドメインを必要に応じて再構築することができます。このようにしてドメインが階層内で再構築されると、ドメインパスが自動的に再計算され、すべてのレコードが正しいドメインを指すように更新されます。 メインドメインテーブルとドメイン分離テーブルの間で、ドメインパスが常に同期しているとは限らないシナリオがあります。ドメイン階層が何らかの形で変更された場合は、ドメイン検証が特に重要になります。 ドメインスコープ:セッションスコープとレコードスコー: ドメインパスに加えて、レコードの可視性を制限するようにシステムを構成する別の方法として、ドメインスコープがあります。 ドメイン分離されたインスタンスでセッションを確立する場合、すべてのユーザーには 2 つのドメインスコープがあります。セッションスコープはユーザーのユーザーレコードにリストされているドメインに設定されますが、ユーザーはログイン時にドメインピッカーを使用してセッションドメインスコープを手動で変更できます。 レコードスコープはレコードのドメインを使用し、任意のレコードのフォームを表示すると有効になります。 さまざまなレコードとフォームの可視性は、レコードスコープとセッションスコープによって決まります。デフォルトでは、レコードスコープがセッションスコープよりも優先されます。 domain_expand_scope ロールを持つユーザーは、データフォームの [ドメインスコープの切り替え] UI アクションを使用してドメインスコープを変更できます。レコードスコープが有効になると、UI アクションをクリックしてセッションスコープに切り替え、ユーザーのドメインと子ドメインに基づいて使用可能なすべてのデータを表示できます。 セッションスコープが有効な場合は、UI アクションをクリックしてレコードスコープを変更し、現在のレコードのドメインと一致するデータのみを表示できます。 ドメイン分離 - システムプロパティ ドメインスコープ glide sys.domain.use_record_domain_for_processes (true/false) - プロセスを選択する際に使用するドメインを制御します。このプロパティを有効にすると、システムはレコードのドメインを使用して、フォーム上で実行する処理を選択します。リストの場合、システムはユーザーのセッションドメインを使用してプロセスを選択します。 glide.sys.domain.use_record_domain_for_data (true/false) - データを選択する際に使用するドメインを制御します。このプロパティを有効にすると、フォーム内のデータの表示を制限するためにレコードのドメインが使用されます。適切なロールを持つユーザーには、レコードのドメインとユーザーのセッションドメインの間でドメインスコープを切り替えるための [ドメインスコープの切り替え] UI アクションが表示されます。 注意:glide.sys.domain.use_record_domain_for_processes プロパティまたは glide.sys.domain.use_record_domain_for_data プロパティのいずれかが true に設定されている場合、その設定にかかわらず、次のプロパティは使用されません: glide.sys.domain.use_record_domainglide.sys.domain.use_record_domain_for_client_scriptsglide.sys.domain.domain_change_notifyglide.sys.domain.no_change_roles ドメインピッカー glide.ui.domain_reference_picker.enabled (true/false) プロパティは、先行入力参照ドメインピッカーを有効にします。glide.ui.domain_picker.role デフォルトでは、ITIL ロールを持つユーザー、および ITIL ロールを含むロールは、UI16 のドメインピッカーにアクセスできます。このシステムプロパティでロールをロールのカンマ区切りリストとして設定することにより、ドメインピッカーにアクセスできるロールを制限できます。 ドメインプロセスのオーバーライド glide.domain.strict_override (true/false) プロパティは、子ドメインがオーバーライドを作成していない場合でも、親からプロセスを継承しないようにします。このプロパティがオンの場合、ドメインフレームワークはポリシーのオーバーライドに関するより厳格なルールを強制します。たとえば、モジュールが子ドメインで上書きされ、非アクティブとしてマークされた場合、プロパティがオンのときは親ドメインのモジュールを使用しません。 また、ドメイン B にいて、親ドメイン A からのプロセスが必要ない場合、ドメイン A からのルールが上書きされておらず、ドメイン B にビジネスルールが作成されていない場合、このプロパティが false である限り、親ドメイン A からのビジネスルールが実行されます。しかし、このプロパティが有効な場合、ドメイン B は親ドメイン A からビジネスルールを取得しません。 グローバルドメイン glide.sys.restrict_global_domain_processes (true/false) プロパティが true に設定されている場合、デフォルトでは、グローバルドメイン内のユーザーが sys_overrides 列を含むテーブルを表示すると、そのユーザーにはグローバルドメインからのレコードのみが表示されます。このプロパティを使用すると、管理者ユーザーはグローバルドメインのみからすべてのドメインに表示を拡大できます。このプロパティが有効になっている場合は、[ドメインスコープの展開/折りたたみ] リンクを使用して表示を展開または折りたたみます。 ビジネスルール glide.sys.domain.skip_domain_insert_businessrules (true/false) ドメインテーブルで実行されるビジネスルールのドメインスコープを指定します。ドメイン分離の新しいアクティベーションでは、プロパティのデフォルトは true であり、ビジネスルールはセッションドメインによって決定されます。既存の実装では、プロパティのデフォルトは false であり、ビジネスルールは新しく作成されたドメインの階層によって決定されます。 ドメイン分離 - ユーザー初期設定 glide.domain.session_scope (true/false) デフォルトでセッションスコープに設定されます。true の場合、デフォルトのスコープをレコードのドメインではなくユーザーのセッションドメインに設定します。false の場合、デフォルトのスコープはレコードのドメインです。domain_expand_scope ユーザーロールのユーザーは、必要に応じて引き続きドメインスコープを変更できます。glide.domain.session_scope_notification (true/false) true の場合、レコード値に展開されたドメインスコープが含まれていることを示す視覚的なキューが表示されます。false の場合、この通知は非表示になります。Related LinksKB0715934:ドメイン分離について理解する - 基本ドメイン分離について理解する可視性ドメインと包含ドメインドメイン間の包含関係を作成するドメインの可視性を変更するドメイン分離のセットアップと基本的な管理委任管理ドメイン分離エラーのトラブルシューティング詳細なドメインログ記録とデバッグメッセージを有効にするアプリケーションのドメイン分離サポート