DB2 10.5 for Linux, UNIX, and Windows

表およびビューの特権

表およびビューの特権には、 データベース内の表やビューに対するアクションが含まれます。

次に挙げる特権のいずれかを使用するユーザーには、 データベースについての CONNECT 権限が必要です。
  • CONTROL 特権は、表やビューのドロップ、表についての個別の特権の GRANT や REVOKE を含む、表やビューに対する全ての特権を許可します。 CONTROL 特権を付与するには、ACCESSCTRL または SECADM 権限が必要です。表の作成者は、自動的にその表に対する CONTROL 特権を受け取ります。 ビューの作成者は、ビュー定義の中で参照されているすべての表、 ビュー、およびニックネームに対する CONTROL 特権を持っている場合にのみ、 自動的に CONTROL 特権を受け取ります。
  • ALTER は、ユーザーが表を変更することを許可します (例えば、 表への列またはユニーク制約の追加)。 ALTER 特権を持つユーザーは、 表または表の列に対する COMMENT ON も可能です。 表に対する実行可能な変更操作については、 ALTER TABLE および COMMENT ステートメントの説明を参照してください。
  • DELETE 特権は、表やビューからの行の削除をユーザーに許可します。
  • INDEX 特権は、表についての索引の作成をユーザーに許可します。 索引の作成者には、索引についての CONTROL 特権が自動的に与えられます。
  • INSERT 特権は、表やビューに対する行の挿入や、 IMPORT ユーティリティーの実行をユーザーに許可します。
  • REFERENCES 特権は、表に対するリレーションシップの親としての指定や、 外部キーの作成および削除をユーザーに許可します。 ユーザーは、特定の列にのみこの特権を持つことができます。
  • SELECT 特権は、表やビューからの行の取り出しや、 表に基づくビューの作成、EXPORT ユーティリティーの実行をユーザーに許可します。
  • UPDATE 特権は、表またはビューの項目の変更、 あるいは表またはビューの 1 つ以上の特定の列の中の項目の変更をユーザーに許可します。 ユーザーは、特定の列にのみこの特権を持つことができます。

GRANT ステートメントの WITH GRANT OPTION を使用して、 これらの特権を他のユーザーに GRANT する特権を GRANT することもできます。

注: ユーザーまたはグループが、ある表に対する CONTROL 特権を GRANT された場合、 その表に対する他のすべての特権は、自動的に WITH GRANT OPTION によって GRANT されます。 その後、表に対する CONTROL 特権をユーザーから取り消しても、 そのユーザーは自動的に付与された他の特権を依然として持っています。 CONTROL 特権と一緒に付与された特権をすべて取り消す場合は、 特権を個別に明示的に取り消すか、 または REVOKE ステートメントに ALL キーワードを指定しなければなりません。 以下にその例を示します。
   REVOKE ALL
     ON EMPLOYEE FROM USER HERON

型付き表に関しては、表およびビューの特権に関連したインプリメンテーションがあります。

注: 特権は、表階層の各レベルで別々に付与されます。 その結果、型付き表の階層内のスーパー表で特権を付与されたユーザーは、 副表にも間接的に影響を与えることがあります。 しかし、その副表で必要な特権が保持されている場合は、 ユーザーは副表に対する操作を直接的にしか行えません。
表階層の表の間のスーパー表/副表のリレーションシップは、SELECT、UPDATE、および DELETE などの操作が、操作のターゲット表とそのすべての副表 (あれば) の行に影響を与えることを意味します。この性質を代替性と呼ぶことができます。例えば、タイプ Manager_t の副表 Manager を持つ、タイプ Employee_t の Employee 表を作成したとします。構造化タイプ Employee_t と Manager_t 間のタイプ/サブタイプのリレーションシップ、また表 Employee と Manager 間の対応する表/副表のリレーションシップによって示されているとおり、マネージャーはある種の (特殊な) 従業員です。このリレーションシップの結果、次の SQL 照会は、
   SELECT * FROM Employee
従業員とマネージャー両方のオブジェクト ID と Employee_t 属性を戻します。 同様に、次の更新操作は、
   UPDATE Employee SET Salary = Salary + 1000
マネージャーと従業員の給与を 1000 ドル引き上げます。

Employee 表で SELECT 特権を持つユーザーは、 Manager 表で明示的な SELECT 特権を持っていなくても、この SELECT 操作を実行できます。 しかし、そのようなユーザーは、 Manager 副表に対して SELECT 操作を直接実行することは許可されませんので、 Manager 表の継承されたのではない列にアクセスすることはできません。

同様に、Employee 表で UPDATE 特権を持つユーザーは、Manager 表で明示的な UPDATE 特権がなくても、 通常の従業員とマネージャー両方に影響を与えるような、Manager に対する UPDATE 操作を実行できます。しかし、そのようなユーザーは、 Manager 副表に対して UPDATE 操作を直接実行することは許可されませんので、 Manager 表の継承されたのではない列を更新することはできません。