11.2 データベース・コンテンツとOracle JVMセキュリティ
データベースに接続した後も、データベースに格納されたリソースにアクセスするには、適切なJava 2セキュリティの許可とデータベース権限が必要になります。該当するリソースには、次のようなものがあります。
-
表やPL/SQLパッケージなどのデータベース・リソース
-
ファイルやソケットなどのオペレーティング・システム・リソース
-
Oracle JVMクラス
-
ユーザーによってロードされたクラス
これらのリソースは次の方式で保護されます。
注意:
-
Oracle JVMは、出荷時の状態では、JDK1.5およびJDK 6に含まれる制限付きの強い暗号化を使用しています。アプリケーションで無制限強度の暗号化を使用するには、適切なバージョン固有のファイルを次のWebサイトからダウンロードし、インストールする必要する必要があります。
http://www.oracle.com/technetwork/indexes/downloads/index.html
-
権限の付与または取消しに使用されるOracle JVMクラスは、サーバー上でのみ実行できます。
この項の内容は次のとおりです。
関連項目:
11.2.1 Java 2セキュリティ機能の概要
各ユーザーまたはスキーマには、ソケット、ファイルおよびシステム・プロパティなどのオペレーティング・システム・リソースにアクセスするための適切なパーミッションを割り当てる必要があります。
Java 2セキュリティは、Javaアプリケーションに柔軟で構成可能なセキュリティを提供します。Java 2セキュリティでは、ロードされた各オブジェクトについてスキーマまたはロールに付与する許可を正確に定義できます。Oracle8i リリース8.1.5では、次の保護ロールを使用できます。
-
JAVAUSERPRIV
プロパティの検査を含むいくつかのパーミッション
-
JAVASYSPRIV
Oracle JVMの保護パッケージの更新を含む主要なパーミッション
注意:
このリリースでは下位互換性を維持するために前述の2つのロールが残されています。しかし、これらは使用せずに、各パーミッションを明示的に指定することをお薦めします。
Oracle JVMセキュリティはJava 2セキュリティに基づいているため、クラスに対する許可はクラス単位で割り当てます。これらのパーミッションは、データベース管理ツールを使用して割り当てられます。各パーミッションは、Permission
オブジェクトにカプセル化され、Permission
表に格納されます。Permission
には、String
値を取る、target
属性とaction
属性が含まれます。
Java 2セキュリティはデータベースを対象に作成されていません。Java 2セキュリティ・モデルをデータベース内で適用すると、いくつかの相違が明らかになります。たとえば、Java 2セキュリティでは、すべてのアプレットは暗黙的に信頼がおけないと定義され、CLASSPATH
内のクラスはすべて信頼できると定義されます。Oracle Databaseでは、すべてのクラスがセキュアなデータベースにロードされます。このため、信頼できるクラスとして処理されません。
次の表で、標準のJava 2セキュリティとOracle Databaseのセキュリティ実装の違いを説明します。
11.2.2 パーミッションの設定の概要
Java 2セキュリティと同様に、Oracle Databaseはセキュリティ・クラスをサポートしています。通常は、ツールを使用するか、またはセキュリティ・ポリシー・ファイルを編集して、コード・ベースにパーミッションを設定します。Oracle Databaseでは、データベースのポリシー表を変更するDBMS_JAVA
プロシージャを使用して、パーミッションを動的に設定します。
ポリシー表を表示するために、USER_JAVA_POLICY
とDBA_JAVA_POLICY
の2つのビューが用意されています。いずれのビューにも、付与されているパーミッションと制限パーミッションに関する情報が含まれています。DBA_JAVA_POLICY
ビューにはポリシー表内のすべての行が表示されます。USER_JAVA_POLICY
ビューには現行ユーザーに関連するパーミッションのみが表示されます。次に、各ビューに表示される行について説明します。
パーミッションを設定するには、次の2つの方法があります。
注意:
完全なセキュリティ設定を確保するには、ファイングレイン定義を実装してください。一般的な定義の方が実装は簡単ですが、必要なレベルのセキュリティ設定を得られない場合があります。
11.2.2.1 各パーミッションのファイングレイン定義
ファイングレイン定義を使用して、特定のユーザーまたはロールに対してパーミッションを個別に付与できます。アクセスするためのパーミッションを付与しないと、そのスキーマでのアクセスは拒否されます。ポリシー表に個別にパーミッションを設定するには、次の情報を指定する必要があります。
11.2.2.1.1 パーミッションの付与と制限
パーミッションは、SQLまたはJavaのいずれかを使用して付与できます。いずれの場合もパーミッション表内の行を識別する行キー識別子が戻されます。DBMS_JAVA
のJavaバージョンでは、各メソッドによって、行キー識別子が戻りパラメータまたはパラメータ・リストのOUT
変数として戻されます。PL/SQLのDBMS_JAVA
パッケージでは、行キーはkey OUT
パラメータを定義するプロシージャでのみ戻されます。このキーを使用して、特定のパーミッションを使用可能または使用禁止にします。
権限付与を実行した後、該当のパーミッション用に行がすでに存在している場合、更新は発生しませんが、その行のキーが戻されます。行が使用禁止になっている場合は、権限付与を実行すると既存の行が使用可能になります。
注意:
FilePermission
を付与する場合は、/private/oracle
のように、ディレクトリまたはファイルの物理的な名前を指定する必要があります。$ORACLE_HOME
などの環境変数、またはシンボリック・リンクは指定できません。ディレクトリ内のすべてのファイルを示すには、次のように「*
」記号を指定します。
/private/oracle/*
ディレクトリ内のすべてのディレクトリとファイルを示すには、次のように「-
」記号を指定します。
/private/oracle/-
DBMS_JAVA
パッケージを使用してパーミッションを付与するには、次のように記述します。
procedure grant_permission ( grantee varchar2, permission_type varchar2, permission_name varchar2, permission_action varchar2 ) procedure grant_permission ( grantee varchar2, permission_type varchar2, permission_name varchar2, permission_action varchar2, key OUT number)
Javaを使用してパーミッションを付与するには、次のように記述します。
long oracle.aurora.rdbms.security.PolicyTableManager.grant ( java.lang.String grantee, java.lang.String permission_type, java.lang.String permission_name, java.lang.String permission_action); void oracle.aurora.rdbms.security.PolicyTableManager.grant ( java.lang.String grantee, java.lang.String permission_type, java.lang.String permission_name, java.lang.String permission_action, long[] key);
DBMS_JAVA
パッケージを使用してパーミッションを制限するには、次のように記述します。
procedure restrict_permission ( grantee varchar2, permission_type varchar2, permission_name varchar2, permission_action varchar2) procedure restrict_permission ( grantee varchar2, permission_type varchar2, permission_name varchar2, permission_action varchar2, key OUT number)
Javaを使用してパーミッションを制限するには、次のように記述します。
long oracle.aurora.rdbms.security.PolicyTableManager.restrict ( java.lang.String grantee, java.lang.String permission_type, java.lang.String permission_name, java.lang.String permission_action); void oracle.aurora.rdbms.security.PolicyTableManager.restrict ( java.lang.String grantee, java.lang.String permission_type, java.lang.String permission_name, java.lang.String permission_action, long[] key);
例11-1に、grant_permission()
メソッドを使用してパーミッションを付与する方法を示します。例11-2に、restrict()
メソッドを使用してパーミッションを制限する方法を示します。
ここでの各例では、次のアクションを実行します。
-
すべてのユーザーに、
/tmp
内のすべてのファイルに対する読取り/書込みのパーミッションを付与します。 -
すべてのユーザーについて、
/tmp
内のpassword
ファイルに対する読取り/書込みを制限します。 -
Larry
にpassword
ファイルに対する読取り/書込みの明示的なパーミッションを付与します。
例11-1 パーミッションの付与
ポリシー表を変更するための適切なパーミッションがあることを前提とすると、DBMS_JAVA
パッケージ内にあるgrant_permission()
メソッドを使用してPolicyTable
を変更し、指定ファイルへのユーザー・アクセスを許可できます。この例のユーザーLarry
は、PolicyTable
を変更するパーミッションを持っています。SQLパッケージ内で、Larry
は、次のように、ユーザーDave
に対してファイルの読取り/書込みのパーミッションを付与できます。
connect larry
Enter password: password
REM Grant DAVE permission to read and write the Test1 file.
call dbms_java.grant_permission('DAVE', 'java.io.FilePermission', '/test/Test1', 'read,write');
REM commit the changes to PolicyTable
commit;
例11-2 パーミッションの制限
一般的な規則に対する制限または例外を指定するには、restrict()
メソッドを使用できます。一般的な規則とは、ほとんどの場合、パーミッションがtrueの状態(付与されている)の規則を指します。ただし、この規則には例外がある場合があります。この例外に対して、制限パーミッションを指定します。
ディレクトリ全体に対して読取りまたは書込みを禁止する一般的な規則を定義してある場合は、restrict()
メソッドを使用してこの規則の一部を制限するように定義できます。たとえば、/tmp
ディレクトリに格納されている自分のパスワード・ファイルを除いて、このディレクトリ内のすべてのファイルへのアクセスを許可するには、/tmp
ディレクトリ内のすべてのファイルに対する読取り/書込みのパーミッションを付与した後、パスワード・ファイルに対する読取り/書込みアクセスを制限します。
制限に対する例外を指定する場合は、明示的な権限付与パーミッションを作成して制限パーミッションをオーバーライドする必要があります。前述の例では、ファイルの所有者がパスワードファイルを変更できるようにするには、1人のユーザーに対して、アクセスを許可するためのさらに明示的なパーミッションを付与することによって、制限をオーバーライドできます。Oracle JVMセキュリティではすべての規則を考慮して、パスワード・ファイルへのアクセス権を持つユーザーを判断します。次の図にこれを示します。
明示的な規則は次のとおりです。
制限パーミッションに暗黙的な要求が含まれている場合に、付与パーミッションを有効にするには、その制限パーミッションにも暗黙的な付与が含まれている必要があります。
次に、この例を実装するコードを示します。
connect larry
Enter password: password
REM Grant permission to all users (PUBLIC) to be able to read and write
REM all files in /tmp.
call dbms_java.grant_permission('PUBLIC', 'java.io.FilePermission', '/tmp/*', 'read,write');
REM Limit permission to all users (PUBLIC) from reading or writing the
REM password file in /tmp.
call dbms_java.restrict_permission('PUBLIC', 'java.io.FilePermission', '/tmp/password', 'read,write');
REM By providing a more specific rule that overrides the limitation,
REM Larry can read and write /tmp/password.
call dbms_java.grant_permission('LARRY', 'java.io.FilePermission', '/tmp/password', 'read,write');
commit;
11.2.2.1.2 ポリシー表を更新するための管理パーミッションの取得
すべてのパーミッションはPolicyTable
内の行です。ポリシー表はデータベース内の表であるため、変更には適切なパーミッションが必要です。特に、PolicyTablePermission
オブジェクトは表を変更するために必要です。Oracle JVMを初期化した後、PolicyTablePermission
を付与されたJAVA_ADMIN
ロールのみがPolicyTable
を変更できます。データベース管理者(DBA)にはただちにJAVA_ADMIN
ロールが割り当てられます。したがって、DBAグループに割り当てられているユーザーは、JAVA_ADMIN
の全パーミッションを自動的に取得できます。
この表にパーミッションを行として追加する必要がある場合は、JAVA_ADMIN
によって、PolicyTablePermission
を使用してスキーマに更新権限が付与されている必要があります。このパーミッションは、スキーマが表に行を追加できるように定義します。各PolicyTablePermission
は、特定のパーミッション・タイプに対応しています。たとえば、あるファイルへのアクセスを制御するパーミッションを追加するには、FilePermission
に対するパーミッションを付与または制限できるPolicyTablePermission
が必要です。一度これを実行すると、FilePermission
に対する管理パーミッションを持つことができます。
管理者は、他のパーミッションと同様の方法でPolicyTablePermission
を付与または制限できますが、構文は複雑になります。使いやすくするため、grant_policy_permission()
またはgrantPolicyPermission()
メソッドを使用して、管理パーミッションを付与できます。
DBMS_JAVA
を使用してポリシー表の管理パーミッションを付与するには、次のように記述します。
procedure grant_policy_permission ( grantee varchar2, permission_schema varchar2, permission_type varchar2, permission_name varchar2 ) procedure grant_policy_permission ( grantee varchar2, permission_schema varchar2, permission_type varchar2, permission_name varchar2, key OUT number )
Javaを使用してポリシー表の管理パーミッションを付与するには、次のように記述します。
long oracle.aurora.rdbms.security.PolicyTableManager.grantPolicyPermission (java.lang.String grantee, java.lang.String permission_schema, java.lang.String permission_type, java.lang.String permission_name); void oracle.aurora.rdbms.security.PolicyTableManager.grantPolicyPermission (java.lang.String grantee, java.lang.String permission_schema, java.lang.String permission_type, java.lang.String permission_name, long[] key);
注意:
ポリシー表のPolicyTablePermission
行の名前には、#
で区切られたパーミッション・タイプとパーミッション名の両方が含まれています。たとえば、ファイルを読み取るための管理権限をユーザーに付与する場合は、この行の名前にjava.io.FilePermission#read
を含めます。Permission
クラスとパーミッション名は#
で区切ります。
例11-3に、PolicyTable
の変更方法を示します。
例11-3 PolicyTableパーミッションの付与
この例では、JAVA_ADMIN
ロールが割り当てられているSYS
が、Larry
に、FilePermission
についてPolicyTable
を更新するパーミッションを付与します。このパーミッションが付与されると、Larry
は他のユーザーにファイルの読取り、書込みおよび削除のパーミッションを付与できます。
REM Connect as SYS, which is assigned JAVA_ADMIN role, to give Larry permission
REM to modify the PolicyTable
connect SYS as SYSDBA
Enter password: password
REM SYS grants Larry the right to administer permissions for
REM FilePermission
call dbms_java.grant_policy_permission('LARRY', 'SYS', 'java.io.FilePermission', '*');
11.2.2.1.4 パーミッションの使用可能または使用禁止
パーミッションを定義する行を作成した場合は、その行が適用されないように使用禁止にできます。ただし、行アクションを再度実行する場合には、その行を使用可能にできます。不要になった行は表から削除できます。行を削除するには、最初にその行を使用禁止にする必要があります。行を使用禁止にしないと、削除できません。
行を使用禁止にするには、次のいずれかのメソッドを使用できます。
-
revoke_permission()
このメソッドには、
grant()
メソッドおよびrestrict()
メソッドと同じパラメータを指定します。これは、指定されたパラメータと一致するすべての行をポリシー表全体で検索します。 -
disable_permission()
このメソッドは、ポリシー表の1行のみを使用禁止にします。そのためには、パラメータとしてこのメソッドにポリシー表のキーを指定します。このキーは、パーミッションを使用可能にしたり、削除する場合にも必要になります。パーミッションのキー番号を取り出すには、次のいずれかを実行します。
DBMS_JAVA
を使用してパーミッションを使用禁止にするには、次のように記述します。
procedure revoke_permission (grantee varchar2, permission_type varchar2, permission_name varchar2, permission_action varchar2) procedure disable_permission (key number)
Javaを使用してパーミッションを使用禁止にするには、次のように記述します。
void oracle.aurora.rdbms.security.PolicyTableManager.revoke (java.lang.String grantee, java.lang.String permission_type, java.lang.String permission_name, java.lang.String permission_action_type); void oracle.aurora.rdbms.security.PolicyTableManager.disable (long key);
DBMS_JAVA
を使用してパーミッションを使用可能にするには、次のように記述します。
procedure enable_permission (key number)
Javaを使用してパーミッションを使用可能にするには、次のように記述します。
void oracle.aurora.rdbms.security.PolicyTableManager.enable (long key);
DBMS_JAVA
を使用してパーミッションを削除するには、次のように記述します。
procedure delete_permission (key number)
Javaを使用してパーミッションを削除するには、次のように記述します。
void oracle.aurora.rdbms.security.PolicyTableManager.delete (long key);
11.2.2.1.5 パーミッション・タイプについて
パーミッションを付与または制限する場合は、パーミッション・タイプを指定する必要があります。アクセス制御に使用できるパーミッション・タイプは次のとおりです。
-
Java 2のパーミッション・タイプ
-
Oracle固有のパーミッション・タイプ
-
java.security.Permission
を拡張するユーザー定義のパーミッション・タイプ
表11-1は、インストールされているパーミッション・タイプの一覧です。
表11-1 事前定義のパーミッション
タイプ | パーミッション |
---|---|
Java 2 |
|
Oracle固有 |
|
注意:
SYS
には、Oracle Databaseに付属するライブラリをロードするためのパーミッションが付与されています。ただし、データベースにCライブラリをロードすることはセキュアでないため、Oracle JVMでは他のユーザーによるライブラリのロードはサポートされていません。このため、loadLibrary.*
に対してRuntimePermission
を付与することは許可されません。
-
oracle.aurora.rdbms.security.PolicyTablePermission
このパーミッションは、ポリシー表を更新できるユーザーを制御します。特定のパーミッション・タイプについてポリシー表を更新する権限を付与されたユーザーは、一部のリソースへのアクセスを制御できます。
Oracle JVMを初期化した後、
JAVA_ADMIN
ロールのみがPolicyTablePermission
を使用してポリシー表の管理権限を付与できます。この権限を付与されると、そのユーザーは、自分の付与パーミッションおよび制限パーミッションを使用してポリシー表を更新できます。ポリシー表の更新権限を付与する場合は、
DBMS_JAVA
パッケージのgrant_policy_permission()
メソッドを使用できます。表を更新したら、DBA_JAVA_POLICY
またはUSER_JAVA_POLICY
ビューのいずれかを表示して、パーミッションを付与したユーザーを参照できます。 -
oracle.aurora.security.JServerPermission
このパーミッションを使用して、Oracle JVMリソースへのアクセス権を付与および制限します。
JServerPermission
は、BasicPermission
を拡張するパーミッションです。次の表は、JServerPermission
によってアクセス権を付与するパーミッション名を示します。パーミッション名 説明 LoadClassInPackage.
package_name
指定されたパッケージにクラスをロードするパーミッションを付与します。
Verifier
バイトコード検証機能をオンまたはオフに切り替えるパーミッションを付与します。
Debug
デバッガをセッションに接続するパーミッションを付与します。
JRIExtensions
MEMSTATを使用するパーミッションを付与します。
Memory.Call
コール設定時に
oracle.aurora.vm.OracleRuntime
の特定のメソッドをコールする権限を付与します。Memory.Stack
スタック設定時に
oracle.aurora.vm.OracleRuntime
の特定のメソッドをコールする権限を付与します。Memory.SGAIntern
SGA設定時に
oracle.aurora.vm.OracleRuntime
の特定のメソッドをコールする権限を付与します。Memory.GC
ガベージ・コレクタ設定時に
oracle.aurora.vm.OracleRuntime
の特定のメソッドをコールする権限を付与します。表11-2 JServerPermissionの説明
Grantee (権限受領者) パーミッション・タイプ パーミッション名 パーミッションの付与または制限 アクション JAVADEBUGPRIV
SYS:oracle.aurora.security.JServerPermission
Debug
付与
null
SYS
SYS:oracle.aurora.security.JServerPermission
*
付与
null
SYS
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.java.*
付与
null
SYS
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.oracle.aurora.*
付与
null
SYS
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.oracle.jdbc.*
付与
null
PUBLIC
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.*
付与
null
PUBLIC
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.java.*
制限
null
PUBLIC
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.oracle.aurora.*
制限
null
PUBLIC
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.oracle.jdbc.*
制限
null
JAVA_DEPLOY
SYS:oracle.aurora.security.JServerPermission
LoadClassInPackage.oracle.aurora.deploy.*
付与
null
JAVA_DEPLOY
SYS:oracle.aurora.security.JServerPermission
Deploy
付与
null
11.2.2.1.6 初期のパーミッションの付与について
Oracle JVMを最初に初期化すると、特定のパーミッションを付与された複数のロールが移入されます。次の表は、それらのロールとその初期のパーミッションを示します。
JAVA_ADMIN
ロールには、すべてのパーミッションについてポリシー表を変更するためのアクセス権が付与されます。SYS
を含むすべてのDBAにはJAVA_ADMIN
が付与されます。表11-1にリストされているパーミッションについては、ポリシー表を更新する完全な管理権限が付与されます。SYS
には、JAVA_ADMIN
のパーミッションの他に、JDKの標準的な機能およびOracle JVMの詳細をサポートするために必要な追加のパーミッションも付与されます。
表11-3は、SYS
に付与される追加のパーミッションの一部です。
表11-3 SYSの初期のパーミッション
パーミッション・タイプ | パーミッション名 | アクション |
---|---|---|
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
書込み |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
表11-4は、最初にすべてのユーザーに付与または制限されるパーミッションの一覧です。
表11-4 PUBLICのデフォルトのパーミッション
パーミッション・タイプ | パーミッション名 | パーミッションの付与または制限 | アクション |
---|---|---|---|
|
|
制限 |
null |
|
|
付与 |
読取り |
|
|
付与 |
書込み |
|
|
付与 |
書込み |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
付与 |
null |
|
|
制限 |
null |
|
|
付与 |
null |
表11-5は、最初にJAVAUSERPRIV
ロールに付与されるパーミッションの一覧です。
表11-5 JAVAUSERPRIVのパーミッション
パーミッション・タイプ | パーミッション名 | アクション |
---|---|---|
|
|
接続、解決 |
|
|
読取り |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
表11-6は、最初にJAVASYSPRIV
ロールに付与されるパーミッションの一覧です。
表11-6 JAVASYSPRIVのパーミッション
パーミッション・タイプ | パーミッション名 | アクション |
---|---|---|
|
|
適用できるアクションなし |
|
|
読取り、書込み、実行、削除 |
|
|
アクセプト、接続、リスニング、解決 |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
|
|
null |
表11-7は、最初にJAVADEBUGPRIV
ロールに付与されるパーミッションの一覧です。
表11-7 JAVADEBUGPRIVのパーミッション
パーミッション・タイプ | パーミッション名 | アクション |
---|---|---|
|
|
null |
11.2.2.2 ロールへの一般的なパーミッション定義の割当て
Oracle8i Databaseリリース8.1.5では、JAVASYSPRIV
、JAVAUSERPRIV
またはJAVADEBUGPRIV
ロールをスキーマに付与することによって、Oracle JVMセキュリティが制御されていました。Oracle Database 12cリリース1 (12.1)では、これらのロールは許可グループとして存在しています。ユーザー独自のパーミッションの組合せを設定および定義できます。パーミッションを定義した後は、任意のユーザーまたはロールに任意のパーミッションの組合せを付与できます。付与されたユーザーには、そのロールに設定されている内容と同じパーミッションが付与されます。さらに、追加のパーミッションが必要な場合は、指定したユーザーまたはロールのいずれかに個別にパーミッションを追加できます。ポリシー表に定義されたパーミッションには累積の効果があります。
注意:
PropertyPermission
の書込みアクションを使用して付与したプロパティへの書込み権限は、現行バージョンでは全ユーザーに付与されません。かわりに、JAVA_ADMIN
からこのパーミッションを付与するか、またはJAVASYSPRIV
ロールを付与することによって、このパーミッションを取得する必要があります。
次の例では、LarryとDaveに次のパーミッションが付与されます。
-
Larryには
JAVASYSPRIV
パーミッションが付与されます。 -
Daveには、
JAVADEBUGPRIV
パーミッション、およびシステム上の全ファイルへの読取りと書込みのパーミッションが付与されます。
REM Granting Larry the same permissions as those existing within JAVASYSPRIV grant javasyspriv to larry; REM Granting Dave the ability to debug grant javadebugpriv to dave; commit; REM I also want Dave to be able to read and write all files on the system call dbms_java.grant_permission('DAVE', 'SYS:java.io.FilePermission', '<<ALL FILES>>', 'read,write', null);
関連トピック
11.2.3 デバッグのパーミッション
デバッグ・ロールJAVADEBUGPRIV
は、デバッガを実行するパーミッションを付与するために作成されました。このロールに割り当てられるパーミッションの一覧は、表11-7を参照してください。デバッグ・エージェントをコールするパーミッションを取得するには、次のように、コール元にJAVADEBUGPRIV
またはデバッグJServerPermission
が付与されている必要があります。
REM Granting Dave the ability to debug grant javadebugpriv to dave; REM Larry grants himself permission to start the debug agent. call dbms_java.grant_permission( 'LARRY', 'oracle.aurora.security.JServerPermission', 'Debug', null);
デバッガはサーバー上のコードとデータの両方に広範囲にアクセスできますが、デバッガの使用は開発環境に限定する必要があります。
11.2.4 クラスをロードするためのパーミッション
クラスをロードするには、次のパーミッションが必要です。
JServerPermission("LoadClassInPackage." + class_name)
class_name
には、ロードするクラスの完全修飾名を指定します。
このパーミッションには、システム・パッケージへのロードやシステム・クラスの置換は含まれません。システム・クラスをロードするパーミッションが付与されている場合でも、Oracle Databaseではロードを実行できません。システム・クラスとは、Oracle DatabaseでCREATE JAVA SYSTEM
文を使用してインストールされるクラスです。システム・クラスを置換しようとすると、次のエラーがスローされます。
ORA-01031 "Insufficient privileges"
次に、データベースのインストール後、各ユーザーが実行できる処理について説明します。
-
SYS
はシステム・クラス以外の全クラスをロードできます。 -
すべてのユーザーは、
java.*
、oracle.aurora.*
およびoracle.jdbc.*
以外のパターンで始まるクラスを自分のスキーマにロードできます。このようなクラスを別のスキーマにロードする場合は、JServerPermission(LoadClassInPackage.
class
)
のパーミッションを付与する必要があります。次の例は、
oracle.aurora.tools.*
パッケージにクラスをロードする許可をHR
に付与する方法を示します。dbms_java.grant_permission('HR','SYS:oracle.aurora.security.JServerPermission','LoadClassInPackage.oracle.aurora.tools.*',null);
11.2.5 デフォルトのjava.securityリソースのカスタマイズ
セキュリティ・プロバイダを追加する場合や、デフォルトのjava.security
リソースにリストされているセキュリティ・プロバイダの順序を変更する場合は、代替リソースを作成してデータベースに追加できます。この変更は、リソースのロード後に開始されるすべての新しいOracle JVMセッションに影響を与えます。次のステップを実行して、デフォルトのjava.security
リソースを構成します。
このセキュリティ設定は、データベースから開始される以降のOracle JVMセッションすべてに影響を与えます。ただし、セキュリティ設定の変更はロード・セッションには有効になりません。
注意:
セキュリティ・パラメータを構成するには、それに関する事前の知識が必要です。間違った設定を行うと、正常に操作できなくなることがあります。
関連項目:
このセキュリティ設定の詳細は、http://docs.oracle.com/javase/7/docs/technotes/guides/security/index.html
を参照してください。
例11-4 Javaシステムの作成または置換
Create or Replace Java Systemをjava.security.alt
で実行して、異なるセットのセキュリティ・パラメータをOJVMに付与します。これを実行する前に、次のようにしてすべてのシステム・セッションを再起動します。
sqlplus / as sysdba shutdown sqlplus / as sysdba startup
次のようにして、Create Java Systemを実行します。
sqlplus / as sysdba create or replace java system
Linux.X64データベースでは、Create Java Systemは使用できません。この場合は、次のコマンドを使用します。
sqlplus / as sysdba call javavm_sys.rehotload();
例11-5 セキュリティ設定のリストア
元のセキュリティ設定は、次のいずれかの方法でリストアできます。
-
次のコマンドを使用します。
cd $ORACLE_HOME/javavm dropjava -u sys/<sys_pwd> -v lib/security/java.security.alt
-
次のコマンドを使用します。
sqlplus sys/<sys_pwd> as sysdba SQL> drop java resource "lib/security/java.security.alt";