ヘッダーをスキップ

Oracle Rdb SQLリファレンス・マニュアル リリース7.2 E06178-01 |
| 目次 | 索引

戻る | 次へ |

# GRANT文: ANSI/ISOスタイル

> データベース、表、ビュー、列、モジュール、順序またはルーチンに対するOracle Rdbアクセス権限セットのエントリに、ANSI/ISOスタイルの権限を作成または追加します。データベースの作成時点で、データベースの保護メカニズムを、ANSI/ISOスタイルのACLスタイルのどちらにするかを指定します。データベースに関連付けられた権限スタイルの作成または変更の詳細は、「CREATE DATABASE文」を参照してください。

> ANSI/ISOスタイルのアクセス権限セットの各エントリは、識別子とその識別子に割り当てられた権限のリストで構成されます。

> - 各識別子では、ユーザーまたはPUBLICアクセスを指定します。

> - 権限セットでは、データベース・オブジェクトに対してユーザーが実行可能な操作を指定します。

> ANSI/ISOスタイルの権限:

> - オブジェクトの作成時には、作成者にアクセスが付与されます。新規に作成されたオブジェクトへのアクセス権限はその作成者にのみ付与されるため、追加のアクセス権限は明示的に付与する必要があります。

> - ワイルドカードとしては、PUBLIC識別子のみがサポートされています。

> - OpenVMSユーザー識別コード（UIC）、Rdbユーザーまたはロールに変換するユーザー識別子のみがサポートされています。

> ANSI/ISOスタイルのデータベースの場合、ユーザー権限は、そのユーザーに適用されるすべての権限セットの組合せです。アクセス権限セットは順序に依存しません。アクセス権限セットのエントリと一致したユーザーは、データベース・オブジェクトに付与されているすべての権限およびPUBLICについて定義されている権限を取得します。アクセス権限セットにエントリのないユーザーには、PUBLICに定義された権限のみが付与されます。この権限は、データベース、表、列、モジュールまたは外部ルーチンへのアクセス権がPUBLICにない場合でも、常にアクセス権限セット内にエントリがあります。

> データベース・オブジェクトに対するOracle Rdbアクセス権限セットのエントリから権限を削除する場合、またはエントリを完全に削除する場合は、「REVOKE文: ANSI/ISOスタイル」を参照してください。

## 環境

> GRANT文は次の環境で使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - 非ストアドSQLモジュールの非ストアド・プロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### ALL PRIVILEGES

> SQLから指定のユーザーにすべての権限を付与するように指定します。

> ### ON DATABASE ALIAS alias

> ### ON TABLE table-name

> ### ON COLUMN column-name

> ### ON MODULE module-name

> ### ON FUNCTION routine-name

> ### ON PROCEDURE routine-name

> ### ON SEQUENCE sequence-name

> 名前付きオブジェクトのACLにGRANT文を適用するかどうかを指定します。ON句の任意の形式に対する名前のリストを指定できます。少なくとも関連表名を使用して列名を修飾する必要があります。

> ### ON DATABASE ALIAS *

> ### ON TABLE *

> ### ON MODULE *

> ### ON FUNCTION *

> ### ON PROCEDURE *

> ### ON SEQUENCE *

> 指定された型のすべてのオブジェクトのACLにGRANT文を適用するかどうかを指定します。一部のオブジェクトで操作の権限が拒否された場合、GRANTは中断されます。

> ### db-privs-ansi

> ### table-privs-ansi

> ### column-privs-ansi

> ### module-privs-ansi

> ### ext-routine-privs-ansi

> 既存のアクセス権限セット・エントリに追加する、または新規アクセス権限セット・エントリに作成する権限セットを指定します。特定の権限キーワードで許可される操作は、その権限がデータベース、表、列、モジュールまたは外部ルーチンのいずれに付与されているかで異なります。表6-9に、データベース、表および列に対する権限キーワードおよびその意味を示します。

> REFERENCES権限により、ANSI/ISOスタイルの権限のあるデータベースの制約を定義できます。

> ### role-name

> ロールの名前です。CREATE ROLE文で作成されたロール名などが該当します。オペレーティング・システムのグループまたは権利の識別子としてロール名が存在する場合、Oracle RdbではGRANT文の発行時にロールが自動的に作成されます。自動的に作成されるロールは、常にIDENTIFIED EXTERNALLYの属性を持ちます。

> ### TO identifier-ansi-style

> 新規または変更されたアクセス権限セットのエントリの識別子を指定します。PUBLICの指定は、すべてのユーザー識別子のワイルドカード指定に相当します。

> ANSI/ISOスタイルのデータベースの場合、単一ユーザーのユーザー識別子の指定のみ可能であり、一般識別子やシステム識別子は指定できません。 アクセス権限セット・エントリでは、個々の識別子によって定義されたグループすべてに共通するユーザーのみが識別されます。識別子すべてと一致しないユーザーは、そのエントリによって制御されません。ANSI/ISOスタイルのアクセス権限セットでは、ユーザー識別子のみをサポートします。

> ### user-identifier

> システム上の各ユーザーを一意に識別するユーザー識別子を指定します。

> OpenVMSでは、ユーザー識別子は、標準のOpenVMSユーザー識別コード（UIC）、グループ名およびメンバー名（ユーザー名）で構成されます。グループ名はオプションです。ユーザー識別子には、数値形式または英数字形式を使用できます。次に、同じユーザーを識別する有効なすべてのユーザー識別子を示します。

> > K_JONES
> > [SYSTEM3, K_JONES]
> > [341,311]

> Oracle RdbでANSI/ISOスタイルのデータベースを作成すると、データベースの作成者にすべての権限が付与され、PUBLICエントリには何も権限が付与されません。

> ANSI/ISOスタイルのデータベースでは、複数のユーザー識別子を使用できません。

> ANSI/ISOスタイルのユーザー識別子では、唯一使用可能なワイルドカードは、公開識別子[*,*].のものです。

> 識別子の詳細は、OpenVMSオペレーティング・システム・ドキュメントを参照してください。

> ### WITH GRANT OPTION

> 権限を付与されたユーザーによる、その権限の他のユーザーへの付与のオプションを許可します。

> WITH GRANT OPTION句では、TO句の権限受領者がその権限を保有するかぎり、権限リストにある権限を他のユーザーに付与できることを指定します。WITH GRANT OPTION句で権限を付与された権限受領者の権限が取り消されると、その権限受領者から権限を付与されたすべてのユーザーから同様にその権限が取り消されます（ただし、これらのユーザーが、その権限をまだ保持している別のユーザーからもその権限を付与されている場合は除きます）。

## 使用方法

> - ANSI/ISOスタイルのデータベース保護メカニズムの設定方法の詳細は、「CREATE DATABASE文」を参照してください。

> - GRANT（ANSI/ISOスタイル）文を使用すると、既存のアクセス権限セットのエントリを変更するか、新規エントリを作成できます。
>   既存のアクセス権限セット・エントリを変更するには、既存のエントリにある識別子と同じものをTO句で指定します。
>   新規アクセス権限セット・エントリを作成するには、エントリの一部になっていない識別子を指定します。

> - DBADMデータベース権限のあるユーザーは、オブジェクトのACLに関係なく、データベースを含めた名前付きオブジェクトに対してデータ定義やデータ操作を実行できます。DBADM権限により、Oracle Rdbで実行されるほとんどの権限チェックは無視されるため、Oracle Rdbで最も強力な権限です。DBADMデータベース権限のあるユーザーは、暗黙的にすべてのオブジェクトのすべての権限を受領します。ただし、SECURITYデータベース権限は除きます。

> - GRANT（ANSI/ISOスタイル）文は、読取り/書込みトランザクションで実行する必要があります。アクティブなトランザクションがない場合にこの文を発行すると、Oracle Rdbでは、読取り/書込みトランザクションが暗黙的に開始されます。

> - 列の権限は、特定の列アクセス権限セットに対して指定された権限との組合せで表に対して定義された権限によって決まります。

> - 表に対するUPDATEまたはREFERENCES権限のあるユーザーは、表のすべての列に対して自動的に同じ権限を取得します。UPDATEおよびREFERENCES権限では、列を更新するには列または表に対する権限が必要です。ただし、UPDATE権限とREFERENCES権限は、ユーザーによる更新または制約の定義が可能な特定の列のみを定義し、表エントリから権限を削除することによって制限できます。
>   列のデータは、列に対するUPDATE権限およびデータベースに対するSELECT権限がある場合にのみ変更できます。

> - REFERENCES権限によって制約を定義できます。

> - CREATE MODULEやALTER MODULEの一部として作成したプロシージャやファンクションに対しては、権限のGRANTを実行できません。

> - NEXTVALおよびCURRVAL疑似列を使用するには、ユーザーに順序に対するSELECT権限が必要です。

> - SECURITY CHECKING IS INTERNALである場合、Rdbでは、現在USERやROLEとして定義されていないuser-identifierまたはgeneral-identifierに対して、暗黙的にCREATE USERおよびCREATE ROLEが作成されます。

> - 実表とは異なり、一時表のデータは実際にはデータベースに格納されません。このため、一時表ではデータベースを更新しません。
>   データ操作中にセキュリティ検証を実行する場合は、一時表に関連付けられた権限のみが考慮されます。たとえば、ユーザーがデータベースにアタッチでき（SELECT権限のみ必須）、グローバル一時表またはローカル一時表に対するINSERT権限が付与されている場合、ユーザー（または実行者の権限ストアド・ルーチン）は一時表を更新できます。

> Oracle Rdbデータベースの保護の詳細は、『Oracle Rdb7 Guide to Database Design and Definition』の権限の定義に関する章を参照してください。

## 例

> 例1: ワイルドカードとしてのPUBLICの使用

> この例では、PUBLICを[*,*]に変換し、これを使用してすべてのユーザーに対してデータベースへのアクセス権を付与できることを示しています。

>     SQL> show protection on database rdb$dbhandle;
>     Protection on Alias RDB$DBHANDLE
>     [RDB,DOCS]:
>       With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
>                                 DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN
>       Without Grant Option:     NONE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     NONE
>     SQL> grant select on database alias rdb$dbhandle to public;
>     SQL> show protection on database rdb$dbhandle;
>     Protection on Alias RDB$DBHANDLE
>     [RDB,DOCS]:
>       With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
>                                 DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN
>       Without Grant Option:     NONE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     SELECT
>     SQL> commit;

> 例2: WITH GRANT OPTION句による権限の付与

> この例は、他のユーザーに対してGRANTを実行できるユーザーが付与した権限の個別のリストを、WITH GRANT OPTION句によってRdbで保持する方法を示します。この追加情報は、SHOW USERS WITHコマンドおよびSHOW USERS GRANTINGコマンドを使用した問合せです。

>     SQL> show protection on table EMPLOYEES;
>     Protection on Table EMPLOYEES
>     [RDB,DOCS]:
>       With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
>                                 DBCTRL,REFERENCES
>       Without Grant Option:     NONE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     NONE
>     SQL> grant delete on employees to freeman with grant option;
>     SQL>
>     SQL> show protection on table EMPLOYEES;
>     Protection on Table EMPLOYEES
>     [RDB,FREEMAN]:
>       With Grant Option:        DELETE
>       Without Grant Option:     NONE
>     [RDB,DOCS]:
>       With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
>                                 DBCTRL,REFERENCES
>       Without Grant Option:     NONE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     NONE
>     SQL>
>     SQL> -- Show the list of users who will loose their DELETE
>     SQL> -- privilege if the privilege is taken away from DOCS
>     SQL>
>     SQL> show users with delete on employees from DOCS;
>     Users granted privileges on table EMPLOYEES by [RDB,DOCS]
>     [RDB,FREEMAN]
>     [RDB,DOCS]
>         [RDB,FREEMAN]
>     SQL>
>     SQL> -- Check if anyone on the list has given DELETE to anyone else
>     SQL>
>     SQL> show users granting delete on employees to PUBLIC;
>     Users granting privileges on table EMPLOYEES to [*,*]
>     No users found
>     SQL>

> 例3: 列の権限の付与

> この例では、GRANT列の文の2つの形式と、ターゲットの列に対する影響を示しています。

>     SQL> -- First show existing column protections
>     SQL>
>     SQL> show protection on column CANDIDATES.FIRST_NAME;
>     Protection on Column CANDIDATES.FIRST_NAME
>     SQL> show protection on column CANDIDATES.CANDIDATE_STATUS;
>     Protection on Column CANDIDATES.CANDIDATE_STATUS
>     SQL>
>     SQL> -- Show alternate formats for the GRANT column statement
>     SQL>
>     SQL> grant update (CANDIDATE_STATUS) on table CANDIDATES to freeman;
>     SQL> grant update on column CANDIDATES.FIRST_NAME to freeman;
>     SQL>
>     SQL> -- Show the effects of the GRANT statements
>     SQL>
>     SQL> show protection on column candidates.FIRST_NAME;
>     Protection on Column CANDIDATES.FIRST_NAME
>     [RDB,FREEMAN]:
>       With Grant Option:        NONE
>       Without Grant Option:     UPDATE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     NONE
>     SQL> show protection on column candidates.CANDIDATE_STATUS;
>     Protection on Column CANDIDATES.CANDIDATE_STATUS
>     [RDB,FREEMAN]:
>       With Grant Option:        NONE
>       Without Grant Option:     UPDATE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     NONE
>     SQL>

> 例4: 順序に対する権限の付与

> この例では、順序に対してALLで付与された権限セットが、表やビューなどの他のオブジェクトに使用される権限の小規模のサブセットであることを示します。

>     SQL> create sequence EMPLOYEE_ID_GEN;
>     SQL> grant all on sequence EMPLOYEE_ID_GEN to freeman;
>     SQL> grant select on sequence EMPLOYEE_ID_GEN to public;
>     SQL> show protection on sequence EMPLOYEE_ID_GEN;
>     Protection on Sequence EMPLOYEE_ID_GEN
>     [RDB,FREEMAN]:
>       With Grant Option:        NONE
>       Without Grant Option:     SELECT,SHOW,ALTER,DROP,DBCTRL,REFERENCES
>     [RDB,DOCS]:
>       With Grant Option:        SELECT,SHOW,ALTER,DROP,DBCTRL,REFERENCES
>       Without Grant Option:     NONE
>     [*,*]:
>       With Grant Option:        NONE
>       Without Grant Option:     SELECT
>     SQL>

# GRANT文: ロール

> ユーザー、別のロールまたはPUBLICユーザーにロールを付与します。

## 環境

> GRANT文は次の環境のロールで使用できます。

> - 対話型SQL内

> - プリコンパイル対象のホスト言語プログラムに埋め込まれる場合

> - 非ストアドSQLモジュールの非ストアド・プロシージャの一部として

> - 動的SQLで動的に実行される文として

## 形式

## 引数

> ### role-name

> 以前にCREATE ROLE文で作成されたロールの名前です。オペレーティング・システムのグループまたは権利の識別子としてロール名が存在する場合、GRANT文が発行されると、Oracle Rdbではロールが自動的に作成されます。自動的に作成されるロールは、常にIDENTIFIED EXTERNALLYの属性を持ちます。

> ### TO username

> ### TO role-name

> ### TO PUBLIC

> ロールが付与されるユーザー名、ロール名またはPUBLICユーザーを指定します。PUBLICユーザーとは、データベースにアクセスするすべての匿名ユーザーに関連付けられたユーザー名です。

> ユーザー名またはロール名がオペレーティング・システム・ユーザーまたは権利の識別子として存在する場合、GRANT文が発行されると、Oracle Rdbではユーザー名またはロール名が自動的に作成されます。自動的に作成されるロールはIDENTIFIED EXTERNALLYです。

## 使用方法

> - ユーザーまたは別のロールにロールを付与するには、データベースに対するSECURITY権限が必要です。

> - 付与されるロールには、暗黙的にも明示的にもそのロールを付与できません。つまり、ロールはそのロール自体には付与できません。

## 例

> 例1: ロールの付与および取消し

>     SQL> -- Create three users and two roles. Oracle Rdb automatically
>     SQL> -- generates users and roles if they are identified externally.
>     SQL> CREATE USER ABLOWNEY IDENTIFIED EXTERNALLY;
>     SQL> CREATE USER BGREMBO IDENTIFIED EXTERNALLY;
>     SQL> CREATE USER LWARD IDENTIFIED EXTERNALLY;
>     SQL> CREATE ROLE SALES_MANAGER IDENTIFIED EXTERNALLY;
>     SQL> CREATE ROLE DIVISION_MANAGER IDENTIFIED EXTERNALLY;
>     SQL> -- Grant the SALES_MANAGER role to users ABLOWNEY,
>     SQL> -- BGREMBO, and to the DIVISION MANAGER ROLE.
>     SQL> GRANT SALES_MANAGER TO ABLOWNEY, BGREMBO, DIVISION_MANAGER;
>     SQL> -- Grant the DIVISION_MANAGER role to LWARD. LWARD now
>     SQL> -- has both the SALES_MANAGER and DIVISION_MANAGER roles.
>     SQL> GRANT DIVISION_MANAGER TO LWARD;
>     SQL> -- Revoke the DIVISION_MANAGER role from LWARD. He has
>     SQL> -- left the company.
>     SQL> REVOKE DIVISION_MANAGER FROM LWARD;
>     SQL> -- Grant the DIVISION_MANAGER role to BGREMBO.  She
>     SQL> -- has been promoted to division manager.
>     SQL> GRANT DIVISION_MANAGER TO BGREMBO;