【发布时间】:2017-07-14 16:55:29
【问题描述】:
有没有办法使用托管数据访问设置Kerberos身份验证?
我们有一个 C# 应用程序,它连接到我们的 Oracle 数据库以获取/插入一些数据。
我必须在每个用户连接到 Oracle 数据库时实施 Kerberos 身份验证。
在this link 之后,我设法在我们的数据库上设置了一个 Kerberos 用户。其余步骤已实施,因为 Oracle 客户端已在大多数用户的 PC 上删除。但是,有些用户的 PC 上没有 Oracle Client Dropped,所以我需要想办法在 app.config 中设置这些设置。
sqlnet.ora 文件:
SQLNET.AUTHENTICATION_SERVICES=(kerberos5pre) SQLNET.KERBEROS5_CC_NAME=**** SQLNET.KERBEROS5_CONF=**** SQLNET.KERBEROS5_CONF_MIT=true SQLNET.AUTHENTICATION_KERBEROS5_SERVICE=oracle SQLNET.FALLBACK_AUTHENTICATION=TRUE
以及 krb5.conf 文件的设置:
[libdefaults]
default_realm = *****
dns_lookup_realm = 假 dns_lookup_kdc = 真
passwd_check_s_address = false udp_preference_limit =
kdc_timesync =
[domain_realm] ***** = ****
我见过this link,但我没有设法设置正确的设置。
我想象过,是这样的:
app.config:
<oracle.unmanageddataaccess.client>
<version number="*">
<settings>
<setting name="TraceOption" value="7"/>
<setting name="PerformanceCounters" value="0"/>
<setting name="SQLNET.AUTHENTICATION_SERVICES" value="kerberos5pre"/>
</settings>
<dataSources>
<dataSource alias="SampleDataSource" descriptor="(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL))) "/>
</dataSources>
</version>
</oracle.unmanageddataaccess.client>
和代码:
string ProviderName = "Oracle.ManagedDataAccess.Client";
DbProviderFactory factory = DbProviderFactories.GetFactory(ProviderName);
DbDataSourceEnumerator dsenum = factory.CreateDataSourceEnumerator();
DataTable dt = dsenum.GetDataSources();
OracleConnectionStringBuilder csb = new OracleConnectionStringBuilder
{
DataSource = (string)dt.Rows[1][1],
Pooling = false
};
_connectionString = csb.ToString();
_con = new OracleConnection(_connectionString);
_con.Open();
【问题讨论】: