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

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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.