web-dev-qa-db-ja.com

IPアドレスごとのデータベースアクセスの制限

次のように、IPアドレスをアクセスDBサーバーにフィルターしました。

Sqlnet.oraを設定する

tcp.validnode_checking = YES
tcp.invited_nodes = (localhost, 192.168.100.130, 192.168.100.186)

しかし、私のOracle_HOMEには、複数のデータベースがあります。たとえば、DB WORKSHOPとDB COURSE

各DBのデータベースへの接続について質問します。例:

DB WORKSHOP only can be access from 192.168.100.130
DB COURSE only can be access from 192.168.100.186

それを作るために私は何ができますか?

5

これを行う純粋なOracleの唯一の方法は、2つの異なるOracle_HOMEを使用するのではなく、2つの異なるOracle_HOMEから異なるポートで2つの別個のリスナーを実行することだと思います。

これにアプローチするはるかに健全な方法は、他のセキュリティ対策を使用することです...このタスクでは、個別のユーザー名とパスワードがかなり一般的です-LDAPまたはこれを防ぐ何かを使用している必要があると思います。別のオプションは、リモートIPをチェックし、それが正しいマシンからのものでない場合はセッションを切断する、各データベースのログイントリガーです。

select SYS_CONTEXT('USERENV','IP_ADDRESS') from dual;

...リモートIPアドレスを提供します。

次のようなトリガー

CREATE OR REPLACE TRIGGER DENY_LOGIN
AFTER LOGON ON DATABASE
DECLARE
  foo varchar2(128);
BEGIN

  IF ( sys_context('userenv','ip_address') <> '192.168.100.130' )
  THEN
    raise_application_error( -20001, 'Connection not authorised' );
  END IF;

EXCEPTION
WHEN OTHERS THEN
  RAISE;

END;

... DB WORKSHOPのジョブを実行します。

(テストされていませんが、問題ないはずです)

おそらく、DBAもlocalhostからログインできるようにする句を追加するか、完全に除外することをお勧めします。

4
Philᵀᴹ

異なるポートで異なるリスナーを使用できない場合は、Oracle Connection Managerを調査することをお勧めします。接続マネージャは、複数の接続を集中させたり、複数のプロトコルをサポートしたりするなど、多くの機能を提供します。それはまたあなたの路地のすぐ上に聞こえるネットワークアクセス制御を扱うことができます。着信接続要求をフィルタリングするためのルールを定義するCMAN_RULESを作成できます。彼らは含めることができます:

  • クライアントのソースホスト名またはIPアドレス
  • サーバーの宛先ホスト名またはIPアドレス
  • 宛先データベースサーバー識別子

接続マネージャの詳細については、こちらをご覧ください 接続マネージャのドキュメント

私はそれを接続の集中に使用しました-VPN経由でデータベースにアクセスする必要があるクライアントがありました。ファイアウォールは、すべての接続に対して1つのポートを開くように構成されていました。 CMANを使用して、この1つのポートですべてのトラフィックを処理することができました。

3
David Mann