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

时间:2021-04-26 08:51:07

标签: oracle

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

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

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

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 个答案:

答案 0 :(得分:0)

猜测,它可能是一个连接钱包,而不是已提供的 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/

相关问题