• 締切済み

クライアントPCからのアクセス制限

現在oracle10gでDBを構築し、クライアントサーバでアプリケーションシステムを稼働しています アプリケーションはログインするユーザによってDBへのアクセス範囲を限定できますが SID,ユーザID、パスワードを入れてアクセスするオラクルツールではアクセス範囲を限定できません これに制限をかけることは可能でしょうか(たとえばPC側のプロセスを限定するとか) また、このような制限を可能にする良い案があれば御教示ください。

  • Oracle
  • 回答数6
  • ありがとう数13

みんなの回答

  • dda167
  • ベストアンサー率76% (55/72)
回答No.6

ログオントリガーは ユーザーがデータベースに接続するとき 起動するトリガーです。 簡単な例を挙げます。 ------------------------------------------------------------ SQL> conn / as sysdba 接続されました。 SQL> create or replace trigger logon_scotch_trigger 2 after logon 3 on scotch.schema 4 declare 5 v_program v$session.program%type; 6 begin 7 select program into v_program 8 from v$session 9 where audsid = sys_context('userenv','sessionid'); 10 if v_program = 'sqlplus.exe' then 11 raise_application_error(-20000,'SQL*Plusで接続しちゃ駄目!'); 12 end if; 13 end; 14 / トリガーが作成されました。 SQL> conn scotch/whisky ERROR: ORA-00604: 再帰SQLレベル1でエラーが発生しました。 ORA-20000: SQL*Plusで接続しちゃ駄目! ORA-06512: 行8 警告: Oracleにはもう接続されていません。 ------------------------------------------------------------ ↓OTN掲示板の関連スレッド http://otn.oracle.co.jp/forum/message.jspa?threadID=2001555 http://otn.oracle.co.jp/forum/message.jspa?threadID=3005233 http://otn.oracle.co.jp/forum/message.jspa?threadID=27000290 http://otn.oracle.co.jp/forum/message.jspa?threadID=35000806 検索すれば他にもたくさん出てくると思います。 興味があれば研究してみてください。 # 私自身はなかなかこの手の要件がなくて # 実戦では使ったことがないのですが……

回答No.5

オンコードというのは? もしかすると、今は、クライアントがわにOracleクライアントを入れてもらってそこで手で設定している内容をツール内に埋め込んでしまうという意味ですか? まあ、そうすれば、いちいち、クライアント側にSID等を公開する必要はありませんが、結局セキュリティーリスクの度合いはたいして変わっていませんよ。 やった方がいいのは確かですが。 実際問題としては、不特定多数がアクセスできる状態ではない場合は、そういったコードを書き換えたり、新たな投資をするよりも、監視を行い、不正があった場合にきちんとそれを確認し、それに対して処罰ができるという方向に進んだ方がいいと思いますよ。 どちらにしろ監視やロギングは必要です。もしそれだけで対処が可能であればそれで済ましてしまえば?とおもいますよ。 一応、そのツールを使用している人たちには不正アクセスはしないようにいっておけば、いざ、何かあった場合には不正アクセス防止法で守られていますので。ある程度良識があれば、会社でそうそう怪しいことはしないと思いますよ。

Kouma-s27
質問者

お礼

wildcat-ypさん 回答をありがとうございます。 又、回答が遅くなり申し訳ありません >結局セキュリティーリスクの度合いはたいして変わっていませんよ。 それは承知しております。今回の対応は素人の出来心を抑えるのが狙いです。 >不正があった場合にきちんとそれを確認し、それに対して処罰ができるという方向に もちろんその対応はしなければと思っています。 >もしそれだけで対処が可能であればそれで済ましてしまえば?とおもいますよ。 それで済まない情報がDBにあるということで御理解ください また、運用もすぐに停止出来ないということを御理解ください。 以前の回答でパケットキャプチャすればSIDとユーザID、パスワードがわかると書かれいて いましたが、実際にやってみたのですがユーザID、パスワードは暗号化されているようです。 ”tnsname.ora”をダミーにしてしまうと、さすがにオラクルツールは接続できませんでしたが パケットキャプチャーではしっかり見えていました。 今後の展開として新しいシステムを構築したいのですが、リッチクライアントでセキュリティ重視の システム形態はどんなものか模索中です

  • dda167
  • ベストアンサー率76% (55/72)
回答No.4

ログオントリガーでアクセスするアプリケーションを限定する というのはいかがでしょう。 素人がオラクルのツールを使って”ひねりもなしに”DBにアクセスできてしまう のは防げるかもしれません。

Kouma-s27
質問者

お礼

dda167さん 回答をありがとうございます。 又、回答が遅くなり申し訳ありません >ログオントリガーでアクセスするアプリケーションを限定する 出来れば詳しいことを教えて頂けないでしょうか

回答No.3

>今のままでセキュリティホールを解消できないとは思っています。 接続元が無制限であることが問題なのであれば、データベースサーバのOS側の機能で、 接続元IPアドレスを制限すれば良いかと思いますけど? (データベースのプラットフォームが書かれていないので、具体的な操作は書けませんが。)

Kouma-s27
質問者

お礼

k_o_r_o_c_h_a_nさん 回答をありがとうございます。 > 接続元が無制限であることが問題なのであれば 社外にもクライアントPCが有りますが、VPN接続になっていますので 一応は限定されていると認識しています。

回答No.2

さすがにそこまでど素人がすぐにアクセスできるような状態ではないと思いますよ。一応、SIDとユーザID、パスワードを公開しなければ良いので。 まあ、少し知っている人であればパケットキャプチャすれば簡単にわかることは知っているとは思いますが。 なので、不正アクセスの禁止と、監査機能によるアクセスログ等を取り、不正があった場合にすぐに検知できるようにしておくことが有効になります。 これって社内ツールですよね?それであれば、きちんとルール化しておけばそれほど重大なことにはならないと思いますよ。 これが社外ツールであれば、ただちに運用を停止する必要がありますが・・・

Kouma-s27
質問者

お礼

wildcat-ypさん 回答をありがとうございます。 > これが社外ツールであれば、ただちに運用を停止する必要がありますが・・・ 運用上の都合により社外(取引先)にもクライアントPCがあります。 ですので、最悪SID,ユーザID、パスワードが漏れてしまっても、どこかでもう一段階の ブロックができないのかともがいております。 先ほど見つけたのですが、ODP.NET限定ですが”tnsname.ora”の記述内容をオンコードに 出来るみたいなので”tnsname.ora”をダミーにしてしまうのが一つの手かなと思うのですが どうでしょうか?

回答No.1

そのクライアントツールが直接DBにアクセスするのですか? それはそもそものアプリケーションの設計がおかしいのでは? 普通、DBサーバは許可するアプリサーバ以外からのアクセスは禁止するものです。 もしくは、Oracle自体の認証でそれぞれのアクセスできる範囲を限定する物です。 たとえば、PC側のプロセスを限定し、sqlplus.exeからのアクセスを拒否する設定が可能だったとしても、実行ファイル名を変えられてしまえば一緒です。ODBC経由でアクセスしていればそれすら必要ないかも。 なので、そのシステムは潜在的にセキュリティーホールを抱えた仕様ということです。少し知識があれば簡単にDBアクセスが可能ですので、必要があれば、不正アクセス禁止の注意書きと、アクセス履歴等の監査を使って、不正アクセスの検知を強化するしかありません。 もし、そのクライアントツールが直接DBアクセスするものではなく、きちんとしたアプリサーバ経由でのアクセスしかしないのであれば、単にDB側は、リスナーでアクセス制限すれば良いだけです。

Kouma-s27
質問者

お礼

wildcat-ypさん 回答をありがとうございます。 > なので、そのシステムは潜在的にセキュリティーホールを抱えた仕様ということです。 > 少し知識があれば簡単にDBアクセスが可能ですので 仰る通りだと思いましす。 私もこのシステムにかかわったのが3ケ月前で、その時には5年も前からこのシステム (実は某社のパッケージソフト)が業者の言いなりに導入されていて運用されていました。 私もオラクルにというかDBの経験は浅いですが、パッケージのインストールの仕方とか、 オラクルクライアントの設定ファイルとかみてオラクルのツール(フリーソフト)でDBに アクセス出来てしまったのでビックリしています。 パッケージソフトでの運用はすぐにはやめれませんので、今のままでセキュリティホールを 解消できないとは思っています。 ですが、素人がオラクルのツールを使って”ひねりもなしに”DBにアクセスできてしまう 現状を少しでもなんとかできないかと思い投稿したしだいです。 何かいい方法はないでしょうか。

関連するQ&A

  • ORACLEのアクセス

    oracle10gで構築したDBをoracle9iのクライアントからアクセス可能でしょうか。(SQLを参照したりVBで作成しらプログラムからODBC/OLE形式でアクセスする)

  • MySQL/DBサーバって、MySQL/DBクライアントみたいなものりますか?

    Linux+Apache+MySQLでサイト構築を検討しています。 MySQL/DBって、ORACLE8で言うところの、 いわゆる「Net8クライアント」のようなものってあります? 実は、今まで、NT+MS-SQLServer7でサイト構築してたのですが、 Linuxで再構築することとなっちゃいました。 で、MS-SQLServer7だったら、クライアントPCから、 GUIを使って、データベースのデータを簡単に変更することができます。 しかし、LinuxではMS-SQLServerは使えないので、じゃぁ、ORACLEって手もありますね。 そこで、ORACLEだったら、Net8があるので、多分、 上記のような使い方もできると思うのですが、 ORACLEは、導入コストが高すぎるので、却下されてしまいました。 で、Linux+MySQLにしようかと・・・。 しかし、サーバ機にLinux+MySQL/DBを構築するのはいいのですが、 Windowsなどのクライアントから、ORACLEでいうNet8でODBCのような接続で、 Microsoft-Accessなどを使って、データベースのデータを編集させたいんです。 よろしくお願いします!

  • ACCESSで利用者制限

    利用環境:サーバー WindowsXPPro クライアント WindowsXP,98,ME アプリケーション ASP(VBScript) Access初心者です。 1.アクセスのDBファイルをサーバーに置きます。 2.通常の利用者はWebブラウザから自作のアプリケーションでAccessにアクセスします。 3.サーバーは全員が自由に通常使えます。 以上の条件で特定の人だけがAccessのDBファイルに直接 さわれるように制限するにはどうしたらいいのでしょうか?OSでの利用者制限は考えてません。 あくまで直接AccessのDBファイルを操作できるひとを 制限したい場合です。

  • SQLスクリプト内で、${変数}と記述しても値を認識できない?

    USER.TABLE_LNK_TRG.shにて、トリガ作成スクリプトUSER.TABLE_LNK_TRG.sqlをコンパイルしようとしています。 USER.TABLE_LNK_TRG.shとUSER.TABLE_LNK_TRG.sqlともに 変数ORACLE_SID_1の値としてdb1、 変数ORACLE_SID_2の値としてdb2 が入っているはずなのですが、USER.TABLE_LNK_TRG.sql内では ${ORACLE_SID_1}と${ORACLE_SID_2}がそのまま文字列として解釈され (変数の値であるdb1、db2にはならない)、コンパイルに失敗します。 逆にUSER.TABLE_LNK_TRG.sql内で、${ORACLE_SID_1}と${ORACLE_SID_2} を使わず、直接db1、db2と記述すると成功します。 トリガ作成スクリプトUSER.TABLE_LNK_TRG.sql内で、${変数}は使えないのでしょうか? 環境はOSはSolaris、DBはOracle9i、シェルはBシェルです。 _______________________________________________________________ ~USER.TABLE_LNK_TRG.sh~ #!/bin/sh ORACLE_SID_1="db1" ORACLE_SID_2="db2" #トリガコンパイル sqlplus aaa/aaa <<-EOF @USER.TABLE_LNK_TRG.sql quit EOF exit ______________________________________________________________ ~USER.TABLE_LNK_TRG.sql~ CREATE OR REPLACE TRIGGER USER.TABLE_LNK_TRG BEFORE UPDATE ON USER.TABLE FOR EACH ROW declare begin update TABLE@${ORACLE_SID_1}_lnk set col = :new.col; update TABLE@${ORACLE_SID_2}_lnk set col = :new.col; exception when others then null; end; / _______________________________________________________________ ※${ORACLE_SID_1}、${ORACLE_SID_2}のままコンパイルされるので、  ${ORACLE_SID_1}_lnkのDB環境、${ORACLE_SID_2}_lnkのDB環境が存在せずコンパイルエラー。  逆に直接db1、db2と記述するとdb1_lnkのDB環境、db2_lnkのDB環境が存在するので正常にコンパイル。

  • Oracleクライアントの共存について

    既存環境としてOracleクライアントが実装されているサーバに 新たに別バージョンのOracleクラインアント環境を実装することは可能 でしょうか?(既存構築:Oracle8i、追加構築:Oracle11g) インストール時のインストール先指定でパスは変更できるかとおもいますが、動作として既存環境のOracleに影響が出ないのか懸念しております。

  • Oracleのアクセス権制御について教えてください

    Oracleのアクセス権について教えてください。 下図にあるようにTEST1というユーザがSERVE1というORACLEインスタンスにアクセスできるがTEST2というユーザはSERVE2にアクセスできないようにしたいです。 ユーザ   ソフト   サーバ  インスタンス test1    A     SERVE1    ADB test2         SERVE2     BDB Oracleでtest1はアクセスできないという制限を設けることはできました。 しかし、あるORACLE検索ソフトはサーバで動くので、全てサーバのユーザ名でアクセスされるため制限ができません。 お手数ですが解決策を教えてください。

  • オラクル 10g リスナーの設定ファイルについて

    お世話になります。 新規DBをDBCAで作成し、その後、Oracle Net Managerで、listener.oraファイルを設定したところ、外部プロシージャ定義(extproc関連)が 作成されてませんでした。 利用環境:DBサーバー(solaris8、Oracle10gR1)、クライアントPC(winXP、Access2003のアプリ) 複数のクライアントPCからLANを経由してDBサーバーへアクセスします。 質問 1.外部プロシージャ定義はどのような場合に記述するのでしょうか? 2.とりあえず記述しておいた場合に何か問題が起こる可能性はありますでしょうか? 3.記述場所は以下でよろしいでしょうか? SID_LIST_リスナー名 = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DBネーム) (ORACLE_HOME = オラクルHOME) (SID_NAME = オラクルSID) ) ---以下外部プロシージャ定義(1)--- (SID_DESC = (GLOBAL_DBNAME = PLSExtproc) (ORACLE_HOME = オラクルHOME) (SID_NAME = extproc) ) ---(1)以上---- ) リスナー名 = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = プロトコル)(HOST = ホスト名)(PORT = ポート番号)) ) ---以下外部プロシージャ定義(2)--- (ADDRESS_LIST = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC)) ) ---(2)以上--- ) 宜しくお願い致します。

  • アクセス→オラクルの方法は?

    アクセス(Access2000)で作ったサンプルDBを オラクル(Oracle9i)にインポートするためには どうすればいいのでしょうか。 そもそもできるのでしょうか。 テーブルだけでOKなんです。 いったんデータをcsvにはいてから? 逆方向(オラクル→アクセス)はよく見かけるのですが…

  • Windows 32BitOS上で稼動するOracleのメモリの上限に

    Windows 32BitOS上で稼動するOracleのメモリの上限についての質問です。 現在、2台のクラスタで構成されたWindowsServerのOracleデータベースの移行を検討しております。 移行するサーバのスペックは以下の通りです。 OS:Windows2000 AdvancedServer(32Bit) 2台のOFSを使用したクラスタリング構成(アクティブ・スタンバイ) DB:Oracle 9i 搭載CPU:Xeon2.80GHz ×2 搭載メモリ:2.6GB 新規に構築するサーバは以下の構成を検討しています。 OS:Windows2003Server EnterPriseEdition(32Bit) 2台のOFSを使用したクラスタリング構成(アクティブ・スタンバイ) DB:Oracle 9i 搭載CPU:Xeon2.93GHz(4Core) 搭載メモリ:4.0GB 要件として、OracleのVersionUp、64Bitへの変更の検証が出来ないとなった為、上記構成になりました。 現在、複数のDBインスタンスをクラスタグループ化して稼動させています。 移行にあたって、DBインスタンスを増やしたいという要件が出た為、合わせて新規構築するサーバのメモリの増強を検討しております。 そこで、32BitOS上での4GB以上のメモリの搭載について質問させて下さい。 Windows2003Server EnterPriseEdition(32Bit)では、最大64GBまでメモリを搭載できますが、32Bitで作成されたアプリケーションでは、1プロセスあたり最大2GBまでしか使用出来ないという点までは認識しております。 この、最大2GBという制約はOS上のプロセス一つ一つが2GB以上メモリを使用出来ないという認識であっていますでしょうか。 Oracleサーバ上で複数のDBインスタンスを稼動させた場合、プロセス:Oracle.exeが複数起動することになりそれぞれのメモリの使用量が2GBまでと考えております。 その為、1インスタンスで2GB以上のメモリを消費するようなアプリケーションの構築は32Bitのアプリケーションという時点で不可能だと思いますが、複数のインスタンスを稼動させる(=複数のOracleプロセスを立ち上げる)場合、4GBを超えて大量のメモリを搭載することは意味があると考えています。 ※この場合、4GBという数字自体は意味が無いと思います。 CPU、DiskI/O等、Networkその他が、システムのボトルネックにはならないという前提で考えた場合、この観点で32BitOSでメモリの増強を検討するという認識は合っていますでしょうか。 以上、宜しくお願いいたします。

  • イントラ内のWEBにアクセス制限はどのように???

    イントラ内で公開しているWEBページにアクセス権を付与して限定した人だけに公開は可能でしょうか? (ファイルサーバのような制限はつけれないですよね?) クライアントもサーバも同一ドメイン内という環境です。(全部Win系) そのクライアントでも限られた人のみに見せるページを作りたいと思うのですが、アクセス制限を掛けることは可能でしょうか?

    • ベストアンサー
    • HTML