TOPユーザーの管理等 > 権限/ロールの管理

権限/ロールの管理

  1. ユーザ権限の種類
  2. システム権限
  3. オブジェクト権限
  4. ロールの管理

1.ユーザ権限の種類

前項でユーザの作成をしただけでは接続もできないし、オブジェクト(表など)を作成できない事がわかりました。
ユーザを作成後、そのユーザに対するユーザ権限を設定する必要があります。
ユーザー権限とは、特定のタイプのSQL文を実行するための権利、または他のユーザーのオブジェクトへアクセスするための権利です。
権限には以下の種類があります。

システム権限
ユーザがデータベースに対して何ができるのかを定義します。データベース管理ユーザがユーザに対して権限を与えます。

オブジェクト権限
ユーザが他人の所有しているオブジェクトに対して何ができるのかを定義します。オブジェクトの所有者がユーザに対して与えます。


2.システム権限

システム権限を与えるには GRANT 文を使用します。
【構文】システム権限の付与
GRANT システム権限名 TO ユーザ名 [WITH ADMIN OPTION];

システム権限を取り消すには REVOKE 文を使用します。
【構文】システム権限の取り消し
REVOKE システム権限名 FROM ユーザ名;

システム権限名(省略不可)
付与/取り消しするシステム権限名を指定します。
付与/取り消し可能なシステム権限は以下の通りです。
ANALYZE ANALYZE ANY データベース内の任意の表、クラスタ、索引を分析する
AUDIT AUDIT ANY データベース内のスキーマ・オブジェクトを監査する
AUDIT SYSTEM 文監査オプションと権限監査オプションを使用可能、または使用禁止にする
CLUSTER CREATE CLUSTER クラスタを作成する
CREATE ANY CLUSTER 任意のスキーマ内に任意のクラスタを作成する。これはCREATE ANY TABLEの実行結果と類似している
ALTER ANY CLUSTER 任意のスキーマ内の任意のクラスタを変更する
DROP ANY CLUSTER 任意のスキーマ内の任意のクラスタを削除する
DATABASE ALTER DATABASE データベースを変更する。O/Sの権限には関係なく、Oracleを介してO/Sにファイルを追加できる
DATABASE LINK CREATE DATABASE LINK プライベート・データベース・リンクを作成する
INDEX CREATE ANY INDEX 任意のスキーマ内の任意の表に、索引を作成する
ALTER ANY INDEX 任意のスキーマ内の任意の索引を変更する
DROP ANY INDEX 任意のスキーマ内の任意の索引を削除する
LIBRARY CREATE LIBRARY コールアウト・ライブラリを作成する
CREATE ANY LIBRARY 任意のスキーマ内にコールアウト・ライブラリを作成する
DROP LIBRARY コールアウト・ライブラリを変更する
DROP ANY LIBRARY 任意のスキーマ内のコールアウト・ライブラリを削除する
PRIVILEGE GRANT ANY PRIVILEGE 任意のシステム権限を付与する(オブジェクト権限ではない)
PROCEDURE CREATE PROCEDURE プロシージャ、ファンクション、パッケージを作成する
CREATE ANY PROCEDURE 任意のスキーマ内にプロシージャ、ファンクション、パッケージを作成する。また、ユーザーはALTER ANY TABLE、またはBACKUP ANY TABLE、DROP ANY TABLE、SELECT ANY TABLE、INSERT ANY TABLE、UPDATE ANY TABLE、DELETE ANY TABLE、GRANT ANY TABLEというシステム権限を持っている必要がある
ALTER ANY PROCEDURE 任意のスキーマ内の任意のプロシージャ、ファンクション、パッケージをコンパイルする
DROP ANY PROCEDURE 任意のスキーマ内の任意のプロシージャ、ファンクション、パッケージを削除する
EXECUTE ANY PROCEDURE 任意のスキーマ内の任意のプロシージャやファンクション(スタンド・アロン・プロシージャやパッケージ・ファンクション)を実行、または任意のスキーマ内の任意のパブリック・パッケージ変数を参照する
PROFILE CREATE PROFILE プロファイルを作成する
ALTER PROFILE データベース内の任意のプロファイルを変更する
DROP PROFILE データベース内の任意のプロファイルを削除する
ALTER RESOURCE COST すべてのユーザー・セッションで使われるリソースに、コストを設定する
PUBLIC DATABASE LINK CREATE PUBLIC DATABASE LINK パブリック・データベース・リンクを作成する
DROP PUBLIC DATABASE LINK パブリック・データベース・リンクを削除する
PUBLIC SYNONYM CREATE PUBLIC SYNONYM パブリック・シノニムを作成する
DROP PUBLIC SYNONYM パブリック・シノニムを削除する
ROLE CREATE ROLE ロールを作成する
ALTER ANY ROLE データベース内の任意のロールを変更する
DROP ANY ROLE データベース内の任意のロールを削除する
GRANT ANY ROLE データベース内の任意のロールを付与する
ROLLBACK SEGMENT CREATE ROLLBACK SEGMENT ロールバック・セグメントを作成する
ALTER ROLLBACK SEGMENT ロールバック・セグメントを変更する
DROP ROLLBACK SEGMENT ロールバック・セグメントを削除する
SESSION CREATE SESSION データベースに接続する
ALTER SESSION ALTER SESSION文を発行する
RESTRICTED SESSION データベースが、STARTUP RESTICTを使って起動されてから接続する。特殊なOSOPERとOSDBAの各ロールは、この権限を含んでいる
SEQUENCE CREATE SEQUENCE 順序を作成する
CREATE ANY SEQUENCE 任意のスキーマ内に任意の順序を作成する
ALTER ANY SEQUENCE 任意のスキーマ内の任意の順序を変更する
DROP ANY SEQUENCE 任意のスキーマ内の任意の順序を削除する
SELECT ANY SEQUENCE 任意のスキーマ内の任意の順序を参照する
SNAPSHOT CREATE SNAPSHOT スナップショットを作成する(CREATE TABLE権限も持っていなければならない)
CREATE ANY SNAPSHOT 任意のスキーマ内に任意のスナップショットを作成する(CREATE ANY TABLEシステム権限も持っていなければならない)
ALTER ANY SNAPSHOT 任意のスキーマ内に任意のスナップショットを変更する
DROP ANY SNAPSHOT 任意のスキーマ内の任意のスナップショットを削除する
SYNONYM CREATE SYNONYM シノニムを作成する
CREATE ANY SYNONYM 任意のスキーマ内に任意のシノニムを作成する
DROP ANY SYNONYM 任意のスキーマ内の任意のシノニムを削除する
SYSTEM ALTER SYSTEM ALTER SYSTEM文を発行する
TABLE CREATE TABLE 表を作成する。権限受領ユーザーは、索引(整合性制約のための索引も含める)も作成できる。ただし、表領域の割当て制限、またUNLIMITED TABLESPACEシステム権限を持っていなければならない
CREATE ANY TABLE 任意のスキーマ内に、任意の表を作成する。 所有者となるユーザーのデフォルト表領域と割当て制限が使われる。その表の所有者にCREATE [ANY] TABLEシステム権限は必要はない
ALTER ANY TABLE 任意のスキーマ内の任意の表を変更、 または任意のスキーマ内の任意のビューをコンパイルする
BACKUP ANY TABLE 任意のスキーマ内の任意の表を表を、エクスポート・ユーティリティを使用して増分エクスポートを実行する
DROP ANY TABLE 任意のスキーマ内の任意の表を削除する
LOCK ANY TABLE 任意のスキーマ内の任意の表、またはビューをロックする
COMMENT ANY TABLE 任意のスキーマ内の任意の表、ビュー、列に、コメントを作成する
SELECT ANY TABLE 任意のスキーマ内の任意の表、ビュー、スナップショットを検索する
INSERT ANY TABLE 任意のスキーマ内の任意の表、またはビューに行を挿入する
UPDATE ANY TABLE 任意のスキーマ内の任意の表、またはビューで行を更新する
DELETE ANY TABLE 任意のスキーマの任意の表、またはビューから行を削除する
TABLESPACE CREATE TABLESPACE 表領域を作成する。つまり、O/Sの権限に関係なく、Oracleを介してO/Sにファイルを追加する
ALTER TABLESPACE 表領域を変更する。つまり、O/Sの権限に関係なく、Oracleを介してO/Sにファイルを追加する
MANAGE TABLESPACE 任意の表領域をオフライン、オンラインに切り替え、バックアップを開始、終了する
DROP TABLESPACE 表領域を削除する
UNLIMITED TABLESPACE 任意の表領域を無制限に使う。このシステム権限により、ユーザーに設定された表領域の割当て制限は上書きされる。このシステム権限を取り消すと、そのユーザーのスキーマ・オブジェクトはそのまま残るが、表領域の割当て制限を設定しない限り、その表領域割当ては無効になる。このシステム権限はユーザーにだけ付与され、ロールには付与できな い。通常は、このシステム権限を付与するかわりに、表領域割当て制限を設定する
TRANSACTION FORCE TRANSACTION ローカル・データベース内の、自分のインダウト分散トランザクションを強制コミットまたはロールバックする
FORCE ANY TRANSACTION ローカル・データベース内の、任意のインダウト分散トランザクションを強制コミットまたはロールバックする
TRIGGER CREATE TRIGGER データベース・トリガーを作成する
CREATE ANY TRIGGER 任意のスキーマ内の任意の表に対応するデータベース・トリガーを、任意のスキーマ内に作成する
ALTER ANY TRIGGER 任意のスキーマ内の任意のトリガーを、使用可能、使用禁止、コンパイルする
DROP ANY TRIGGER 任意のスキーマ内の任意のトリガーを削除する
USER CREATE USER ユーザーを作成する。つまり、CREATE USER文の一部として、表領域の割当て制限、デフォルト表領域や一時表領域、プロファイルを設定する
BECOME USER 別のユーザーになる(全データベース・インポートを実行するユーザーに必要)
ALTER USER ユーザーの定義を変更する。つまり、ALTER USER文で、ユーザーのパスワードまたは認証方法の変更、表領域の割当て制限の設定、デフォルト表領域および一時表領域の設定、プロファイルおよびデフォルト・ロールの割当てを実行する(自分のパスワードを変更する場合には、このシステム権限は必要ない)
DROP USER ユーザーを削除する
VIEW CREATE VIEW ビューを作成する
CREATE ANY VIEW 任意のスキーマ内に任意のビューを作成する。別のユーザーのスキーマにビューを作成するには、CREATE ANY VIEWシステム権限が必要であり、所有者はそのビューで参照されるオブジェクトに対する必要な権限がなければならない
DROP ANY VIEW 任意のスキーマ内の任意のビューを削除する

ユーザ名(省略不可)
付与/取り消し先のユーザ名を指定します。

WITH ADMIN OPTION
WITH ADMIN OPTIONを付与されると他ユーザへの権限の付与/取り消しが可能になります。

ユーザに対する権限の確認
SESSION_PRIVS ビューで確認できます。
列名 意味
PRIVILEGE 権限名

【例】権限の付与/取り消し
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production
に接続されました。

@SQL> CONNECT SYSTEM/MANAGER ←管理者で接続
接続されました。

ASQL> CREATE USER NIKA IDENTIFIED BY NIKA ←ユーザ NIKA を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  QUOTA 10M ON USERS;

ユーザーが作成されました。

BSQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
ERROR:
ORA-01045: ユーザー NIKAにはCREATE
SESSION権限がありません。ログオンが拒否されました。   ←権限がない!


警告: Oracleにはもう接続されていません。

CSQL> CONNECT SYSTEM/MANAGER ←ふたたび管理者で接続
接続されました。

DSQL> GRANT CREATE SESSION TO NIKA; ←CREATE SESSION 権限を付与

権限付与が成功しました。

ESQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

FSQL> SELECT * FROM SESSION_PRIVS; ←ビューを見てみる

PRIVILEGE
----------------------------------------
CREATE SESSION

GSQL> CREATE TABLE TSAMPLE ←テーブルを作成
  2  ( 
  3    CODE CHAR(03),
  4    NAME VARCHAR2(20)
  5  );
CREATE TABLE TSAMPLE
*
エラー行: 1: エラーが発生しました。
ORA-01031: 権限が不足しています。      ←権限がない!

HSQL> CONNECT SYSTEM/MANAGER ←ふたたび管理者で接続
接続されました。

ISQL> GRANT CREATE TABLE TO NIKA; ←CREATE TABLE 権限を付与

権限付与が成功しました。

JSQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

KSQL> SELECT * FROM SESSION_PRIVS; ←ビューを見てみる

PRIVILEGE
----------------------------------------
CREATE SESSION
CREATE TABLE

LSQL> CREATE TABLE TSAMPLE ←テーブルを作成
  2  (
  3    CODE CHAR(03),
  4    NAME VARCHAR2(20)
  5  );

表が作成されました。 ←OK!

MSQL> CONNECT SYSTEM/MANAGER ←ふたたび管理者で接続
接続されました。

NSQL> REVOKE CREATE TABLE FROM NIKA; ←CREATE TABLE権限を取り消し

取消しが成功しました。

OSQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

PSQL> SELECT COUNT(*) FROM TSAMPLE; ←TSAMPLE表は存在する

  COUNT(*)
----------
         0

QSQL> DROP TABLE TSAMPLE; ←オブジェクトの所有者は削除できる

表が削除されました。

SQL> 


3.オブジェクト権限

オブジェクト権限を与えるには GRANT 文を使用します。
【構文】オブジェクト権限の付与
GRANT オブジェクト権限名 ON オブジェクト名 TO ユーザ名 [WITH GRANT OPTION];

オブジェクト権限を取り消すには REVOKE 文を使用します。
【構文】オブジェクト権限の取り消し
REVOKE オブジェクト権限名 ON オブジェクト名 FROM ユーザ名;

オブジェクト権限名(省略不可)
付与/取り消しするオブジェクト権限名を指定します。

オブジェクト名(省略不可)
オブジェクトを指定します。

ユーザ名(省略不可)
付与/取り消し先のユーザ名を指定します。

WITH GRANT OPTION
WITH GRANT OPTIONを付与されると他ユーザへの権限の付与/取り消しが可能になります。

オブジェクト権限とオブジェクトの関係
オブジェクト権限 ビュー 順序 プロシージャ
ALTER(オブジェクトを変更)    
DELETE(行を削除)    
EXECUTE(PL/SQLプログラムを実行)      
INDEX(表に対して索引を作成)      
INSERT(行を挿入)    
REFERENCES(参照整合性制約を作成)      
SELECT(データを検索)  
UPDATE(データを更新)    

オブジェクト権限の確認
USER_TAB_PRIVS_RECD ビューで確認できます。
自分が誰の持ち物にアクセスできるかを見ることが出来ます。
列名 意味
OWNER オブジェクトの所有者
TABLE_NAME オブジェクト名
GRANTOR 権限付与を実行したユーザーの名前
PRIVILEGE オブジェクト権限の種類
GRANTABLE 権限が「GRANT OPTION」付きで付与されたかどうか

USER_TAB_PRIVS_MADE ビューで確認できます。
自分の持ち物に誰がアクセスできるかを見ることが出来ます。
列名 意味
GRANTEE オブジェクト権限を付与されたユーザーの名前
TABLE_NAME オブジェクト名
GRANTOR 権限付与を実行したユーザーの名前
PRIVILEGE オブジェクト権限の種類
GRANTABLE 権限が「GRANT OPTION」付きで付与されたかどうか

【例】
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT SYSTEM/MANAGER ←管理者で接続
接続されました。

ASQL> CREATE USER NIKA IDENTIFIED BY NIKA ←ユーザ NIKA を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  QUOTA 10M ON USERS;

ユーザーが作成されました。

BSQL> CREATE USER ALIS IDENTIFIED BY ALIS ←ユーザ ALIS を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  QUOTA 10M ON USERS;

ユーザーが作成されました。

CSQL> GRANT CREATE SESSION, CREATE TABLE TO NIKA, ALIS; ←システム権限を付与

権限付与が成功しました。

DSQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

ESQL> CREATE TABLE TSAMPLE ←テーブル TSAMPLE を作成
  2  (
  3    CODE CHAR(02),
  4    NAME VARCHAR2(20)
  5  );

表が作成されました。

FSQL> GRANT SELECT ON TSAMPLE TO ALIS; ←ユーザ ALIS に対して TSAMPLE表 の SELECT 権限を付与

権限付与が成功しました。

GSQL> SELECT * FROM USER_TAB_PRIVS_RECD; ←自分(NIKA)が誰の持ち物に対してアクセスできるか?

レコードが選択されませんでした。

HSQL> SELECT * FROM USER_TAB_PRIVS_MADE; ←自分(NIKA)の持ち物に対して誰がアクセスできるか?

GRANTEE    TABLE_NAME GRANTOR    PRIVILEGE  GRA
---------- ---------- ---------- ---------- ---
ALIS       TSAMPLE    NIKA       SELECT     NO

ISQL> CONNECT ALIS/ALIS ←ユーザ ALIS で接続
接続されました。

JSQL> SELECT COUNT(*) FROM NIKA.TSAMPLE; ←ユーザ NIKA の TSAMPLE表にアクセス

  COUNT(*)
----------
         0

LSQL> SELECT * FROM USER_TAB_PRIVS_RECD; ←自分(ALIS)が誰の持ち物に対してアクセスできるか?

OWNER         TABLE_NAME GRANTOR    PRIVILEGE  GRA
------------- ---------- ---------- ---------- ---
NIKA          TSAMPLE    NIKA       SELECT     NO

MSQL> SELECT * FROM USER_TAB_PRIVS_MADE; ←自分(ALIS)の持ち物に対して誰がアクセスできるか?

レコードが選択されませんでした。

NSQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

OSQL> REVOKE SELECT ON TSAMPLE FROM ALIS; ←ユーザ ALIS に対する TSAMPLE表の SELECT 権限の取り消し

取消しが成功しました。

PSQL> SELECT * FROM USER_TAB_PRIVS_RECD; ←自分(NIKA)が誰の持ち物に対してアクセスできるか?

レコードが選択されませんでした。

QSQL> SELECT * FROM USER_TAB_PRIVS_MADE; ←自分(NIKA)の持ち物に対して誰がアクセスできるか?

レコードが選択されませんでした。

RSQL> GRANT SELECT ON TSAMPLE TO ALIS; ←再度、ユーザ ALIS に対して TSAMPLE表 の SELECT 権限を付与

権限付与が成功しました。

SSQL> GRANT INSERT( NAME ) ON TSAMPLE TO ALIS; ←ユーザ ALIS に対して TSAMPLE表 の NAME列への INSERT 権限を付与

権限付与が成功しました。

21SQL> SELECT * FROM USER_TAB_PRIVS_RECD; ←自分(NIKA)が誰の持ち物に対してアクセスできるか?

レコードが選択されませんでした。

22SQL> SELECT * FROM USER_TAB_PRIVS_MADE; ←自分(NIKA)の持ち物に対して誰がアクセスできるか?(列の情報は出力されない)

GRANTEE    TABLE_NAME GRANTOR    PRIVILEGE  GRA
---------- ---------- ---------- ---------- ---
ALIS       TSAMPLE    NIKA       SELECT     NO

23SQL> SELECT * FROM USER_COL_PRIVS_RECD; ←自分(NIKA)が誰の持ち物に対してアクセスできるか?(列単位)

レコードが選択されませんでした。

24SQL> SELECT * FROM USER_COL_PRIVS_MADE; ←自分(NIKA)が誰の持ち物に対してアクセスできるか?(ここに出力される)

GRANTEE    TABLE_NAME COLUMN_NAME     GRANTOR    PRIVILEGE  GRA
---------- ---------- --------------- ---------- ---------- ---
ALIS       TSAMPLE    NAME            NIKA       INSERT     NO

25SQL> CONNECT ALIS/ALIS ←ユーザ ALIS で接続
接続されました。

26SQL> INSERT INTO NIKA.TSAMPLE ( NAME ) VALUES( 'Ohnuma' ); ←実際にユーザ ALIS から NIKAの TSAMPLE表へ INSERT してみる

1行が作成されました。

27SQL> SELECT * FROM NIKA.TSAMPLE; ← OK!

CO NAME
-- --------------------
   Ohnuma

SQL>


4.ロールの管理

上記までで示してきたシステム権限やオブジェクト権限をひとつづつ指定してユーザに与えて管理するのでは大変なのでロールを使用します。
ロールにはシステム権限やオブジェクト権限、ロールを設定できます。オブジェクト権限を与えるには GRANT 文を使用します。
【オラクルであらかじめ設定されているロールの種類】
CONNECTロール;
RESOURCEロール;
DBAロール;

ロールを付与するには GRANT 文を使用します。
【構文】ロールの付与
GRANT ロール名 TO ユーザ名 [WITH ADMIN OPTION];

ロールを取り消すには REVOKE 文を使用します。
【構文】ロールの取り消し
REVOKE ロール名 FROM ユーザ名;

ロール名(省略不可)
付与/取り消しするロール名を指定します。

ユーザ名(省略不可)
付与/取り消し先のユーザ名を指定します。

WITH ADMIN OPTION
WITH ADMIN OPTIONを付与されると他ユーザへのロールの付与/取り消しが可能になります。

ユーザに対するロールの確認
SESSION_ROLES ビューで確認できます。
列名 意味
ROLE 与えられているロール名

【例】ロールの操作の例
Oracle8i Enterprise Edition Release 8.1.6.0.0 - Production
With the Partitioning option
JServer Release 8.1.6.0.0 - Production

@SQL> CONNECT SYSTEM/MANAGER ←管理者で接続
接続されました。

ASQL> CREATE ROLE NIKA_ROLE; ←ロール nika_role を作成

ロールが作成されました。

BSQL> GRANT CREATE SESSION, CREATE TABLE TO NIKA_ROLE; ←ロールに nika_role にシステム権限を設定

権限付与が成功しました。

CSQL> CREATE USER NIKA IDENTIFIED BY NIKA ←ユーザ NIKA を作成
  2  DEFAULT TABLESPACE USERS
  3  TEMPORARY TABLESPACE TEMP
  4  ;

ユーザーが作成されました。

DSQL> GRANT NIKA_ROLE TO NIKA; ←ユーザ NIKA にロール nika_role を設定

権限付与が成功しました。

ESQL> CONNECT NIKA/NIKA ←ユーザ NIKA で接続
接続されました。

FSQL> SELECT * FROM SESSION_PRIVS; ←付与されているシステム権限の確認

PRIVILEGE
--------------------
CREATE SESSION
CREATE TABLE

GSQL> SELECT * FROM SESSION_ROLES; ←付与されているロールの確認

ROLE
------------------------------
NIKA_ROLE

SQL>


TOPユーザーの管理等 > 権限/ロールの管理

2001/04/24 担当:H.O
2003/02/23 更新:H.O