権限
権限とはデータベースにログインしたユーザに許可する操作の事です。
例えば、更新や削除は行って欲しくないというユーザには、検索の権限のみ与えるというような使い方をします。
Oracleの権限には「オブジェクト権限」と「システム権限」があります。詳しくは順を追ってみていきましょう。
オブジェクト権限
オブジェクト権限は、他人の所有しているオブジェクトに対して何ができるのかを設定します。
所有者が異なる表やビューなどのオブジェクトを参照したい場合は、その所有者から「SELECTしてもいいよ」とか「更新してもいいよ」といった権限を与えてもらう必要があります。
- 構文(ユーザにオブジェクト権限を付与する)
-
GRANT [オブジェクト権限名] ON [オブジェクト名] TO [ユーザ名 | PUBLIC] [WITH ADMIN OPTION] ;
※「PUBLIC」を指定すると全てのユーザに権限を与える意味になります。
WITH ADMIN OPTION を付けると与えた権限やロールを他のユーザやロールへ付与する権限も与えます。
オブジェクト権限をユーザではなくロールに対して付与することもできます。
- 構文(ロールにオブジェクト権限を付与する)
-
GRANT [オブジェクト権限名] ON [オブジェクト名] TO [ロール名];
| オブジェクト権限名 | 説明 |
|---|---|
| ALTER | 表や順序を変更する権限 |
| DELETE | 表のデータを削除する権限 |
| EXECUTE | プロシージャやパッケージを実行する |
| INDEX | 表に索引を作成する権限 |
| INSERT | 表にデータを挿入する権限 |
| REFERENCES | 参照整合性制約を作成する権限 |
| SELECT | 表やビューを検索する権限 |
| UPDATE | 表のデータを更新する権限 |
システム権限
システム権限は、ユーザがDBに対して何ができるのかを設定します。
この権限を与えてもらわなければ自分のオブジェクトを操作できないどころか、データベースに接続することすらできません。
システム権限は以下表のようにかなりの種類がありますので権限を与える時は、権限をロールにまとめたものをユーザに付与するのが一般的です。
権限の一覧は以下のSQLで確認できます。
- 権限の一覧を確認するSQL
- SELECT PRIVILEGE FROM SESSION_PRIVS ORDER BY PRIVILEGE;
権限の付与は以下のように実行します。
- システム権限付与の構文
-
<ユーザにシステム権限を付与する> GRANT [システム権限名] TO [ユーザ名] [WITH ADMIN OPTION]; <ロールにシステム権限を付与する> GRANT [システム権限名] TO [ロール名]; <ユーザにロールを付与する> GRANT [ロール名] TO [ユーザ名] [WITH ADMIN OPTION];
WITH ADMIN OPTION を付けると与えた権限やロールを他のユーザやロールへ付与する権限も与えます。
| システム権限名 | 説明 |
|---|---|
| ADMINISTER DATABASE TRIGGER | |
| ADMINISTER RESOURCE MANAGER | |
| ADMINISTER SECURITY | |
| ALTER ANY CLUSTER | 任意のスキーマ内のクラスタを変更する権限 |
| ALTER ANY DIMENSION | |
| ALTER ANY INDEX | 索引を変更する権限 |
| ALTER ANY INDEXTYPE | |
| ALTER ANY LIBRARY | |
| ALTER ANY OPERATOR | |
| ALTER ANY OUTLINE | |
| ALTER ANY PROCEDURE | プロシージャを変更する権限 |
| ALTER ANY ROLE | ロールを変更する権限 |
| ALTER ANY SECURITY PROFILE | |
| ALTER ANY SEQUENCE | シーケンスを変更する権限 |
| ALTER ANY SNAPSHOT | |
| ALTER ANY TABLE | 表を変更する権限 |
| ALTER ANY TRIGGER | |
| ALTER ANY TYPE | |
| ALTER DATABASE | データベースを変更する権限 |
| ALTER PROFILE | プロファイルを変更する権限 |
| ALTER RESOURCE COST | |
| ALTER ROLLBACK SEGMENT | |
| ALTER SESSION | セッションのパラメータが変更できる権限 |
| ALTER SYSTEM | |
| ALTER TABLESPACE | |
| ALTER USER | 他ユーザを変更する権限 |
| ANALYZE ANY | 表・索引を分析する権限 |
| AUDIT ANY | スキーマオブジェクトを監査する権限 |
| AUDIT SYSTEM | |
| BACKUP ANY TABLE | |
| BECOME USER | |
| COMMENT ANY TABLE | 表にコメントを作成する権限 |
| CREATE ANY CLUSTER | 任意のスキーマ内にクラスタを作成する権限 |
| CREATE ANY CONTEXT | |
| CREATE ANY DIMENSION | |
| CREATE ANY DIRECTORY | |
| CREATE ANY INDEX | 任意のスキーマ内に索引を作成する権限 |
| CREATE ANY INDEXTYPE | |
| CREATE ANY LIBRARY | |
| CREATE ANY OPERATOR | |
| CREATE ANY OUTLINE | |
| CREATE ANY PROCEDURE | 任意のスキーマ内にプロシージャを作成する権限 |
| CREATE ANY SECURITY PROFILE | |
| CREATE ANY SEQUENCE | 任意のスキーマ内に順序を作成する権限 |
| CREATE ANY SNAPSHOT | |
| CREATE ANY SYNONYM | 任意のスキーマ内に別名を作成する権限 |
| CREATE ANY TABLE | 任意のスキーマに表を作成する権限 |
| CREATE ANY TRIGGER | 任意のスキーマ内にトリガーを作成する権限 |
| CREATE ANY TYPE | |
| CREATE ANY VIEW | 任意のスキーマにビューを作成する権限 |
| CREATE CLUSTER | クラスタセグメントを作成する権限 |
| CREATE DATABASE LINK | プライベートデータベースリンクを作成する権限 |
| CREATE DIMENSION | |
| CREATE INDEXTYPE | |
| CREATE LIBRARY | |
| CREATE OPERATOR | |
| CREATE PROCEDURE | 自スキーマ内にプロシージャを作成する権限 |
| CREATE PROFILE | プロファイルを作成する権限 |
| CREATE PUBLIC DATABASE LINK | |
| CREATE PUBLIC SYNONYM | パブリックシノニムを作成するための権限 |
| CREATE ROLE | ロールを作成する権限 |
| CREATE ROLLBACK SEGMENT | |
| CREATE SECURITY PROFILE | |
| CREATE SEQUENCE | 自スキーマ内に順序を作成する権限 |
| CREATE SESSION | |
| CREATE SNAPSHOT | |
| CREATE SYNONYM | 自スキーマ内に別名を作成する権限 |
| CREATE TABLE | 自スキーマに表を作成する権限 |
| CREATE TABLESPACE | 表領域を作成する権限 |
| CREATE TRIGGER | 自スキーマにトリガーを作成する権限 |
| CREATE TYPE | |
| CREATE USER | ユーザを作成する権限 |
| CREATE VIEW | 自スキーマにビューを作成する権限 |
| DEBUG ANY PROCEDURE | |
| DEBUG CONNECT ANY | |
| DEBUG CONNECT SESSION | |
| DEBUG CONNECT USER | |
| DELETE ANY TABLE | 表・ビューの行を削除する権限 |
| DEQUEUE ANY QUEUE | |
| DROP ANY CLUSTER | クラスタを削除する権限 |
| DROP ANY CONTEXT | |
| DROP ANY DIMENSION | |
| DROP ANY DIRECTORY | |
| DROP ANY INDEX | 索引を削除する権限 |
| DROP ANY INDEXTYPE | |
| DROP ANY LIBRARY | |
| DROP ANY OPERATOR | |
| DROP ANY OUTLINE | |
| DROP ANY PROCEDURE | プロシージャを削除する権限 |
| DROP ANY ROLE | ロールを削除する権限 |
| DROP ANY SECURITY PROFILE | |
| DROP ANY SEQUENCE | シーケンスを削除する権限 |
| DROP ANY SNAPSHOT | |
| DROP ANY SYNONYM | シノニムを削除する権限 |
| DROP ANY TABLE | 表を削除する権限 |
| DROP ANY TRIGGER | トリガーを削除する権限 |
| DROP ANY TYPE | |
| DROP ANY VIEW | ビューを削除する権限 |
| DROP PROFILE | プロファイルを削除する権限 |
| DROP PUBLIC DATABASE LINK | |
| DROP PUBLIC SYNONYM | パブリックシノニムを削除する権限 |
| DROP ROLLBACK SEGMENT | |
| DROP TABLESPACE | 表領域を削除する権限 |
| DROP USER | ユーザを削除する権限 |
| ENQUEUE ANY QUEUE | |
| EXECUTE ANY INDEXTYPE | |
| EXECUTE ANY LIBRARY | |
| EXECUTE ANY OPERATOR | |
| EXECUTE ANY PROCEDURE | プロシージャを実行する権限 |
| EXECUTE ANY TYPE | |
| EXEMPT ACCESS POLICY | |
| FORCE ANY TRANSACTION | |
| FORCE TRANSACTION | |
| GLOBAL QUERY REWRITE | |
| GRANT ANY PRIVILEGE | |
| GRANT ANY ROLE | |
| INSERT ANY TABLE | 表・ビューに行を挿入する権限 |
| LOCK ANY TABLE | 表・ビューをロックする権限 |
| MANAGE ANY QUEUE | |
| MANAGE TABLESPACE | |
| ON COMMIT REFRESH | |
| QUERY REWRITE | |
| READUP | |
| READUP DBHIGH | |
| RESTRICTED SESSION | |
| RESUMABLE | |
| SELECT ANY DICTIONARY | |
| SELECT ANY SEQUENCE | シーケンスを読み込む権限 |
| SELECT ANY TABLE | 表・ビュー・スナップショットを検索する権限 |
| SYSDBA | DBの起動・停止、オブジェクトの作成など何でも出来る権限 |
| SYSOPER | DBの起動・停止はできるが、データディクショナリへはアクセス不可 |
| UNDER ANY TABLE | |
| UNDER ANY TYPE | |
| UNDER ANY VIEW | |
| UNLIMITED TABLESPACE | |
| UPDATE ANY TABLE | 表・ビューを更新する権限 |
| WRITEDOWN | |
| WRITEDOWN DBLOW | |
| WRITEUP | |
| WRITEUP DBHIGH |