GRANT (セキュリティー・ラベル) ステートメント
この形式の GRANT ステートメントは、読み取りアクセス、書き込みアクセス、または読み取りアクセスと書き込みアクセスの両方に対する、 ラベル・ベースのアクセス制御 (LBAC) セキュリティー・ラベルをユーザー、グループ、またはロールに認可します。
呼び出し
このステートメントは、アプリケーション・プログラムに組み込んだり、動的 SQL ステートメントを使用して発行したりすることができます。 これは、DYNAMICRULES の実行動作がパッケージに効力を持つ場合にのみ、動的に準備できる実行可能ステートメントです (SQLSTATE 42509)。
許可
このステートメントの許可 ID が持つ特権には、SECADM 権限が含まれている必要があります。
構文
説明
- SECURITY LABEL security-label-name
- セキュリティー・ラベル security-label-name を認可します。 名前は、セキュリティー・ポリシーで修飾する必要があり (SQLSTATE 42704)、現在のサーバー上に存在するセキュリティー・ラベルを識別していなければなりません (SQLSTATE 42704)。
- TO
- 指定されたセキュリティー・ラベルを付与する対象のユーザーを指定します。
- USER
- authorization-name がユーザーであることを指定します。
- GROUP
- authorization-name がグループ名であることを指定します。
- ROLE
- authorization-name がロール名であることを指定します。 ロール名は、現行サーバーに存在するものでなければなりません (SQLSTATE 42704)。
- authorization-name,...
- 1 つ以上のユーザー、グループ、またはロールの許可 ID のリストを指定します。
- FOR ALL ACCESS
- 読み取りアクセスおよび書き込みアクセスの両方に対してセキュリティー・ラベルを認可することを指示します。
- FOR READ ACCESS
- 読み取りアクセスに対してのみセキュリティー・ラベルを認可することを指示します。
- FOR WRITE ACCESS
- 書き込みアクセスに対してのみセキュリティー・ラベルを認可することを指示します。
規則
- 指定したそれぞれの authorization-name に関して、USER、GROUP、ROLE のいずれも指定されていない場合には、次のようになります。
- インスタンスに対して有効なセキュリティー・プラグインによって authorization-name の状況を判別できなければ、エラーが戻されます (SQLSTATE 56092)。
- authorization-name がデータベースでは ROLE として定義され、有効なセキュリティー・プラグインでは GROUP または USER のいずれかとして定義されている場合には、エラーが戻されます (SQLSTATE 56092)。
- 有効になっているセキュリティー ・プラグインに従って authorization-name が USER と GROUP の両方として定義されている場合、 エラーが戻されます (SQLSTATE 56092)。
- 有効になっているセキュリティー ・プラグインに従って authorization-name が USER としてのみ定義されている場合、または未定義の場合、USER であると見なされます。
- 有効になっているセキュリティー ・プラグインに従って authorization-name が GROUP としてのみ定義されている場合、GROUP であると見なされます。
- authorization-name がデータベースで ROLE としてのみ定義されている場合には、ROLE であると見なされます。
- どのセキュリティー・ポリシーの場合でも、 authorization-nameに認可されるそのポリシーのセキュリティー・ラベルの数は、読み取りアクセスの場合は最大 1 つ、書き込みアクセスの場合は 1 つです。指示されたアクセス・タイプ (読み取りまたは書き込み) に対するセキュリティー・ラベルを被認可者が既にもっている場合に、そのラベルが、security-label-name を修飾するセキュリティー・ポリシーの一部をなしていると、エラーが戻されます (SQLSTATE 428GR)。
- セキュリティー・ポリシーがグループまたはロールを介してアクセスを考慮するように定義されていない場合、 グループまたはロールに付与されたセキュリティー・ラベルはアクセスが試行されるときに無視されます。
- 読み取りアクセスおよび書き込みアクセスに対してそれぞれ異なるセキュリティー・ラベルを authorization-name が保有している場合、
それらのセキュリティー・ラベルは、以下の基準を満たす必要があります (SQLSTATE 428GQ)。
- セキュリティー・ラベル内のいずれかのコンポーネントがタイプ ARRAY である場合、そのコンポーネントの値は、両方のセキュリティー・ラベル内で同じでなければなりません。
- セキュリティー・ラベル内のいずれかのコンポーネントがタイプ SET である場合、書き込みセキュリティー・ラベル内のそのコンポーネントの値内の各エレメントは、読み取りセキュリティー・ラベル内のそのコンポーネントの値の一部でもある必要があります。
- セキュリティー・ラベル内のいずれかのコンポーネントがタイプ TREE である場合、書き込みセキュリティー・ラベル内のそのコンポーネントの値内の各エレメントは、読み取りセキュリティー・ラベル内のその同じコンポーネントの値内の同じエレメントであるか、またはエレメントのうちの 1 つの下層エレメントである必要があります。
注
- デフォルトでは、セキュリティー・ポリシーの作成時には、個々のユーザーに付与されたセキュリティー・ラベルのみが考慮されます。セキュリティー・ポリシーでグループまたはロールが考慮されるようにするには、ALTER SECURITY POLICY ステートメントを発行し、必要に応じて USE GROUP AUTHORIZATION または USE ROLE AUTHORIZATION を指定しなければなりません。
例
以下のステートメントは、2 つのセキュリティー・ラベルをユーザー GUYLAINE に認可します。
セキュリティー・ラベル EMPLOYEESECLABELREAD が読み取りアクセスに対して認可され、セキュリティー・ラベル EMPLOYEESECLABELWRITE が書き込みアクセスに対して認可されます。
どちらのセキュリティー・ラベルも、セキュリティー・ポリシー DATA_ACCESS に属します。
GRANT SECURITY LABEL DATA_ACCESS.EMPLOYEESECLABELREAD
TO USER GUYLAINE FOR READ ACCESS
GRANT SECURITY LABEL DATA_ACCESS.EMPLOYEESECLABELWRITE
TO USER GUYLAINE FOR WRITE ACCESS次に、同じユーザーに対して、読み取りアクセスと書き込みアクセスの両方に対するセキュリティー・ラベル BEGINNER が認可されます。
これはエラーの原因にはなりません。BEGINNER はセキュリティー・ポリシー CLASSPOLICY の一部であり、既に保有されているセキュリティー・ラベルはセキュリティー・ポリシー DATA_ACCESS の一部であるためです。
GRANT SECURITY LABEL CLASSPOLICY.BEGINNER
TO USER GUYLAINE FOR ALL ACCESS