ヘッダーをスキップ
Oracle Rdb SQLリファレンス・マニュアル
リリース7.2
E06178-01
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 


RETURN制御文

ストアド・ファンクションの値を返します。

環境

RETURN制御文は、次の環境の複合文で使用できます。


形式



引数

value-expr

このファンクション・コールの結果として返される値式です。value-exprは、ストアド・ファンクションのRETURNS句で定義されたデータ型と代入互換性を持つ必要があります。

値式の詳細は、第2.6節を参照してください。


使用方法


例1: ストアド・ファンクションでのRETURN文の指定


SQL> CREATE MODULE utility_functions
cont>   LANGUAGE SQL
cont>   FUNCTION abs (IN :arg INTEGER) RETURNS INTEGER
cont>      COMMENT 'Returns the absolute value of an integer';
cont>   BEGIN
cont>      RETURN CASE
cont>             WHEN :arg < 0 THEN - :arg
cont>             ELSE :arg
cont>             END;
cont>   END;
   .
   .
   .
cont> END MODULE;


REVOKE文

データベース・オブジェクトのOracle Rdbアクセス制御リスト(ACL)のエントリから権限を削除するか、またはエントリを完全に削除します。アクセス制御リストの各エントリは、識別子(またはロール)とその識別子に割り当てられた権限のリストで構成されます。

ユーザーがデータベースで操作を実行しようとすると、SQLは、関連付けられているACLを上から下まで読み取って、そのユーザーの識別子を各エントリと比較します。SQLが最初の一致対象を見つけると、ただちにそのエントリにリストされている権限を付与して検索を中止します。前のエントリと一致しないすべての識別子はその後のエントリと比較され、一致しない場合は(失敗の結果として)エントリ[*,*]の権限がこれらの識別子に付与されます(このエントリが存在する場合)。ユーザー識別子[*,*]を持つエントリがない場合、一致していないユーザー識別子は、データベース、表または列へのすべてのアクセスを拒否されます。このため、エントリとリスト内でのその順序が重要になります。

データベース・オブジェクトのOracle Rdbアクセス制御リストでのエントリ作成またはエントリへの権限追加の詳細は、「GRANT文」を参照してください。


環境

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


形式











引数

AFTER identifier

AFTER PUBLIC

POSITION n

ACL内のエントリの位置を指定します。AFTER引数またはPOSITION引数を省略すると、SQLは、ACL全体で、REVOKE文のFROM句で指定された識別子リストと一致する識別子リストを検索します。一致対象が見つかると、SQLは、権限リストで指定された権限を削除して、ACLエントリを変更します。一致対象がない場合、SQLはエラーを生成し、REVOKE文はACLに影響しません。

AFTER引数またはPOSITION引数を使用すると、リスト内の位置を指定できます。SQLはこの位置を起点として、REVOKE文のFROM句で指定された識別子と一致する識別子を含むACLエントリを検索します。

ALL PRIVILEGES

SQLがACLエントリの権限をすべて取り消すように指定します。REVOKE ALL PRIVILEGES文は、REVOKE ENTRY文とは異なります。REVOKE ALL PRIVILEGES文では、エントリ全体はACLから削除されません。識別子は残りますが、権限は削除されます。空のACLエントリでは、識別子が一致しているユーザーのアクセスがすべて拒否されます。その後、ACLのエントリにPUBLICアクセスが付与された場合でも同様です。

ENTRY

識別子を含むエントリ全体をACLから削除します。

FROM identifier

FROM PUBLIC

変更または削除するACLエントリの識別子を指定します。PUBLICの指定は、すべてのユーザー識別子のワイルドカード指定に相当します。

次の4種類の識別子を指定できます。

複数の識別子を指定するには、各識別子をプラス記号(+)で結合します。これらの識別子は複数識別子と呼ばれます。 この識別子では、個々の識別子によって定義されたグループすべてに共通するユーザーのみが識別されます。識別子すべてと一致しないユーザーは、そのエントリによって制御されません。

たとえば、複数識別子SECRETARIES + INTERACTIVEでは、対話型プロセスの汎用識別子SECRETARIESで定義されたグループのメンバーのみが指定されます。対話型プロセスではないSECRETARIESグループのメンバーは識別されません。

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

general-identifier

システム上のユーザーのグループを識別します。この識別子は、システム権限のデータベースのOpenVMSシステム・マネージャによって定義されます。次に、汎用識別子の例を示します。

ON DATABASE ALIAS alias

ON TABLE table-name

ON COLUMN column-name

ON MODULE module-name

ON FUNCTION ext-routine-name

ON PROCEDURE ext-routine-name

ON SEQUENCE sequence-name

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

ON DATABASE ALIAS *

ON TABLE *

ON MODULE *

ON FUNCTION *

ON PROCEDURE *

ON SEQUENCE *

指定された型のすべてのオブジェクトのACLにREVOKE文を適用するかどうかを指定します。

db-privs

table-privs

column-privs

module-privs

ext-routine-privs

sequence-privs-ansi

既存のACLエントリから削除する権限のリストを指定します。特定の権限キーワードで許可される操作は、その権限がデータベース、表、列、モジュール、外部ルーチン、または順序のいずれに付与されているかで異なります。「GRANT文」表6-9には、データベース、表、モジュール、列、外部ルーチンおよび順序の権限キーワードとその意味が示されています。

列レベルで明確に付与されている列レベルの権限のみを取り消すことができます。

SELECT、INSERTおよびDELETEのデータ操作権限では、SQLは、特定の表へのアクセスを許可する前にデータベースと個々の表のACLをチェックします。たとえば、EMPLOYEES表を含むデータベースのSELECT権限が取り消されると、EMPLOYEES表自体のSELECT権限は所有していても、表の行の読取りができなくなります。

データ操作権限のUPDATEとREFERENCESを取り消すには、少なくともデータベースへの読取りアクセス権と該当する列の権限が必要です。

作成するデータベース、表、モジュール、外部ルーチンまたは順序のDBCTRL権限をユーザー自身が拒否することはできません。

SELECT権限は、他のすべての権限の前提条件です。SELECT権限を取り消すと、事実上、権限リストで指定されている権限も含めてすべての権限を拒否します。この制限によって、機能すると予想したREVOKE文が失敗する場合があります。たとえば、次のREVOKE文は、所有者のACLエントリのSELECT権限を取り消そうとしたために失敗します。この文の失敗は、表のDBCTRLを所有者に対して暗黙的に拒否したことに原因があります。


SQL> REVOKE SELECT ON EMPLOYEES FROM serle;
%RDB-E-NO_PRIV, privilege denied by database facility

role-name

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

system-identifier

システムのインストール時に権限データベースが作成される際に、OpenVMSシステムによって自動的に定義されます。システム定義識別子は、実行するログインのタイプに応じて割り当てられます。有効なすべてのシステム定義識別子を次に示します。

user-identifier

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

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

K_JONES
[SYSTEM3, K_JONES]
[341,311]

ユーザー識別子の一部としてアスタリスク(*)のワイルドカード文字を使用できます。たとえば、OpenVMSシステムの1つのグループ内のすべてのユーザーを指定する場合は、識別子として[341,*]を入力できます。

Oracle Rdbでは、データベースの作成時に識別子[*,*]を含むACLエントリが自動的に作成されます。このエントリによって、DBCTRLを除くすべての権限がすべてのユーザーに付与されます。

複数のユーザー識別子を複数識別子で使用することはできません。


使用方法

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


例1: REVOKEを使用したデータベースおよび表へのユーザー・アクセスの管理


SQL> attach 'filename DB$:MF_PERSONNEL';
SQL>
SQL> -- examine current privileges
SQL> show protection on database RDB$DBHANDLE;
Protection on Alias RDB$DBHANDLE
    (IDENTIFIER=SQLNET4RDB,ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+ALTER+
      DROP+DBCTRL+OPERATOR+DBADM+SECURITY+DISTRIBTRAN)
    (IDENTIFIER=[DOC,DOC_READER],ACCESS=SELECT+CREATE)
    (IDENTIFIER=[DOC,DOC_WRITER],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+
      ALTER+DROP+DBCTRL+OPERATOR+DBADM+REFERENCES)
    (IDENTIFIER=[*,*],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+ALTER+DROP+
      OPERATOR+DBADM+REFERENCES)
SQL>
SQL> -- revoke selected privileges
SQL> revoke CREATE on database alias RDB$DBHANDLE from DOC_WRITER;
SQL> revoke DISTRIBTRAN on database alias RDB$DBHANDLE from DOC_REVIEWER;
SQL> show protection on database RDB$DBHANDLE;
Protection on Alias RDB$DBHANDLE
    (IDENTIFIER=SQLNET4RDB,ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+ALTER+
      DROP+DBCTRL+OPERATOR+DBADM+SECURITY+DISTRIBTRAN)
    (IDENTIFIER=[DOC,DOC_READER],ACCESS=SELECT)
    (IDENTIFIER=[DOC,DOC_WRITER],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+ALTER+
      DROP+DBCTRL+OPERATOR+DBADM+REFERENCES)
    (IDENTIFIER=[*,*],ACCESS=SELECT+INSERT+UPDATE+DELETE+SHOW+CREATE+ALTER+DROP+
      OPERATOR+DBADM+REFERENCES)
SQL>
SQL> -- No longer all access to DOC_REVIEWER, use wildcard for all tables
SQL> revoke ALL PRIVILEGES on table * from DOC_REVIEWER;
SQL> commit;

例2: ユーザーのDROP順序権限の取消し


SQL> CREATE SEQUENCE EMPID;
SQL> SHOW PROTECTION ON SEQUENCE EMPID
Protection on Sequence EMPID
    (IDENTIFIER=[RDB,STUART],ACCESS=SELECT+SHOW+ALTER+DROP+DBCTRL)
    (IDENTIFIER=[*,*],ACCESS=NONE)
SQL> GRANT SELECT ON SEQUENCE EMPID TO PUBLIC;
SQL> SHOW PROTECTION ON SEQUENCE EMPID;
Protection on Sequence EMPID
    (IDENTIFIER=[RDB,STUART],ACCESS=SELECT+SHOW+ALTER+DROP+DBCTRL)
    (IDENTIFIER=[*,*],ACCESS=SELECT)
SQL> REVOKE DROP ON SEQUENCE EMPID FROM STUART;
SQL> SHOW PROTECTION ON SEQUENCE EMPID;
Protection on Sequence EMPID
    (IDENTIFIER=[RDB,STUART],ACCESS=SELECT+SHOW+ALTER+DBCTRL)
    (IDENTIFIER=[*,*],ACCESS=SELECT)


REVOKE文: ANSI/ISOスタイル

特定のユーザーがデータベース・オブジェクトに対して付与したOracle Rdbアクセス制御リストの権限を削除します。ANSI/ISOスタイルのアクセス権限セットの各エントリは、識別子とその識別子に割り当てられた権限のリストで構成されます。

ANSI/ISOスタイルのデータベースの場合、アクセス権限セットは順序に依存しません。アクセス権限セットのエントリと一致したユーザーは、データベース・オブジェクトに付与されているすべての権限およびPUBLICについて定義されている権限を取得します。アクセス権限セットにエントリがないユーザーは、PUBLICについて定義されている権限のみを取得します。PUBLIC識別子は、データベース・オブジェクトにアクセスできなくても、常にアクセス制御リストのエントリを持ちます。

データベース・オブジェクトのOracle Rdbアクセス制御リストでのエントリ作成またはエントリへの権限追加の詳細は、「GRANT文: ANSI/ISOスタイル」を参照してください。


環境

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


形式











引数

ALL PRIVILEGES

SQLがアクセス権限セットのエントリの権限をすべて取り消すように指定します。

FROM identifier-ansi-style

FROM PUBLIC

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

唯一の識別子は、OpenVMSのユーザー識別コード(UIC)に変換される識別子です。

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

ON DATABASE ALIAS alias

ON TABLE table-name

ON COLUMN column-name

ON MODULE module-name

ON FUNCTION ext-routine-name

ON PROCEDURE ext-routine-name

ON SEQUENCE sequence-name

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

ON DATABASE ALIAS *

ON TABLE *

ON MODULE *

ON FUNCTION *

ON PROCEDURE *

ON SEQUENCE *

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

db-privs-ansi

table-privs-ansi

column-privs-ansi

module-privs-ansi

ext-routine-privs-ansi

sequence-privs-ansi

既存のアクセス権限セットのエントリから削除する権限のリストを指定します。特定の権限キーワードで許可される操作は、その権限がデータベース、表、列、モジュール、ルーチン、または順序のいずれに付与されているかで異なります。「GRANT文」表6-9には、データベース、表、モジュールおよび外部ルーチンの権限キーワードとその意味が示されています。

user-identifier

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

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

K_JONES
[SYSTEM3, K_JONES]
[341,311]

Oracle Rdbでは、データベースの作成時にPUBLIC識別子を含むアクセス権限セットのエントリが自動的に作成されます。このエントリによって、DBCTRLを除くすべての権限がすべてのユーザーに付与されます。PUBLIC識別子は、アクセス権限セットのデータベースで使用可能な唯一のワイルドカードです。

複数のユーザー識別子を複数識別子で使用することはできません。


使用方法

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


例1: REVOKE文を使用したユーザー・アクセスの管理


SQL> attach 'filename DB$:ANSI_PERSONNEL';
SQL>
SQL> -- examine current privileges
SQL> show protection on database RDB$DBHANDLE;
Protection on Alias RDB$DBHANDLE
[DOC,DOC_WRITER]:
  With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN
  Without Grant Option:     SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,OPERATOR,DBADM,SECURITY,DISTRIBTRAN
[DOC,DOC_READER]:
  With Grant Option:        NONE
  Without Grant Option:     SELECT,CREATE
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     NONE
SQL>
SQL> -- revoke selected privileges
SQL> revoke CREATE on database alias RDB$DBHANDLE from DOC_READER;
SQL> revoke DISTRIBTRAN on database alias RDB$DBHANDLE from DOC_WRITER;
SQL> show protection on database RDB$DBHANDLE;
Protection on Alias RDB$DBHANDLE
[DOC,DOC_WRITER]:
  With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,OPERATOR,DBADM,SECURITY
  Without Grant Option:     SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,DROP,
                            DBCTRL,OPERATOR,DBADM,SECURITY
[DOC,DOC_READER]:
  With Grant Option:        NONE
  Without Grant Option:     SELECT
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     NONE
SQL>
SQL> -- prevent drop by revoking the privilege
SQL> revoke DROP on table * from DOC_READER;
SQL> commit;

例2: WITH GRANT OPTION句で付与された権限の取消し

WITH GRANT OPTION句で権限を付与された権限受領者rdb_docの権限が取り消されると、その権限受領者から権限を付与されたすべてのユーザーから同様にその権限が取り消されます。


SQL> SHOW PROTECTION ON TABLE EMPLOYEES;
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     SELECT
[SQL,WARRING]:
  With Grant Option:        SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,
                            DROP,DBCTRL,OPERATOR,DBADM,REFERENCES
  Without Grant Option:     SELECT,INSERT,UPDATE,DELETE,SHOW,CREATE,ALTER,
                            DROP,DBCTRL,DBADM,REFERENCES
[RDB,RDB_DOC]:
  With Grant Option:        SHOW
  Without Grant Option:     NONE
SQL>
SQL> REVOKE SHOW ON EMPLOYEES FROM [rdb,rdb_doc];
SQL> SHOW PROTECTION ON EMPLOYEES;
Protection on Table EMPLOYEES
[*,*]:
  With Grant Option:        NONE
  Without Grant Option:     SELECT
[RDB,RDB_DOC]:
  With Grant Option:        NONE
  Without Grant Option:     NONE

例3: 列の権限の取消し

この例は、特定の列に付与されているUPDATE権限を取り消すことにより、その列の権限を制限する方法を示しています。


SQL> SHOW PROTECTION ON COLUMN EMPLOYEES.EMPLOYEE_ID;
[RDB,RDB_DOC]:
  With Grant Option:        NONE
  Without Grant Option:     UPDATE
SQL> REVOKE UPDATE ON COLUMN EMPLOYEES.EMPLOYEE_ID FROM [rdb,rdb_doc];
SQL> SHOW PROTECTION ON COLUMN EMPLOYEES.EMPLOYEE_ID;
[RDB,RDB_DOC]:
  With Grant Option:        NONE
  Without Grant Option:     NONE

例4: ユーザーの順序のDROP権限の取消し

この例は、ANSIスタイルのデータベースのSEQUENCEに対するREVOKEのアクションを示しています。


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