weblogic server から oracle database へユーザidを渡す方法

18
1 Copyright © 2014, Oracle and/or its affiliates. All rights reserved. WebLogic Server から Oracle Database へユーザIDを渡す方法 日本オラクル株式会社 テクノロジー製品事業統括本部 福田 知彦

Upload: oracle-fusion-middleware

Post on 08-May-2015

1.281 views

Category:

Technology


6 download

DESCRIPTION

「WebLogic Server から Oracle Database へユーザIDを渡す方法」 2014年5月27日に開催された第47回WebLogic Server勉強会@東京のセッション資料です。Oracle Database がAPユーザを識別する際、CLIENT_IDを使用することができます。WebLogic Server のデータソース便利機能 「接続時にクライアントIDを設定」の使い方を紹介します。この機能は意外と知られていないので、この機会にマスターしてください。 日本オラクル テクノロジー製品事業統括本部 福田 知彦

TRANSCRIPT

Page 1: WebLogic Server から Oracle Database へユーザIDを渡す方法

1 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

WebLogic Server から Oracle

Database へユーザIDを渡す方法

日本オラクル株式会社

テクノロジー製品事業統括本部

福田 知彦

Page 2: WebLogic Server から Oracle Database へユーザIDを渡す方法

2 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

以下の事項は、弊社の一般的な製品の方向性に関する概要を説明するものです。また、情報提供を唯一の目的とするものであり、いかなる契約にも組み込むことはできません。以下の事項は、マテリアルやコード、機能を提供することをコミットメント(確約)するものではないため、購買決定を行う際の判断材料になさらないで下さい。オラクル製品に関して記載されている機能の開発、リリースおよび時期については、弊社の裁量により決定されます。

OracleとJavaは、Oracle Corporation 及びその子会社、関連会社の米国及びその他の国における登録商標です。文中の社名、商品名等は各社の商標または登録商標である場合があります。

Page 3: WebLogic Server から Oracle Database へユーザIDを渡す方法

3 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

一概に「ユーザー」といっても…. 3層アプリケーションの場合

エンドユーザー アプリケーションサーバー データベースサーバー

管理者/

運用担当

開発者 管理者/

運用担当

開発者

weblogic sys / system

コネクションプール

app

アクセス(ユーザー認証)

ユーザーID

利用者

アクセス対象

利用アカウント

Page 4: WebLogic Server から Oracle Database へユーザIDを渡す方法

4 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

データベースサーバーはエンドユーザーを知らない

• クラサバ環境では、エンドユーザーはデータベースサーバーに直接接続していたが、アプリケーションサーバーが中間に入り、コネクションプールを使用することで、エンドユーザーがデータベースサーバーから隠ぺいされる

• データベースにエンドユーザーを伝えるには作り込みが必要

エンドユーザー アプリケーションサーバー データベースサーバー

コネクションプール

app

アクセス(ユーザー認証)

ユーザーID

でしたが、

「接続時にクライアントIDを設定」機能でエンドユーザー名をデータベース

に伝えることができるようになりました

Page 5: WebLogic Server から Oracle Database へユーザIDを渡す方法

5 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

「接続時にクライアントIDを設定」機能とは

• DataSourceをgetConnectionする時にアプリケーションサーバーにログインしているユーザー名をデータベースに自動的に伝播する仕組み

– WebLogic Serverの場合、認証プロバイダで認証されたユーザー名

– Oracle Databaseの場合、クライアント識別子(Client Identifierアプリケーションコンテキスト属性)

エンドユーザー アプリケーションサーバー データベースサーバー

コネクションプール

接続ユーザー = app

クライアント識別子= ユーザーID

アクセス(ユーザー認証)

ユーザーID

Page 6: WebLogic Server から Oracle Database へユーザIDを渡す方法

6 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

データベースサーバーがエンドユーザーを知ると…..

• アプリケーションコードとセキュリティ実装の分離 – Oracle Databaseの仮想プライベートデータベース(VPD:Virtual

Private Database)機能を利用すれば、アプリケーションから全件検索してもエンドユーザーが参照権限を持っているデータしか結果として戻らない • アプリケーションコードが容易に

• コーディングミス(忘れ)による情報漏えいリスク軽減

•セキュリティポリシー変更時の対応が楽

• SQLインジェクションなどの攻撃を受けても、情報漏えいの範囲を制限

• データベースのアクセス監査証跡にエンドユーザー名を含めることが可能

ユーザーIDを渡すとできるようになることの例

Page 7: WebLogic Server から Oracle Database へユーザIDを渡す方法

7 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

デモ

• 「jdbc/adddrbook」という名前のデータソースのコネクションプールに接続し、ADDRBOOK表に対してSQLを実行

• 接続ユーザーによって結果の見え方が変わる (Data Redaction機能の利用)

電話帳アプリケーション

DataSource ds = (DataSource)context.lookup("jdbc/addrbook"); Connection conn = ds.getConnection(); Statement stmt = conn.createStatement(); ResultSet rset = stmt.executeQuery("SELECT * FROM ADDRBOOK.ADDRBOOK");

← admin

user01→

Page 8: WebLogic Server から Oracle Database へユーザIDを渡す方法

8 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

参考) Oracle Databaseで情報を見せないようにする機能

• Data Redaction (Oracle Advanced Security Option機能)

– 特定条件により、列の全体もしくは一部をマスキングする機能

• 仮想プライベートデータベース (VPD: Virtual Private

Database、Oracle Database Enterprise Edition基本機能)

– 特定条件により、特定の行や列のデータを見せないようにする機能

– SQL文にWHERE句を内部的に追加するイメージ

Page 9: WebLogic Server から Oracle Database へユーザIDを渡す方法

9 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

参考) Oracle Databaseの監査機能

• 標準監査証跡

• Unified Auditing監査証跡

CLIENT_IDENTIFIERは監査証跡に標準で格納

SQL> select os_username, username, timestamp, client_id, sql_text from dba_audit_trail; OS_USE USERNAME TIMESTAMP CLIENT_ID ------ -------- ------------------- ---------- SQL_TEXT -------------------------------------------------------------------------------- oracle ADDRBOOK 2014/04/17 14:16:32 admin SELECT * FROM ADDRBOOK.ADDRBOOK SQL> select os_username, dbusername, event_timestamp, client_identifier, sql_text from unified_audit_trail; OS_USE DBUSERNA EVENT_TIMESTAMP CLIENT_ID ------ -------- ------------------------------ ---------- SQL_TEXT -------------------------------------------------------------------------------- oracle ADDRBOOK 16-MAY-14 11.08.04.301729 AM admin SELECT * FROM ADDRBOOK.ADDRBOOK

Page 10: WebLogic Server から Oracle Database へユーザIDを渡す方法

10 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

「接続時にクライアントIDを設定」機能

Page 11: WebLogic Server から Oracle Database へユーザIDを渡す方法

11 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

データソース側の設定方法

1. 「データベース資格証明の使用」の有効化

2. 「接続時にクライアントIDを設定」の有効化

3. WebLogic Serverを再起動

Page 12: WebLogic Server から Oracle Database へユーザIDを渡す方法

12 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

1. 「データベース資格証明の使用」の有効化

• データソースの「構成」タブ→「Oracle」タブの「データベース資格証明の使用」チェックボックスをチェックし、「保存」ボタンを押します。

Page 13: WebLogic Server から Oracle Database へユーザIDを渡す方法

13 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

2. 「接続時にクライアントIDを設定」の有効化

• データソースの「構成」タブ→

「IDオプション」タブの「接続時にクライアントIDを設定」チェックボックスをチェックし、「保存」ボタンを押します。

Page 14: WebLogic Server から Oracle Database へユーザIDを渡す方法

14 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

アプリケーション側の設定方法

(Database12c利用時のみ) • weblogic.xmlに以下の設定を追加

クラス名: oracle.jdbc.OracleSQLPermission

ターゲット: clientInfo.OCSID.CLIENTID

アクション: (空欄)

weblogic.xml <security-permission> <security-permission-spec> grant { permission oracle.jdbc.OracleSQLPermission "clientInfo.OCSID.CLIENTID", "" }; </security-permission-spec> </security-permission>

Page 15: WebLogic Server から Oracle Database へユーザIDを渡す方法

15 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

利用時の前提条件

• WebLogic Server 10.3.6(+patch)と12c(12.1.2)で利用可能

• 10.3.6利用時には以下のbugの修正パッチ適用が必要

– Bug 11817754 - FEATURE TO COPY THE WEBLOGIC

AUTHENTICATED USER IN THE ORACLE CLIENT ID FIELD

• Oracle DatabaseとIBM DB2に対応

• DMS(Dynamic Monitoring Support)未対応のJDBC Driver

(例:ojdbc6.jar)の利用が必須

– DMS対応のJDBC Driver(例:ojdbc6dms.jar)では未対応

Page 16: WebLogic Server から Oracle Database へユーザIDを渡す方法

16 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

参考

• The WebLogic Server Blog

– Data Source Security Part 3 (2012/10/12)

• https://blogs.oracle.com/WebLogicServer/entry/data_source_security_

part_3

• http://orablogs-jp.blogspot.jp/2012/11/data-source-security-part-3.html

– Data Source Security Part 5 (2012/10/17)

• https://blogs.oracle.com/WebLogicServer/entry/data_source_security_

part_5

• http://orablogs-jp.blogspot.jp/2012/11/data-source-security-part-5.html

Page 17: WebLogic Server から Oracle Database へユーザIDを渡す方法

17 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.

Page 18: WebLogic Server から Oracle Database へユーザIDを渡す方法

18 Copyright © 2014, Oracle and/or its affiliates. All rights reserved.