[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 メーリングリストの案内