- - PR -
Javaアプレットを使用したDB接続について(Web上)
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2006-11-26 15:05
はじめて投稿致します。よろしくお願い致します。
現在Javaアプレットを使用して、Web上からDB(oracle)へJDBCを介してアクセスし、 マスターテーブルを管理するプログラムを作成しております。 そこで問題が1つ起きてしまい大変困っております。 その問題とは、開発PCのローカルマシンからAppletViewerでDBへの アクセスは成功するのですが、それをWeb上に展開し、そこからDBへアクセスを行うと 下記の例外がスローされてしまいます。 (Javaコンソールより) java.security.AccessControlException: access denied (java.util.PropertyPermission oracle.jserver.version read) at java.security.AccessControlContext.checkPermission(Unknown Source) at java.security.AccessController.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPermission(Unknown Source) at java.lang.SecurityManager.checkPropertyAccess(Unknown Source) at java.lang.System.getProperty(Unknown Source) at oracle.jdbc.driver.OracleDriver.getConnectionInstance(OracleDriver.java:436) at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:314) at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at common.db.DBConnection.con(DBConnection.java:100) at common.db.DBConnection.<init>(DBConnection.java:64) at mstmnt.serch.Search.SearchConnect(Search.java:40) at mstmnt.MasterMaintenance.getJTable(MasterMaintenance.java:348) at mstmnt.MasterMaintenance.getJScrollPane(MasterMaintenance.java:321) at mstmnt.MasterMaintenance.getJContentPane(MasterMaintenance.java:119) at mstmnt.MasterMaintenance.init(MasterMaintenance.java:102) at sun.applet.AppletPanel.run(Unknown Source) at java.lang.Thread.run(Unknown Source) 内容を見ると、アプレット側のセキュリティで引っかかっているようです。 それおもOracleに接続する際のパーミッションの設定に関係しているのでしょうか? それそも、アプレットを使用したWebアプリからでは、DBにアクセスすることは不可能 なんでしょうか? ちなみに、アプレットとDBは別々で異なるマシン上にあります。 色々調べてみましたが、中々有用な情報が見つかりませんでした。 大変申し訳ありませんが、皆様方の中で何か分かる方がいらっしゃいましたら ご教授願えないでしょうか?リリースもやや近くなっており、少し焦っております。 ■開発環境 1.アプレット側 ・OS : WindowsXP ・J2EEアプリケーションサーバー:TOMCAT 5.0.28 ・開発言語:Java(J2SE5.0) ・ソフト:Oracle9i client(9.2) 2.DB側 ・OS : Windows 2003 Server ・DBサーバー:Oracle 10g 以上、よろしくお願い致します。 |
|
投稿日時: 2006-11-26 15:18
こんにちは。
Javaアプレットは、サンドボックスというセキュリティモデルで動作します。 サンドボックス 【sandbox】 |
|
投稿日時: 2006-11-26 16:10
こんにちは。
追記です。 私なりに調べてみたところ 「Oracle Thin JDBCドライバ」というのを使えば、 Javaアプレット からDB接続できるらしいですが…!?? http://kamakura.cool.ne.jp/oppama/swjd/orathinjdbcapplet.html |
|
投稿日時: 2006-11-26 16:22
こんにちは。
さらに追記です。 ここに書いてありますね。 Javaデータアクセスの基礎 タイプ4:ネイティブ・プロトコル・ドライバ |
|
投稿日時: 2006-11-26 16:35
Tdnr_Symさん、こんにちは。早速のご回答ありがとうございました。
又、追加で調べて頂きありがとうございます。 今、thinドライバで繋いでおらず、OCIドライバで繋いでおります。thinでも 試した方がよいのかもしれませんね。 あと、参照頂いたHPには「Oracleインスタンスが上がっているデータベースサーバとWebサーバは同じマシンでないといけない」とありました。 今は、DBサーバーとWebサーバーは別々の為、DBに接続できない現象が起きているのかも しれません。 私も追加で調べてみたのですが、アプレットはサンドボックス内で動いている為、 外部のリソースにアクセスできないみたいですね。 そこで、サンドボックスからアプレットを出せばよいのかなと思い、 ネットで調べてみたところ、署名付きのアプレットにすればサンドボックス から外れるような記事を見つけました。 以上のことから、署名付きアプレットにする=外部DB接続可能に なるのかなと考えました。 会社に開発環境があり今すぐ試すことができない為、教えて頂いたことが 今すぐ試せないのが惜しいのですが。。 もし、他にもお気づきの点がありましたらご教授頂けると助かります。 |
|
投稿日時: 2006-11-26 22:43
ポリシーファイルに必用なパーミッションを記述して
それをクライアントに配布する方法も考えれられるかと 思います。 %userprofile%\\.java.policyファイルを作成して 以下のように必用となるパーミッションを記述していけばよいと思います。 grant codeBase "http://Webサーバのホスト名:ポート番号/パス/-" { permisson java.util.PropertyPermission oracle.jserver.version read; } 上記以外にも必用となるパーミッションはあると思いますので java.security.AccessControlException の後に表示されるパーミッションを失敗する都度、追加していきます。 まずは、all permissionで試してみて、本当に接続できることを確認し その後、お客様の運用に合せて、ポリシーファイルの配布か、アプレット 署名にするかをご検討されればよいかと思います。 |
|
投稿日時: 2006-11-26 23:34
つばささん、こんにちは。ご回答ありがとうございます。
まず、今日分かったこととして、 1.アプレットではthinドライバを使用してDB接続を行うこと。 2.その際、つばささんの仰っているポリシーファイルでパーミッションを 制御、又は署名付きアプレットにしてセキュリティー制限を外すこと。 この2点です。恐らく上記の2点の手順を踏まなければアプレット→DBサーバーへ の接続はできないことまではわかりました。 明日は、thinドライバで接続をするアプレットへ変更し、ポリシーファイルの パーミッションを「all permission」にして、改めてDBアクセスを試して みます。 つばささん、Tdnr_Symさんのお陰でなんとか光が見えてきたように思います。 結果はまた別途報告させて頂きます。本当にありがとうございました。 |
|
投稿日時: 2006-11-27 17:30
結果を報告致します。
まず、 1.thinドライバに変えてポリシーファイルを作成せずにDBにアクセス→NG 2.thinドライバに変えてポリシーファイルを作成。この時、パーミッションは 「all permission」にしてDBへアクセス→OK 3.thinドライバに変えてアプレットとclasses12.jarに署名を付けてDBへアクセス →OK 以上の結果がでました。とにかく、DBにアクセスすることができました! Tdnr_Symさん、つばささん本当にありがとうございました。 又、試しに上記2.と3.にociドライバでDBアクセスを行ってみたところ うまくいきました。(何故だかわかりませんが・・) ちなみに、アプレットからDBアクセスする際のリファレンスHPがありました。 http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/java.102/B19275-02/jdbcthin.htm あと、私と同じ問題に当たった人の為にポリシーファイルの作成方法と署名付き アプレットの作成方法を記述しておきます。参考にして下さい。 1.ポリシーファイルの作成 以下の内容を含む、.java.policyファイルを作成します。 grant { permission java.security.AllPermission; }; 配置する場所は、「「C:\Documents and Settings\{ユーザID}\」です。 ※Windowsでは、「.」で始まるファイル名作成できません。その為、 最初に適当な名前でポリシーファイルを作成し、DOSプロンプトから COMMANDでRenameして「.java.policy」として下さい。 2.書名付きアプレットの作成方法 下記のHPを参照して作成しました。 http://mictan.gozaru.jp/java_applet.html 以上、ご協力頂いた方々本当ありがとうございました。 |