管理の手引き


システム・カタログの使用

それぞれのデータベースについての情報は、 システム・カタログと呼ばれる 1 組の視点 (データベースが生成されるときに作成されます) の中で自動的に維持されます。 このシステム・カタログには、表、列、索引、プログラム、特権、 その他のオブジェクトが含まれています。

これらの視点のうち、以下の 6 つには、ユーザーによって保持される特権と、 それぞれの特権を付与するユーザーのアイデンティティーがリストされています。

SYSCAT.DBAUTH
データベースの特権のリスト

SYSCAT.TABAUTH
表と視点の特権のリスト

SYSCAT.COLAUTH
列の特権のリスト

SYSCAT.PACKAGEAUTH
パッケージの特権のリスト

SYSCAT.INDEXAUTH
索引の特権のリスト

SYSCAT.SCHEMAAUTH
スキーマの特権のリスト

SYSCAT.PASSTHRUAUTH
サーバーの特権のリスト

システムによってユーザーに付与される特権の付与者は、SYSIBM になります。 SYSADM、SYSMAINT および SYSCTRL はシステム・カタログにリストされます。

CREATE ステートメントと GRANT ステートメントを使うと、 システム・カタログの中に特権が入れられます。 SYSADM および DBADM 権限を持つユーザーは、 システム・カタログ視点に対する SELECT 特権の付与と取り消しを行うことができます。 次の例は、これらの SQL 照会を使って、特権に関する情報を抽出する方法を示すものです。

付与された特権を持つ許可名の検索

どれか 1 つのシステム・カタログ視点に、 すべての特権についての情報があるということはありません。 以下のステートメントは、特権を持つすべての許可名を検索します。

   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'DATABASE' FROM SYSCAT.DBAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'TABLE   ' FROM SYSCAT.TABAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'PACKAGE ' FROM SYSCAT.PACKAGEAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'INDEX   ' FROM SYSCAT.INDEXAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'COLUMN  ' FROM SYSCAT.COLAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SCHEMA  ' FROM SYSCAT.SCHEMAAUTH
   UNION
   SELECT DISTINCT GRANTEE, GRANTEETYPE, 'SERVER  ' FROM SYSCAT.PASSTHRUAUTH
   ORDER BY GRANTEE, GRANTEETYPE, 3

時折、このステートメントによって検索されたリストと、 システムの機密保護機能で定義されているユーザー名とグループ名のリストとを比較してみるべきです。 これによって、有効でなくなった許可名を識別することができます。
注:リモート・データベース・クライアントをサポートしている場合、 許可名をリモート・クライアントだけに定義し、 データベースのサーバー・マシンには定義しないということも可能です。

DBADM 権限を持つすべての名前の検索

以下のステートメントは、DBADM 権限が直接付与されている、すべての許可名を検索します。

   SELECT DISTINCT GRANTEE FROM SYSCAT.DBAUTH
      WHERE DBADMAUTH = 'Y'

表へのアクセスを許可されている名前の検索

以下のステートメントは、 修飾子 JAMES を持つ表 EMPLOYEE にアクセスすることが直接許可されている、 すべての許可名を検索します。

   SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.TABAUTH
      WHERE TABNAME = 'EMPLOYEE'
        AND TABSCHEMA = 'JAMES'
   UNION
   SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.COLAUTH
      WHERE TABNAME = 'EMPLOYEE'
        AND TABSCHEMA = 'JAMES'

だれが修飾子 JAMES を持つ表 EMPLOYEE を更新できるかを調べるためには、 以下のステートメントを出します。

   SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.TABAUTH
      WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES' AND
         (CONTROLAUTH  = 'Y' OR
          UPDATEAUTH   = 'Y' OR  UPDATEAUTH   = 'G')
   UNION
   SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.DBAUTH
      WHERE DBADMAUTH = 'Y'
   UNION
   SELECT DISTINCT GRANTEETYPE, GRANTEE FROM SYSCAT.COLAUTH
      WHERE TABNAME = 'EMPLOYEE' AND TABSCHEMA = 'JAMES' AND
      PRIVTYPE = 'U'

これは、DBADM 権限をもつ許可名があればすべて検索し、 さらに CONTROL または UPDATE 特権が直接付与されている許可名も検索します。 ただし、SYSADM 権限だけを保持しているユーザーの許可名は戻しません。

一部の許可名は、個別のユーザーだけでなく、 グループのものである場合もあることに注意してください。

ユーザーに付与されたすべての特権の検索

ユーザーは、システム・カタログ視点についての照会を行うことにより、 自ら持っている特権のリストと、他のユーザーに付与した特権のリストを作成できます。 たとえば、以下のステートメントは、 個々の許可名に直接付与されているデータベース特権のリストを検索します。

   SELECT * FROM SYSCAT.DBAUTH
      WHERE GRANTEE = USER AND GRANTEETYPE = 'U'

表の特権のうち特定のユーザーによって直接付与されたものを検索するには、 次のようなステートメントを使います。

   SELECT * FROM SYSCAT.TABAUTH
      WHERE GRANTOR  = USER

以下のステートメントは、特定のユーザーによって直接付与された、 個別の列特権のリストを検索します。

   SELECT * FROM SYSCAT.COLAUTH
      WHERE GRANTOR  = USER

このステートメントの中の USER というキーワードは、 常にユーザーの許可名の値と等しくなります。 USER は読み取り専用の特殊レジスターです。 特殊レジスターについて詳しくは、SQL 解説書 を参照してください。

システム・カタログ視点の機密保護

データベースの生成時に、 システム・カタログ視点に対する SELECT 特権が PUBLIC に付与されます。 (PUBLIC に自動的に付与される他の特権については、 データベースの特権を参照してください。) 多くの場合、このことによって機密保護上の問題が生じることはありません。 しかし、これらの表にはデータベース内のすべてのオブジェクトが含まれているため、 非常に重要なデータの場合は適切でないことがあります。 このような場合には、PUBLIC から SELECT 特権を取り消してから、 必要に応じて、特定のユーザーに対して SELECT 特権を付与することを考慮してください。 システム・カタログ視点についての SELECT 特権の付与と取り消しは、 他の視点の場合と同じ方法で行いますが、そのためには SYSADM または DBADM 権限が必要です。

少なくとも、次のカタログ視点に対するアクセスを制限することを考慮すべきです。

それによって、不法侵入のための許可名のターゲットとして使用される可能性のあるユーザー特権についての情報が、 データベースにアクセスできる人全員で利用できるような事態を避けることができます。

各列にどの統計が集められているかも調べてください (第 24 章, システム・カタログ統計を参照)。 システム・カタログに記録されている統計には、 ご使用の環境では機密情報となりうるデータ値が含まれていることもあります。 この統計に機密データが含まれている場合には、 SYSCAT.COLUMNS および SYSCAT.COLDIST カタログ視点についての SELECT 特権を、 PUBLIC から取り消すことができます。

システム・カタログ視点に対するアクセスを限定したい場合は、 それぞれの許可名が自分自身の特権にかかわる情報だけを検索できるようにする視点を定義することができます。

たとえば、次の視点 MYSELECTS には、 ユーザーの許可名に SELECT 特権が直接付与されている表の所有者と名前が含まれます。

   CREATE VIEW MYSELECTS AS
      SELECT TABSCHEMA, TABNAME FROM SYSCAT.TABAUTH
      WHERE GRANTEETYPE = 'U'
        AND GRANTEE = USER
        AND SELECTAUTH = 'Y'

このステートメントの中の USER というキーワードは、常に、許可名の値と等しくなります。

以下のステートメントは、この視点をそれぞれの許可名から利用可能にするものです。

   GRANT SELECT ON TABLE MYSELECTS TO PUBLIC

最後に、基礎表についての SELECT 特権を必ず取り消すようにしてください。

   REVOKE SELECT ON TABLE SYSCAT.TABAUTH FROM PUBLIC


[ ページのトップ | 前ページ | 次ページ | 目次 | 索引 ]