前項でユーザの作成をしただけでは接続もできないし、オブジェクト(表など)を作成できない事がわかりました。
ユーザを作成後、そのユーザに対するユーザ権限を設定する必要があります。
ユーザー権限とは、特定のタイプのSQL文を実行するための権利、または他のユーザーのオブジェクトへアクセスするための権利です。
権限には以下の種類があります。
システム権限
ユーザがデータベースに対して何ができるのかを定義します。データベース管理ユーザがユーザに対して権限を与えます。
オブジェクト権限
ユーザが他人の所有しているオブジェクトに対して何ができるのかを定義します。オブジェクトの所有者がユーザに対して与えます。
システム権限を与えるには GRANT 文を使用します。
【構文】システム権限の付与 |
---|
GRANT システム権限名 TO ユーザ名 [WITH ADMIN OPTION]; |
システム権限を取り消すには REVOKE 文を使用します。
【構文】システム権限の取り消し |
---|
REVOKE システム権限名 FROM ユーザ名; |
システム権限名(省略不可)
付与/取り消しするシステム権限名を指定します。
付与/取り消し可能なシステム権限は以下の通りです。
ANALYZE | ANALYZE ANY | データベース内の任意の表、クラスタ、索引を分析する |
---|---|---|
AUDIT | AUDIT ANY | データベース内のスキーマ・オブジェクトを監査する |
AUDIT SYSTEM | 文監査オプションと権限監査オプションを使用可能、または使用禁止にする | |
CLUSTER | CREATE CLUSTER | クラスタを作成する |
CREATE ANY CLUSTER |
任意のスキーマ内に任意のクラスタを作成する。これは |
|
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 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 |
データベースが、 |
|
SEQUENCE | CREATE SEQUENCE | 順序を作成する |
CREATE ANY SEQUENCE | 任意のスキーマ内に任意の順序を作成する | |
ALTER ANY SEQUENCE | 任意のスキーマ内の任意の順序を変更する | |
DROP ANY SEQUENCE | 任意のスキーマ内の任意の順序を削除する | |
SELECT ANY SEQUENCE | 任意のスキーマ内の任意の順序を参照する | |
SNAPSHOT | CREATE SNAPSHOT |
スナップショットを作成する( |
CREATE ANY SNAPSHOT |
任意のスキーマ内に任意のスナップショットを作成する( |
|
ALTER ANY SNAPSHOT | 任意のスキーマ内に任意のスナップショットを変更する | |
DROP ANY SNAPSHOT | 任意のスキーマ内の任意のスナップショットを削除する | |
SYNONYM | CREATE SYNONYM | シノニムを作成する |
CREATE ANY SYNONYM | 任意のスキーマ内に任意のシノニムを作成する | |
DROP ANY SYNONYM | 任意のスキーマ内の任意のシノニムを削除する | |
SYSTEM | ALTER SYSTEM | ALTER SYSTEM文を発行する |
TABLE | CREATE 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 |
ユーザーを作成する。つまり、 |
BECOME USER | 別のユーザーになる(全データベース・インポートを実行するユーザーに必要) | |
ALTER USER |
ユーザーの定義を変更する。つまり、 |
|
DROP USER | ユーザーを削除する | |
VIEW | CREATE 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> |
オブジェクト権限を与えるには 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> |
上記までで示してきたシステム権限やオブジェクト権限をひとつづつ指定してユーザに与えて管理するのでは大変なのでロールを使用します。
ロールにはシステム権限やオブジェクト権限、ロールを設定できます。オブジェクト権限を与えるには 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> |
2001/04/24 担当:H.O
2003/02/23 更新:H.O