[seasar-dotnet:1533] Re: IDbConnectionにORACLE固有のOracleConnectionプロパティを設定する方法について

Ryo Miyagi [E-MAIL ADDRESS DELETED]
2009年 12月 23日 (水) 13:12:47 JST


宮城です。

> Open→SQLの発行の間で、OracleConnection.ClientIdを設定
> する方法があるのでしょうか?

CLIENT_IDENTIFIERを使ったことはありませんが、
DataSourceUtil.GetConnection(IDataSource dataSource)
の引数で渡しているIDataSource dataSourceを拡張することで対応できるかと思います。

IDataSourceの定義は、diconファイル(例: Ado.dicon) で指定しています。

例: Ado.dicon
  <component name="DataSource" class="Seasar.Extension.Tx.Impl.TxDataSource">
    <property name="DataProvider">Oracle</property>
    <property name="ConnectionString">"Data Source=ORCL;User
ID=s2dotnetdemo;Password=s2dotnetdemo"</property>
  </component>

上記例の場合、IDataSourceの実装は、Seasar.Extension.Tx.Impl.TxDataSource になります。

OracleConnection.ClientId を設定したい場合、
Seasar.Extension.Tx.Impl.TxDataSource を継承したクラスを作成します。

例: MyTxDataSource

public class MyTxDataSource : Seasar.Extension.Tx.Impl.TxDataSource
{
        public override IDbConnection GetConnection()
        {
            IDbConnection con = base.GetConnection();
            OracleConnection oracleCon = (OracleConnection) con;
            oracleCon.ClientId = GetClientId();
            return oracleCon;
        }

        private string GetClientId() {
             // ODP.NET のヘルプ見て実装しただけなので、間違っているかも。
             WindowsPrincipal user = new
WindowsPrincipal(WindowsIdentity.GetCurrent());
             return user.Identity.Name;
        }
}

実装した MyTxDataSource を diconファイルに定義します。

例: Ado.dicon
  <!-- componentタグのclass属性を、"MyNameSpace.MyTxDataSource" に変更 -->
  <component name="DataSource" class="MyNameSpace.MyTxDataSource">
    <property name="DataProvider">Oracle</property>
    <property name="ConnectionString">"Data Source=ORCL;User
ID=s2dotnetdemo;Password=s2dotnetdemo"</property>
  </component>


以上

2009年12月23日12:15 KIYOSUE Minoru <[E-MAIL ADDRESS DELETED]>:
>
>
> いつも大変お世話になります、清末@JMIです。
>
> DBのセキュリティ強化の観点から、Oracleのアプリケーションコ
> ンテキストを利用しようと考えております。
>
> この際、接続クライアントからDBサーバーへの接続時にODP.NETで
> CLIENT_IDENTIFIERを設定したいと思っています。
> OracleConnection.ClientIdを設定する場合は、接続をOpenした
> 後にのみ設定可能であるため、Open→SQLの発行の間での設定を
> 考えております。
>
> SeasarのConnection取得は、DataSourceUtil.GetConnection
> で実装されているため、Open直後にClientIdを設定する為には、
> 当該のUtilクラスを変更することになってしまいます。
>
> しかしながら、今後の保守を考えるとSeasarのソースを変えてし
> まうのは、バージョンアップ対応などが煩雑になるためしたくは
> ありません。
>
> Open→SQLの発行の間で、OracleConnection.ClientIdを設定
> する方法があるのでしょうか?
>
>
> ご多忙中大変恐縮に存じますが、よろしくお願いいたします。
>
>
> _______________________________________________
> seasar-dotnet mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-dotnet
>


seasar-dotnet メーリングリストの案内