ヘッダーをスキップ

SQL*Plus ユーザーズ・ガイドおよびリファレンス
10g リリース2(10.2)

B19277-01
目次
目次
索引
索引

戻る 次へ

9 SQL*Plusセキュリティ

この章では、データベース表、SQL*PlusコマンドおよびiSQL*Plusコマンドへのアクセスの制御と、iSQL*Plusへのアクセスの制御に使用可能なメソッドについて説明します。ここでは、次の項目について説明します。

PRODUCT_USER_PROFILE表

SQL*Plusで、SYSTEMアカウント内の表の1つであるPRODUCT_USER_PROFILE(PUP)表を使用した製品レベルのセキュリティが提供されています。このセキュリティは、SQLのGRANTとREVOKEコマンドおよびユーザー・ロールによるユーザー・レベルのセキュリティを補います。

SQL*Plus環境では、DBAはPUP表を使用して、特定のSQLおよびSQL*Plusコマンドをユーザー単位で使用禁止にできます。OracleデータベースでなくSQL*Plusでこのセキュリティが実行されます。DBAは、GRANT、REVOKEおよびSET ROLEコマンドへのアクセスを制限して、ユーザーによる各自のデータベース権限の変更を制御することもできます。

SQL*Plusでは、ユーザーがSQL*Plusにログインすると、PUP表から制限が読み込まれ、セッションが終了するまでその制限が保持されます。PUP表の変更は、次に対象ユーザーがSQL*Plusにログインするときに有効になります。

SYSTEM、SYS、またはSYSDBAまたはSYSOPER権限で認証されたユーザーが接続またはログインする場合、SQL*PlusではPUP表は読み込まれません。そのため、これらのユーザーに制限は適用されません。

PUP表は、ローカル・データベースのみに適用されます。データベース・リンク経由でリモート・データベース上のオブジェクトにアクセスする場合、リモート・データベース用のPUP表は適用されません。リモート・データベースは、データベース・リンクからユーザー名およびパスワードを抽出して、ユーザー・プロファイルおよびユーザー権限を維持することはできません。

PUP表の作成

PUP表を作成するには、拡張子がSQLのPUPBLDという名前のスクリプトを、SYSTEMで実行します。ファイル拡張子の正確な形式およびファイルの位置は、システムによって異なります。詳細は、DBAに問い合せてください。


注意:

表の作成に誤りがある場合は、権限が付与されたユーザー以外のすべてのユーザーがOracleデータベースに接続するときに、PUP表の情報がロードされていないというアラートが表示されます。 


PUP表の構造

PUP表には、次の列が含まれています。

PRODUCT                 NOT NULL VARCHAR2 (30)
USERID                  VARCHAR2(30)
ATTRIBUTE               VARCHAR2(240)
SCOPE                   VARCHAR2(240)
NUMERIC_VALUE           NUMBER(15,2)
CHAR_VALUE              VARCHAR2(240)
DATE_VALUE              DATE
LONG_VALUE              LONG

PUP列の説明および使用方法

次に、PUP表の各列について説明します。

PUP列  説明 

PRODUCT 

製品名(この場合はSQL*Plus)が含まれている必要があります。この列には、ワイルド・カードまたはNULLは入力できません。 

USERID 

コマンドを使用禁止にする対象ユーザーのユーザー名(大文字)が含まれている必要があります。複数のユーザーのコマンドを使用禁止にするには、SQLワイルド・カード(%)を使用するか、または複数のエントリを入力します。したがって、次のエントリはすべて有効です。

  • HR

  • CLASS1

  • CLASS%(名前がCLASSで始まるすべてのユーザー)

  • %(すべてのユーザー)

 

ATTRIBUTE 

使用禁止にするSQL、SQL*PlusまたはPL/SQLコマンドの名前(大文字)が含まれている必要があります(たとえば、RUNなど)。ロールを使用禁止にする場合、文字列ROLESが含まれている必要があります。ワイルド・カードは入力できません。使用禁止にできるSQLおよびSQL*Plusコマンドのリストについては、「PUP表の管理」を参照してください。ロールを使用禁止にする方法の詳細は、「ロールの作成および制御」を参照してください。 

SCOPE 

使用されません。NULLを入力してください。他の製品では、特定のファイル制限またはその他のデータがこの列に格納されることがあります。 

NUMERIC_VALUE 

使用されません。NULLを入力してください。他の製品では、この列に数値が格納されることがあります。 

CHAR_VALUE 

SQL、SQL*PlusまたはPL/SQLコマンドを使用禁止にするには、文字列DISABLEDが含まれている必要があります。ロールを使用禁止にする場合は、使用禁止にするロールの名前が含まれている必要があります。ワイルド・カードは入力できません。ロールを使用禁止にする方法の詳細は、「SQLPLUS -RESTRICTでのコマンドの使用禁止」を参照してください。 

DATE_VALUE 

使用されません。NULLを入力してください。他の製品では、この列にDATE値が格納されることがあります。 

LONG_VALUE 

使用されません。NULLを入力してください。他の製品では、この列にLONG値が格納されることがあります。 

PUP表の管理

ユーザー名SYSTEMのDBAは、PUP表を所有し、それに関するすべての権限を持っています。他のOracleデータベースのユーザー名では、この表に対してはSELECT権限のみを持つようになります。このアクセス権限を使用すると、ユーザー名に設定された制限およびPUBLICに設定された制限を表示できます。スクリプトPUPBLD.SQLを実行すると、PUP表に対するSELECT権限がPUBLICに付与されます。

SQL*Plus、SQLおよびPL/SQLコマンドの使用禁止

特定のユーザーに対してSQLまたはSQL*Plusコマンドを使用禁止にするには、Userid列にユーザーのユーザー名、Attribute列にコマンド名およびChar_Value列にDISABLEDを入力した行を挿入します。Scope、Numeric_ValueおよびDate_Value列にはNULLを入力します。たとえば、次のように入力します。

PRODUCT    USERID  ATTRIBUTE  SCOPE   NUMBERIC    CHAR       DATE    LONG
                                      VALUE       VALUE      VALUE   VALUE
-------    ------  ---------  -----   --------    ------     -----   -----
SQL*Plus   HR      HOST                           DISABLED
SQL*Plus   %       INSERT                         DISABLED
SQL*Plus   %       UPDATE                         DISABLED
SQL*Plus   %       DELETE                         DISABLED

コマンドを再度使用可能にするには、制限を含む行を削除します。

使用禁止にできるSQL*Plusコマンド 

ACCEPT 

DEFINE 

PASSWORD 

SHUTDOWN 

APPEND 

DEL 

PAUSE 

SPOOL 

ARCHIVE LOG 

DESCRIBE 

PRINT 

START(@、@@) 

ATTRIBUTE 

DISCONNECT 

PROMPT 

STARTUP 

BREAK 

EDIT 

RECOVER 

STORE 

BTITLE 

EXECUTE 

REMARK 

TIMING 

CHANGE 

EXIT / QUIT 

REPFOOTER 

TTITLE 

CLEAR 

GET 

REPHEADER 

UNDEFINE 

COLUMN 

HELP(?) 

RUN 

VARIABLE 

COMPUTE 

HOST 

SAVE 

WHENEVER OSERROR 

CONNECT 

INPUT 

SET 

WHENEVER SQLERROR 

COPY 

LIST(;) 

SHOW 

XQUERY 

使用禁止にできるSQLコマンド 

ALTER 

DELETE 

MERGE 

SET CONSTRAINTS 

ANALYZE 

DISASSOCIATE 

NOAUDIT 

SET ROLE 

ASSOCIATE 

DROP 

PURGE 

SET TRANSACTION 

AUDIT 

EXPLAIN 

RENAME 

TRUNCATE 

CALL 

FLASHBACK 

REVOKE 

UPDATE 

COMMENT 

GRANT 

ROLLBACK 

VALIDATE 

COMMIT 

INSERT 

SAVEPOINT 

 

CREATE 

LOCK 

SELECT 

 

次に、使用禁止にできるPL/SQLコマンドを示します。

使用禁止にできるPL/SQLコマンド 

BEGIN 

DECLARE 

 

 


注意:

  • HOSTを使用禁止にすると、ご使用のオペレーティング・システムのHOSTの別名(Windows環境では$、UNIX環境では!など)も使用禁止になります。

  • LISTを使用禁止にすると、;および番号(スクリプト内の行に移動するために入力した番号)も使用禁止になります。

  • コマンドライン・ヘルプへのアクセスを禁止するには、HELPおよび?を別々に使用禁止にする必要があります。

  • SQL*PlusのSETコマンドを使用禁止にすると、SQLのSET CONSTRAINTS、SET ROLEおよびSET TRANSACTIONコマンドも使用禁止になります。

  • SQL*PlusのSTARTを使用禁止にすると、@および@@も使用禁止になります。

  • BEGINおよびDECLAREコマンドを使用禁止にしても、PL/SQLを実行するSQL*PlusのEXECUTEコマンドは使用可能です。EXECUTEを使用禁止にする場合は、別々に行ってください。

  • EXIT/QUITを使用禁止にすることはお薦めしません。使用禁止にする場合は、EOF文字(UNIXの場合はCtrl+D、Windowsの場合はCtrl+Zなど)を送信してコマンドライン・セッションを終了してください。「ファイル」→「終了」を使用して、Windows GUIセッションを終了してください。または、SQL*Plusの処理を終了してセッションを終了してください。使用禁止にすると、iSQL*Plusで実行中のスクリプトを終了するためにEXIT/QUITを使用することも禁止されます。また、使用禁止にすると、WHENEVER OSERRORおよびWHENEVER SQLERRORでのEXIT操作も禁止になります。

 

例9-1    PUP表の制限の設定

次に、PUP表に、ユーザーHRのSELECT文の使用を制限する行を挿入する例を示します。

  1. 次のコマンドを使用して、SYSTEMとしてログインします。

    SQLPLUS SYSTEM
    
    
  2. 次のコマンドを使用して、PUP表に行を挿入します。

    INSERT INTO PRODUCT_USER_PROFILE
    VALUES ('SQL*Plus', 'HR', 'SELECT', NULL, NULL, 'DISABLED', NULL, NULL);
    
    
  3. 次のようにHRで接続して、SELECTを実行します。

    CONNECT HR 
    SELECT * FROM EMP_DETAILS_VIEW; 
    
    

    このコマンドによって、次のエラー・メッセージが表示されます。

    SP2-0544: Command SELECT disabled in Product User Profile
     

  4. この行を削除し、ユーザーHRから制限を削除するには、SYSTEMで再接続し、次のように入力します。

    DELETE FROM PRODUCT_USER_PROFILE WHERE USERID = 'HR'; 
    

ロールの作成および制御

SQLコマンドを使用して、データベース表に対するセキュリティを確保するために、ロールへのアクセスを作成および制御できます。ロールを作成し、そのロールにアクセスするユーザーを制御することによって、特定のデータベース権限に特定のユーザーのみがアクセスできるようにします。

ロールは、SQLのCREATE、GRANTおよびSETコマンドで作成され、使用されます。

ロールの詳細は、『Oracle Database SQLリファレンス』、『Oracle Database管理者ガイド』および『Oracle Database概要』を参照してください。

SET ROLEの使用禁止

ユーザーは、SQL*Plusから任意のSQLコマンドを送ることができます。特定の状況下では、これはセキュリティ上の問題の原因になります。適切な予防手段を取っておかないと、ユーザーがSET ROLEを使用して、アプリケーション・ロールで取得した権限にアクセスするおそれがあります。これらの権限を使用して、ユーザーがSQL*PlusからSQL文を発行し、その結果データベース表が誤って変更されてしまう可能性があります。

アプリケーション・ユーザーによるSQL*Plus内のアプリケーション・ロールへのアクセスを防止するには、PUP表を使用して、SET ROLEコマンドを使用禁止にします。BEGINおよびSQL*PlusのEXECUTEコマンドも使用禁止にして、アプリケーション・ユーザーがPL/SQLブロックを使用してアプリケーション・ロールを設定できないようにする必要があります。これによって、SQL*Plusユーザーは、SQL*Plusの起動時に使用可能なロールに関連した権限のみを使用できるようになります。ユーザー・ロールの作成および使用方法の詳細は、『Oracle Database SQLリファレンス』および『Oracle Database管理者ガイド』を参照してください。

ユーザー・ロールの使用禁止

特定のユーザーに対して特定のロールを使用禁止にするには、Userid列にユーザーのユーザー名、Attribute列にROLESおよびChar_Value列にロール名を入れた行をPUP表に挿入します。


注意:

Userid列にPUBLICまたは%を入力する場合は、すべてのユーザーに対してロールを使用禁止にします。PUBLICに付与されるロールに対して%またはPUBLICのみを使用するようにします。ユーザーに付与されていないロールを使用禁止にしようとする場合、そのユーザーのロールはすべて使用禁止にされません。 


Scope、Numeric_ValueおよびDate_Value列にはNULLを入力します。たとえば、次のように入力します。

PRODUCT    USERID  ATTRIBUTE  SCOPE   NUMERIC     CHAR      DATE     LONG
                                      VALUE       VALUE     VALUE    VALUE
-------    ------  ---------  -----   --------    ------    -----    -----
SQL*Plus   HR      ROLES                          ROLE1
SQL*Plus   PUBLIC  ROLES                          ROLE2

ログイン時には、前述の表の行は次のコマンドに変換されます。

SET ROLE ALL EXCEPT ROLE1, ROLE2

ユーザーがログイン後にSET ROLEコマンドを使用してロールを変更できないようにするには、SET ROLEコマンドを使用禁止にします。

ロールを再度使用可能にするには、制限を含む行を削除します。

詳細は、「SET ROLEの使用禁止」を参照してください。

SQLPLUS -RESTRICTでのコマンドの使用禁止

PUP表と同様に、RESTRICTオプションで、オペレーティング・システムと対話する特定のコマンドを使用禁止にすることができます。ただし、-RESTRICTオプションで使用禁止にされたコマンドは、サーバーと接続していないときにも使用できず、SQL*Plusを終了するまで使用禁止のままです。

次の表に、各制限レベルでの使用禁止コマンドを示します。

コマンド  レベル1  レベル2  レベル3 

EDIT 

使用禁止 

使用禁止 

使用禁止 

GET 

 

 

使用禁止 

HOST 

使用禁止 

使用禁止 

使用禁止 

SAVE 

 

使用禁止 

使用禁止 

SPOOL 

 

使用禁止 

使用禁止 

START 

 

 

使用禁止 

STORE 

 

使用禁止 

使用禁止 


注意:

  • HOSTを使用禁止にすると、ご使用のオペレーティング・システムのHOSTの別名(Windows環境では$、UNIX環境では!など)も使用禁止になります。

  • SQL*PlusのSTARTコマンドを使用禁止にすると、SQL*Plusの@および@@コマンドも使用禁止になります。

 

RESTRICTオプションの詳細は、SQLPLUS「RESTRICTオプション」を参照してください。

プログラム引数のセキュリティ

オペレーティング・システムによっては、実行中のプログラムをすべてのユーザーが参照することができます。コマンドライン引数も示される場合は、SQL*Plusユーザーのユーザー名およびパスワードも表示できます。

たとえば、ほとんどのUNIXまたはLinuxシステムでは、psコマンドはプログラム引数を示します。パスワードが表示されないようにするかどうかは、SQL*Plusの使用方法によって異なります。

このようにSQL*Plusを起動した場合、SQL*Plusはusername/password@connection_identifier文字列としてスクリプトの最初の行を使用します。

ユーザー名およびパスワードは、ファイルまたはスクリプトに格納しないようにします。ユーザー名およびパスワードをファイルまたはスクリプトに格納する場合は、そのファイルまたはスクリプトが不正なアクセスから保護されていることを確認してください。

iSQL*Plusのセキュリティ

iSQL*Plusの使用時に、セキュリティとユーザー認証を考慮する必要があるのは、主に次の2つの場合です。

iSQL*Plusでは、中間層のオペレーティング・システムにアクセスして、オペレーティング・システムへのアクセスを伴うHOST、EDIT、SPOOLなどのコマンドを実行することはできません。

iSQL*Plusでは、Webブラウザとアプリケーション・サーバー間の接続に対するセキュリティは、標準のHTTPSによって提供されます。このセキュリティによって、Secure Sockets Layer(SSL)を介して、Oracleデータベース提供の暗号化メカニズムを使用した保護リスナー接続が可能になります。

iSQL*PlusサーバーとOracleデータベース間のOracle Net接続では、従来のクライアント・サーバー・アーキテクチャと同じセキュリティが提供されます。可能な場合、Oracle Net Listenerのパスワードを有効にすることをお薦めします。Oracle Net接続のセキュリティの詳細は、『Oracle Database Net Services管理者ガイド』および『Oracle Advanced Security管理者ガイド』を参照してください。

iSQL*Plusを使用したSSLの有効化

SSLを使用して、WebブラウザとiSQL*Plusアプリケーション・サーバー間の接続に対するセキュリティを有効にできます。

iSQL*Plus アプリケーション・サーバーのSSLの有効化については、iSQL*Plusを使用したSSLの有効化」を参照してください。

SSLの詳細は、『Oracle Application Server Containers for J2EEセキュリティ・ガイド』を参照してください。

管理権限

iSQL*Plusへのアクセスには、次の2つのモードがあります。

DBAアクセスの有効化

SYSDBA権限またはSYSOPER権限で接続するには、ユーザー名およびパスワードをiSQL*Plusアプリケーション・サーバーのiSQL*Plus認証ファイルに追加する必要があります。DBAアクセスの有効化については、iSQL*Plus DBAアクセスの有効化」を参照してください。

データベース・アクセス制限の有効化または無効化

データベースの制限パラメータを使用して、ユーザーがiSQL*Plusでアクセス可能なデータベースを制限します。このパラメータを指定すると、「ログイン」画面で、「接続識別子」テキスト・フィールドのかわりに、ドロップダウン・リストに使用可能なデータベースが表示されます。これによって、ホスト環境でのiSQL*Plusサーバーのセキュリティを向上させることができます。

接続識別子は、構成ファイルweb.xmlのSQLPlusConnectIdListに定義されている順に表示されます。

データベース・アクセス制限の詳細は、「データベース・アクセス制限の有効化」を参照してください。

セキュリティの使用方法

iSQL*Plusを理解して構成するために、次の注意事項を参考にしてください。


戻る 次へ
Oracle
Copyright © 2005 Oracle Corporation.

All Rights Reserved.
目次
目次
索引
索引