无法从 C# 通过 Wallet 连接到 Oracle DB

Posted

技术标签:

【中文标题】无法从 C# 通过 Wallet 连接到 Oracle DB【英文标题】:Not able to connect to Oracle DB through Wallet from C# 【发布时间】:2021-04-26 08:51:07 【问题描述】:

我正在尝试通过钱包连接到供应商的数据库。为此,供应商提供了一个包含两个文件(一个 .ora 文件和一个 .sso 文件)的钱包 zip 文件。 zip 文件包含 tnsnames.ora 和 cwallet.sso

首先,我安装了 Oracle 客户端版本 19.0 Home1,它自动创建了一个名为 sqlnet.ora 的文件。我将文件 tnsnames.ora 复制到创建 sqlnet.ora 的同一文件夹中,并尝试了不同的 wsys 来连接数据库,但每次尝试都失败了。我尝试以类似的方式实现,这在此链接中进行了解释,但出现“TNS:丢失联系”、“TNS:无法解析指定的连接标识符”的错误。

我尝试了指定here 的解决方案,但最终出错。最后,现在的错误是“连接失败,因为目标主机或对象不存在”。连接详细信息在 tnsnames 中指定。 ora 包含服务名和主机名。我在 sqlnet.ora 文件中添加了 Wallet 位置以及以下代码:

SSL_CLIENT_AUTHENTICATION = FALSE
SSL_VERSION = 1.2
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA)
SSL_SERVER_DN_MATCH = ON

C#中的连接代码如下:

            //string strCon = "User Id =XXXX;Password=XXXXXXX;Data Source=(DESCRIPTION =(ADDRESS=(PROTOCOL=TCP)(HOST=XXXXXXXX)(PORT=2460))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XXXX))" +
        //    "(SECURITY=(SSL_SERVER_CERT_DN='C=US,ST=Washington,L=Seattle,O=Amazon.com,OU=RDS,CN=mcsldb01.ckc6ued9hacf.ap-south1.rds.amazonaws.com')));";

        using (OracleConnection con = new OracleConnection(strCon))
        //using (OracleConnection con = new OracleConnection(@"Data Source=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=XXXXXXXX)(PORT=2460)))(CONNECT_DATA=(SERVER=DEDICATED)(SERVICE_NAME=XXXX)));User Id=XXXX;Password=XXXXXXXX;"))
        //using (OracleConnection con = new OracleConnection(cntn))
        
            using (OracleCommand cmd = con.CreateCommand())
            
                try
                
                    //TNS_ADMIN and wallet directory entries can be entered in the app.config file.

                    con.Open();

                    Console.WriteLine("Successfully connected to Oracle Autonomous Database");

                    //Retrieve database version info
                    cmd.CommandText = "SELECT BANNER FROM V$VERSION";
                    OracleDataReader reader = cmd.ExecuteReader();
                    reader.Read();
                    Console.WriteLine("Connected to " + reader.GetString(0));
                
                catch (Exception ex)
                
                    Console.WriteLine(ex.Message);
                
                Console.ReadLine();
            
        
    

请提出任何解决方案。我哪里错了?无法继续进行。

【问题讨论】:

【参考方案1】:

猜测,它可能是一个连接钱包,而不是提供的 SSL 钱包,即,只是一种隐藏用户名和密码的机制。如果是这种情况,连接将类似于:

new OracleConnection(@"Data Source=NAME_IN_TNSNAMES;User Id=/"))

其中 NAME_IN_TNSNAMES 映射到 tnsnames.ora 文件中的条目。

此处的示例(从 SQL Plus 的角度来看)

https://connor-mcdonald.com/2015/09/21/connection-shortcuts-with-a-wallet/

【讨论】:

它只是 SSL 钱包。现在经过多次尝试,错误有点不同。现在错误是“解析钱包位置中的 SSL 失败”。我尝试实施解决方案 [javaer101.com/en/article/41843194.html](here),但在提到的证书上不理解。该证书是否应由供应商提供?

以上是关于无法从 C# 通过 Wallet 连接到 Oracle DB的主要内容,如果未能解决你的问题,请参考以下文章

无法从c#连接到excel

AIR NativeProcess standardInput无法连接到应用。

无法从 Visual Studio C# 连接到数据库

无法使用 C# 从 Xamarin.iOs 和 Xamarin.Android 连接到 MySql

从 C# 连接到 .accdb。 “无法识别的数据库格式”错误

尝试在 C# 中连接到 Excel 电子表格