オブジェクト権限とシステム権限
オブジェクト権限
オブジェクト権限とは、例えばテーブルなどのオブジェクト(非スキーマ 含む)に対する操作への権限である。
オブジェクトの種類によってオブジェクト権限の種類は異なる。
テーブルのオブジェクト権限一覧
DML 関連
DDL 関連
- ALTER (ALTER TABLE)
- DEBUG (デバッガ経由のトリガーなどへのアクセス)
- INDEX (CREATE INDEX)
- REFERENCES (表参照制約 の作成)
以上すべて
のオブジェクト権限がある。
つまり、オブジェクトに対するアクセス権のようなもので オブジェクト に対して設定する。
オブジェクト権限の付与方法
あるユーザーにオブジェクト権限を付与するには GRANT 文を使用する。
ユーザー rivus に対して my_table の SELECT 権限を付与する場合には以下のように記述する。
GRANT SELECT ON my_table TO rivus ;
↑ ON + オブジェクト名 SELECT がオブジェクト権限
システム権限
システム権限とは、Oracle を構築・運用・管理するための権限でデータベース・システムに対する操作への権限である。他の RDBMS ではステートメント権限とも呼ばれている。
システム権限の種類も非常に多く、「テーブル定義できる権限」 CREATE TABLE などがある。
テーブルのシステム権限一覧
- INSERT ANY
- SELECT ANY
- UPDATE ANY
- DELETE ANY
- FLASHBACK ANY
- LOCK ANY
- CREATE
- CREATE ANY
- ALTER ANY
- BACKUP ANY
- DROP ANY
のシステム権限がある。
例えば DELETE ANY システム権限では、管理下のデータベースにおいて全てのテーブルのレコードを削除できる権限ということになる。
データベース・システムというオブジェクトへの「強化版オブジェクト権限」と考えるとわかりやすいかもしれない。
これもステートメントによって種類が異なる。
システム権限の付与方法
あるユーザーにシステム権限を付与する場合にも GRANT 文を使用する。
ユーザー rivus に対して ALTER TABLESPACE システム権限を付与するには以下のように記述する。
GRANT ALTER TABLESPACE TO rivus ;
↑ システム権限の場合 ON 句は不要
オブジェクト権限とシステム権限の違い
まだ何だかわからないという場合には、少々乱暴だが簡単に変換すると
- オブジェクト権限はオブジェクトへの「アクセス権」の設定を行なうためのもの
- システム権限はセキュリティ・ポリシーのような、よりスケール大きな単位で「権限」を設定するもの
オブジェクトのライフサイクルを含めて「運用管理する権限」設定を行なう。
例えば オブジェクト権限でテーブルに「ALL でアクセス」できるオブジェクト権限を所有していたとしても、セッション(DBに接続できる)を生成できるシステム権限 (CREATE SESSION) を持たないユーザーはテーブルのレコードを見ることもできない。
オラクルマスター対策 Tips
オラクルマスター への対策として覚える場合には、一旦すべて ON + 知ってるスキーマ・オブジェクト としてみて理解できるかで区別すると良いだろう。
また、多くのシステム権限は ON object_name が無いために 述語+主語 の合成による権限の指定であることも覚えておくと良いかもしれない。
CATALOG_ROLE システム権限については、オブジェクト権限と表記が似ているので気をつける。
○ GRANT DELETE ON hoge TO user_name; -- 意味がある
× GRANT SELECT ANY ON hoge TO user_name; -- ANY の意味はあるか?
権限やロール関連事項