セクションへの安全なアクセス管理

セキュリティ管理には、データ ロード スクリプトのセクション アクセスを使用します。この方法であれば、複数のユーザーやグループのデータを 1 つのファイルで保管できます。Qlik Sense は認証と承認のためセクション アクセスで情報を使用し、データを動的に減らすため、ユーザーには自身のデータしか表示されません。

注: Kubernetes ではユーザー グループに対応していません。

ファイル自体にセキュリティが組み込まれるので、ダウンロードしたファイルもある程度は保護されます。しかし、徹底的なセキュリティ対策を講じるには、ファイルのダウンロードやオフライン使用を防止しなければなりません。また、ファイルの公開は必ず Qlik Sense サーバーで行う必要があります。この方法では 1 つのファイルにすべてのデータを保持するため、ファイルのサイズが非常に大きくなる可能性がある点に留意してください。

警告:

制限されているデータを公開しないようにするには、アプリを公開する前に、セクション アクセス設定が含まれるすべての添付ファイルを削除します。

添付したファイルは、アプリが公開されるときに含まれます。公開済みアプリがコピーされると、添付ファイルがそのコピーに含まれます。ただし、添付したデータ ファイルにセクション アクセス制限が適用されている場合、ファイルがコピーされるときにセクション アクセス設定が保持されません。そのため、コピーしたアプリのユーザーは、添付ファイルのすべてのデータを表示することができます。

警告: スナップショットには、スナップショットを取得するユーザーのアクセス権限に従ってデータが表示され、そのスナップショットは 1 つのストーリーで共有することができます。ただし、ユーザーがアプリでライブ データを見るためにストーリーからビジュアライゼーションに戻ると、それらのスナップショットは、それ独自のアクセス権限によって制限されます。
警告:

セクション アクセスを使用する場合、または極秘データを扱う場合は、値が公開される可能性があるため、マスター軸の値に色を割り当てないでください。

スクリプトのセクション

アクセス制御は、Qlik Sense のデータのロードと同じ方法でロードされる 1 つまたは複数のセキュリティ テーブルを通じ管理されます。そのため、これらのテーブルは通常のデータベースに格納できます。セキュリティ テーブルを管理するスクリプト ステートメントは、スクリプトの中で Section Access ステートメントで開始されるアクセス セクション内に指定します。

スクリプト内でアクセス セクションが定義されている場合、アプリのデータをロードする部分のスクリプトを Section Application で開始される別のセクション内に配置する必要があります。

Example:  

Section Access; LOAD * inline [ ACCESS, USERID USER, User_ID ]; Section Application; LOAD... ... from... ...

セクション アクセスのシステム項目

アクセス レベルは、セクション アクセス内にロードされた 1 つまたは複数のテーブルに含まれるユーザーに割り当てられます。これらのテーブルには、USERID やアクセス レベルを定義する ACCESS など、ユーザー固有のさまざまなシステム項目を含めることができます。認証と承認は、セクション アクセスのすべてのシステム フィールドに基づき行われます。セクション アクセスのすべてのシステム項目は次のとおりです。

ACCESS

対応するユーザーに与えられるアクセス権を定義します。

指定したユーザーまたはユーザーのグループに対して、Qlik Sense アプリへのアクセスを承認できます。セキュリティ テーブルでは、アクセス レベルの ADMIN または USER をユーザーに割り当てることができます。有効なアクセス レベルが割り当てられていないユーザーは、アプリを開くことができません。

ADMIN 権限を持つユーザーは、アプリのすべてのデータにアクセスできます。USER 権限を持つユーザーは、セキュリティ テーブルで指定されたデータにのみアクセスできます。

テンプレート アプリの On-demand アプリ生成 (ODAG) シナリオでセクション アクセスが使用されている場合、INTERNAL\SA_API ユーザーは、セクション アクセス テーブルに ADMIN として含まれる必要があります。例:

Section Access; LOAD * inline [ ACCESS, USERID ADMIN, INTERNAL\SA_API ];

USERID

Qlik Sense ユーザー名に対応する文字列を含みます。Qlik Sense はプロキシからログイン情報を取得し、その情報をこの項目の値と比較します。

GROUP

Qlik Sense 内のグループに対応する文字列を含みます。Qlik Sense は、プロキシから提供されるユーザーを、このグループに基づいて解決します。

注: グループを使用してデータを削減し、Qlik Management Console を使用する場合でも、INTERNAL\SA_SCHEDULER アカウント ユーザーが必要とされます。

OMIT

この特定のユーザーに対して省略する項目の名前を含みます。ワイルドカードを使用することができます。空にすることもできます。これは、サブ フィールドを用いることで簡単に行えます。

注: OMIT をキー項目に適用しないことをお勧めします。省略されたキー項目はデータ モデル ビューアーに表示されますが、コンテンツは使用できないので、ユーザーを混乱させる可能性があります。さらに、ビジュアライゼーションで使用されるキー項目に OMIT を適用すると、省略された項目へのアクセス権を持っていないユーザーにはビジュアライゼーションが不完全なものになります。

Qlik Sense はプロキシから取得したユーザーを UserID と比較し、そのユーザーがテーブル内のグループに含まれているか確認します。ユーザーがアクセス権のあるグループに属する場合、あるいはユーザーが一致した場合、アプリへのアクセスが付与されます。

注:

セクション アクセスを設定することで、アプリから自分自身をロックしている場合、データなしでアプリを開き、データ ロード スクリプトでアクセス セクションを編集することができます。そのためには、データ ロード スクリプトの編集およびリロードにアクセスできる必要があります。

詳細については、「データなしでアプリを開く」を参照してください。

Qlik Sense では同じ内部ロジックがアクセス セクションでも使用されているため、セキュリティ項目をさまざまなテーブルに配置できます。セクション アクセス内の LOAD または SELECT ステートメントにリストする項目は、すべて大文字で記述する必要があります。データベース内の小文字を含む項目名は、LOAD または SELECT ステートメントで読み取る前に、Upper 関数で大文字に変換されます。

詳細については、「Upper - スクリプトおよびチャート関数」を参照してください。

ワイルドカード (*) は、この項目に含まれるすべての値 (リストされている値)、つまりこのテーブル内のその他の場所にリストされている値として解釈されます。スクリプトのアクセス セクションでロードされたテーブル内のシステム項目 (USERID、GROUP) の 1 つで使用すると、この項目のすべての可能な値 (リストされていない値も含む) として解釈されます。

注: QVD ファイルからデータをロードする際に Upper 関数を使用すると、ロード速度が低下します。
注: セクション アクセスを有効にした場合は、ここにリストされたセクション アクセスのシステム項目名をデータ モデルの項目名として使用できなくなります。

Example:

この例では、財務部のユーザーのみがドキュメントを開けます。

ドキュメントへのアクセス
アクセス グループ
ユーザー 財務

動的データ削減

Qlik Sense は動的データ削除をサポートしています。動的データ削除では、アプリのデータの一部を、セクション アクセス ログインに基づき、ユーザーに対し非表示にすることができます。

  • 例えば、システム項目 OMIT を使用して項目 (列) を非表示にできます。
  • レコード (行) は、実データにセクション アクセス データをリンクさせて、非表示にすることができます。表示されるまたは除外される値の選択は、セクション アクセスおよびセクション アプリケーションで 1 つ以上の項目に共通の名前を付けることで制御されます。ユーザー ログインの後、Qlik Sense はセクション アクセスの項目にある選択と、同じ項目名 (項目名は大文字で書かれる必要があります) のセクション アプリケーションの項目との照合を試みます。選択が行われると、Qlik Sense は選択によって除外されたすべてのデータをユーザーに表示しなくなります。
注: セクション アクセスでは、すべての項目名と項目値がデフォルトで大文字に変換されるので、上で説明した転送で使用するすべての項目名とそれらの項目のすべての項目値を大文字にする必要があります。
注: Qlik Management Console タスクでスクリプトのリロードを有効にする場合は、ADMIN アクセス権を付与されている INTERNAL\SA_SCHEDULER アカウント ユーザーが必要とされます。

Example: ユーザー ID に基づくデータ削減

Section Access; LOAD * inline [ ACCESS, USERID, REDUCTION, OMIT USER, AD_DOMAIN\ADMIN, *, USER, AD_DOMAIN\A, 1, USER, AD_DOMAIN\B, 2, NUM USER, AD_DOMAIN\C, 3, ALPHA ADMIN, INTERNAL\SA_SCHEDULER, *, ]; section application; T1: LOAD *, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3;

現在、項目 REDUCTION (大文字) がセクション アクセスとセクション アプリケーションの両方にあります (項目値はすべて大文字)。2 つの項目は通常全く別のもので分かれていますが、セクション アクセスを使用すると、この項目はリンクし、ユーザーに表示されるレコードの数が減ります。

セクション アクセスの項目 OMIT で、ユーザーに表示しない項目を定義します。

結果は次のようになります。

  • ユーザー ADMIN は、REDUCTION が 1 または 2、3 の場合にその他のユーザーに表示されるレコードとすべての項目を見ることができます。
  • User A は、すべての項目と、REDUCTION=1 に関連付けられたレコードを見ることができます。
  • User B は、NUM 以外のすべての項目と、REDUCTION=2 に関連付けられたレコードを見ることができます。
  • User C は、ALPHA 以外のすべての項目と、REDUCTION=3 に関連付けられたレコードを見ることができます。

Example: ユーザー グループに基づくデータ削減

Section Access; LOAD * inline [ ACCESS, USERID, GROUP, REDUCTION, OMIT USER, *, ADMIN, *, USER, *, A, 1, USER, *, B, 2, NUM USER, *, C, 3, ALPHA USER, *, GROUP1, 3, ADMIN, INTERNAL\SA_SCHEDULER, *, *, ]; section application; T1: LOAD *, NUM AS REDUCTION; LOAD Chr( RecNo()+ord('A')-1) AS ALPHA, RecNo() AS NUM AUTOGENERATE 3;

結果は次のようになります。

  • ADMIN グループに属するユーザーは、すべてのデータとすべての項目を見ることができます。
  • A グループに属するユーザーは、すべての項目において REDUCTION=1 に関連付けられたデータを見ることができます。
  • B グループに属するユーザーは、REDUCTION=2 に関連付けられたデータを見ることができますが、NUM 項目のデータは見ることができません。
  • C グループに属するユーザーは、REDUCTION=3 に関連付けられたデータを見ることができますが、ALPHA 項目のデータは見ることができません。
  • GROUP1 グループに属するユーザーは、すべての項目において REDUCTION=3 に関連付けられたデータを見ることができます。
  • ユーザー INTERNAL\SA_SCHEDULER はどのグループにも属しませんが、すべての項目のすべてのデータを見ることができます。

    注:

    この行のワイルドカード (文字 *) は、セクション アクセス テーブル内のすべての値のみを指します。セクション アプリケーションに、セクション アクセスの REDUCTION 項目には存在しない値がある場合、その値は削減されます。

アクセス制限の継承

注: この機能は Kubernetes では使用できません。

バイナリ ロードを使用すると、新しい Qlik Sense アプリにアクセス制限が継承されます。