IBM Support

[Db2] 制限つきデータベースで特定の表の参照権限を付与する方法

Question & Answer


Question

CREATE DATABASE コマンドの RESTRICTIVE オプションで制限つきデータベースを作成しました。
このデータベースで特定のユーザーに対して、特定の表を照会するために必要な権限を付与する方法を教えてください。

Cause

RESTRICTIVE オプションを指定してデータベースを作成すると、特殊グループ PUBLIC に対する権限や特権は付与されません。
このため、通常は PUBLIC に対して付与されているデータベースの接続特権をはじめ、個々の特権を個別に付与する必要があります。

CREATE DATABASE コマンド
RESTRICTIVE
    RESTRICTIVE パラメーターを使用すると、restrict_access データベース構成パラメーターが YES に設定されるため、特権や権限が自動的に PUBLIC に付与されることがなくなります。

Answer

RESTRICTIVE オプションと共に作成したデータベースで、特定の表を照会するには少なくとも以下の a) から d) の権限を付与する必要があります。
データベースの権限は SECADM 権限を持つユーザーで対象データベースに接続して付与 (GRANT) できます。デフォルトの SECADM は CREATE DATABASE を実行したユーザーです。
以下の「付与方法」で示されたステートメントは、SECADM 権限のユーザーでデータベースに接続後に実行します。

  1. データベースの CONNECT 権限
    接続権限がない場合、データベースのアクセスが SQL1060N で失敗します。
    付与方法
    db2 grant connect on database to user <ユーザー名>
  2. 使用するワークロードの USAGE 特権
    Db2 はすべての接続が特定のワークロードに割り当てられます。デフォルトは SYSDEFAULTUSERWORKLOAD ワークロードが割り当てられるため、このワークロードのUSAGE 特権がない場合、SQL 要求は SQL4707N で失敗します。
    付与方法
    db2 grant usage on workload SYSDEFAULTUSERWORKLOAD to user <ユーザー名>
  3. 照会対象の表への SELECT 特権
    照会の対象表への SELECT 特権がない場合、照会は SQL0551N で失敗します。
    付与方法
    db2 grant select on table <表名> to user <ユーザー名>
  4. 照会に使用するパッケージの EXECUTE 特権
    照会の発行に使用するパッケージの EXECUTE 特権を持っていない場合、照会はSQL0551N で失敗します。たとえば、Db2 のコマンド行プロセッサー (CLP) のパッケージは db2ubind.lst をバインドするときに特権が付与されます。
    個別のパッケージに EXECUTE 特権を付与することも可能ですが、SQL の構文や分離レベルに応じて異なるパッケージが使用されるため、CLP を使うのであればシステム・バインド・ファイルの一括バインドをお勧めします。
    • 個別のパッケージの実行特権付与方法
      db2 grant execute on package <パッケージ名> to user <ユーザー名>
      パッケージ名は以下の Technote に一覧されています。たとえば、Db2 V11.1 fp2 のコマンド行プロセッサー (分離レベル CS) のパッケージは SQLC2O26 です。
      DB2 v11.1 Bind File and Package Name List
      実行例
      db2 grant execute on package NULLID.SQLC2O26 to user APPUSER
    • システムパッケージの実行特権一括付与方法
      1. インスタンス・オーナーとしてデータベース・サーバーにログインします。
      2. sqllib/bnd ディレクトリーに移動します。
        cd $HOME/sqllib/bnd
      3. データベース管理者としてデータベースに接続し、バインドを実行します。
        db2 connect to <データベース名>
        db2 bind @db2ubind.lst blocking all grant public
        db2 bind @db2cli.lst blocking all grant public

運用上の考慮点

  • システム・パッケージは Db2 のバージョンやフィックスパック毎に異なります。
    データベース・サーバーと異なるバージョンやフィックスパックのクライアントから接続する場合、d) の BIND は個々のクライアントからも実行する必要があります。
  • Java や ODBC アプリケーションなどは DatabaseMetaData#getTables や SQLTables などのカタログ関数を呼び出すことがあります。
    カタログ関数を使用する場合、個々のカタログ関数から参照されるストアード・プロシージャーの EXECUTE 特権と、ストアード・プロシージャーが参照するシステム・カタログ表の SELECT 特権も別途付与する必要があります。

    例:DatabaseMetaData#getTables および SQLTables の実行権限を付与

    db2 grant execute on procedure SYSIBM.SQLTABLES to user <ユーザー名>
    db2 grant select on table SYSIBM.SYSTABLES to user <ユーザー名>
    db2 grant select on table SYSIBM.SQLTABLETYPES to user <ユーザー名>

    カタログ関数の一覧は、以下のページを参照してください。
    CLI アプリケーションでのシステム・カタログ情報の照会のためのカタログ関数
    SELECT 特権を付与する必要があるシステム・カタログ表の一覧は以下の Technote を参照してください。
    SQL0443N with -727 when calling catalog functions such as SYSIBM.SQLTABLES

関連情報
パスポート・アドバンテージによく寄せられる質問
 

お問合せ先
技術的な内容に関して、パスポート・アドバンテージの契約のもと Db2 テクニカル・サポートへお問い合わせください。
Db2 テクニカル・サポート

[{"Type":"MASTER","Line of Business":{"code":"LOB10","label":"Data and AI"},"Business Unit":{"code":"BU058","label":"IBM Infrastructure w\/TPS"},"Product":{"code":"SSEPGG","label":"Db2 for Linux, UNIX and Windows"},"ARM Category":[{"code":"a8m500000008PlOAAU","label":"Security and Plug-Ins-\u003EAuthorization and Privilege"}],"ARM Case Number":"","Platform":[{"code":"PF025","label":"Platform Independent"}],"Version":"All Versions"}]

Document Information

Modified date:
15 August 2023

UID

ibm10726097