当前位置: 首页 > 知识库问答 >
问题:

如何更改ASP.NET核心中Oracle数据库连接的协议?

唐俊楚
2023-03-14

我有一个 ASP.NET Core应用程序,它使用nuget包Oracle.ManagedDataAccess.Core v2.19.80和Dapper连接到Oracle数据库。根据请求数据,可能需要每次连接到不同的数据库。

连接发生字符串是这样创建的:

public DatabaseConnector(IConfiguration configuration, IDbConnectionFactory connectionFactory, ISyncPolicy policy)
{
    var packageSettings = configuration.GetPackageConfiguration();

    var connectionString = new OracleConnectionStringBuilder
        {
            DataSource = packageSettings.DataSource,
            UserID = packageSettings.Username,
            Password = packageSettings.Password,
            ConnectionTimeout = 5,
        };

    _dbConnection = connectionFactory.CreateConnection(connectionString.ConnectionString);
    _policy = policy;
}

运行以下查询时

SELECT sys_context('USERENV', 'NETWORK_PROTOCOL') AS network_protocol 
FROM dual

响应是< code>tcp。如何配置连接或连接字符串,或者如何将协议从< code>tcp更改为< code > TCP 。

根据这里的留档,这是支持的2种类型。我想确保我的连接是安全的(SSL/TLS 1.2)。

到目前为止,我已经阅读了以下文件,但还没有达到目标。

文件内容如下:

  • Ora文件参数
  • Microsoft Windows开发人员指南

我还尝试添加以下内容:

OracleConfiguration.OracleDataSources.Add("test", "(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname or IP>)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=<service name>)(SERVER=dedicated)))");

使用此命令执行查询

_dbConnection.Query<string>(databaseQuery, queryParameters);

我还查看了属性TnsAdmin,但不确定如何使用它,这在使用OracleConntionStringBuilder类构建查询字符串时暴露。它看起来像是ora文件的路径,但我没有拥有这样的文件。

共有2个答案

鲜于致远
2023-03-14

有两种加密SQLNET流量的方法

  1. 使用钱包/证书和网络层(SSL/TLS)
  2. 使用本机Oracle加密,该加密不会加密网络层,但会加密随网络层发送的每个数据包

在我的例子中,我们选择使用选项2,只要您在对查询的响应中看到ASE256(这是DB服务器端正在请求的)从v$session_connect_info中选择NETWORK_SERVICE_BANNER,其中SID=sys_context('USERENV','SID'),我会说您很好。

您可以按原样显式配置连接,但就我而言,我不必这样做,因为 oracle 服务器已配置为默认需要它。

OracleConfiguration.SqlNetEncryptionClient = "required";
OracleConfiguration.SqlNetCryptoChecksumClient = "required";

资料来源:

  1. 数据库安全 - 视频 34:00 的解释
  2. 甲骨文网络加密
长孙逸仙
2023-03-14

从版本10g版本2开始,本机网络加密和带有SSL/TLS的TCP/IP不再是高级安全选项的一部分,因此您可以配置数据库服务器和客户端中的所有元素以通过TCPS建立安全连接。

基本上,您需要在服务器端和客户端都使用orapki实用程序,并在服务器端重新配置listener.orasqlnet.ora文件。

在您的情况下,您需要在 Oracle 客户端中重新配置客户端元素,该客户端随 Windows 的 ODAC 组件一起提供。

您必须满足以下先决条件:

    < li >运行正常的数据库服务器12.2或更高版本(推荐) < li >安装了Oracle客户端的客户端计算机(推荐12.1或更高版本) < li >在您要用于TCPS的端口中没有阻止服务器和客户端之间通信的本地或网络防火墙。 < li >您可以对wallet使用自签名证书,也可以使用您自己公司的可信证书。

使用自动登录创建服务器钱包

$ mkdir -p /your_wallet_directory

$ orapki wallet create -wallet "/your_wallet_directory" -pwd yourpassword -auto_login_local
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

创建自签名证书并将其加载到钱包中

$ orapki wallet add -wallet "/your_wallet_directory" -pwd yourpassword \
  -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650
Oracle PKI Tool : Version 12.1.0.2
Copyright (c) 2004, 2014, Oracle and/or its affiliates. All rights reserved.

导出证书,以便我们稍后将其加载到客户端钱包中

$ orapki wallet export -wallet "/your_wallet_directory" -pwd yourpassword \
   -dn "CN=`hostname`" -cert /tmp/`hostname`_certificate.crt

客户钱包和证书

在客户端计算机中执行以下操作

$ mkdir -p /my_client_wallet 
$ orapki wallet create -wallet "/my_client_wallet" -pwd myclientpassword -auto_login_local

创建一个自签名证书并将其加载到客户端的钱包中

$ orapki wallet add -wallet "/my_client_wallet" -pwd myclientpassword -dn "CN=`hostname`" -keysize 1024 -self_signed -validity 3650

在客户端中导出证书,以便我们稍后可以将其加载到服务器中

$ orapki wallet export -wallet "/my_client_wallet" -pwd myclientpassword -dn "CN=`hostname`" -cert /tmp/clientcertificate.crt 

交换证书

连接的每一端都需要信任另一端,因此我们必须将来自服务器的证书作为受信任的证书加载到客户端钱包中,反之亦然。将每侧完成的导出证书转移到相反的一侧并使用导入

在客户端

Orapki 钱包添加 -钱包 “/my_client_wallet” -pwd 你的客户端密码 -trusted_cert -cert /serverhostname_certificate.crt

在服务器中

Orapki 钱包添加 -wallet “/your_wallet_directory” -pwd yourwalletpassword -
trusted_cert -cert /tmp/myclienthost-certificate.crt

一旦我们准备好钱包和连接两端的证书,我们就可以在$ORACLE_HOME/network/admin中配置sqlnet.ora文件

WALLET_LOCATION =
   (SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
       (DIRECTORY = /your_wallet_server_directory)
     )
   )

SQLNET.AUTHENTICATION_SERVICES = (TCPS,NTS,BEQ)
SSL_CLIENT_AUTHENTICATION = FALSE
SSL_CIPHER_SUITES = (SSL_RSA_WITH_AES_256_CBC_SHA, SSL_RSA_WITH_3DES_EDE_CBC_SHA)

您可能需要考虑要支持哪些密码套件。您可能希望避免那些支持SSLv3的密码套件,而选择那些仅支持TLS的密码套件。您的决定因Oracle数据库和客户端版本而异。

最后,配置监听器以接受SSL/TLS加密的连接。编辑< code > $ ORACLE _ HOME/network/admin/listener . ora 文件添加钱包信息以及TCPS条目。

请注意,我将 1521 用于标准连接,将 2484 用于 TCPS 连接

SSL_CLIENT_AUTHENTICATION = FALSE

WALLET_LOCATION =
  (SOURCE =
    (METHOD = FILE)
    (METHOD_DATA =
      (DIRECTORY = /your_wallet_directory)
    )
  )

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = yourdns)(PORT = 1521))
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
      (ADDRESS = (PROTOCOL = TCPS)(HOST = yourdns)(PORT = 2484))
    )
  )

ADR_BASE_LISTENER = /your_adr_path
 类似资料:
  • 本文向大家介绍php连接oracle数据库的核心步骤,包括了php连接oracle数据库的核心步骤的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php连接oracle数据库的核心步骤。分享给大家供大家参考,具体如下: 1、修改php.ini文件,打开extension=php_oci8.dll扩展。 2、拷贝php安装目录/ext/php_oci8.dll文件到system32目录下。

  • 我有一个多租户数据库。共享数据库有一个租户配置表,该表保存所有租户信息 每个租户数据库都有一个插入触发器,该触发器将新记录插入到将租户id附加到该记录的核心数据库中。 我需要知道插入来自哪个租户数据库,以便能够根据执行该过程的数据库设置租户id。 是否有一个唯一的ID相关的每个数据库,我可以依赖?

  • 我正在尝试使用带有TCPS协议的内核与oracle数据库建立连接 asp.net。当我打开连接时,它给了我可执行文件 网络传输:解析钱包位置的SSL失败 TCPS:无效的SSL钱包(魔术版) 注意:当我尝试使用与TOD预言机相同的钱包位置连接databes时,它已成功连接。但不连接 with.net 核心。

  • 但这是不是跳过了认证这一步呢?我似乎找不到一个例子连接它使用谷歌服务帐户。我猜您需要使用服务帐户的private_key/private_key_id/client_email进行连接?

  • 我试图创建一个连接到一个oracle db实例(oracle:薄)使用Airflow。 根据他们的文档,我输入了我的主机名,后跟端口号和SID: 主持人:举个例子。通讯:1524/sid 填写其他字段为: 控制类型:甲骨文 模式:用户名(文档说明:使用您的用户名作为模式) 登录:用户名 密码: * * * 建立连接后,它会为我尝试执行的每个查询(ORA-12514)提供保存错误代码。甲骨文似乎不让

  • 本文向大家介绍Python中的Oracle数据库连接,包括了Python中的Oracle数据库连接的使用技巧和注意事项,需要的朋友参考一下 Python可以使用名为cx_Oracle的python软件包连接到oracle。Oracle是著名且广泛使用的数据库之一,而python的数据处理功能可以很好地利用这种连接性。在本文中,我们将看到如何连接到oracle数据库和查询数据库。 安装cx_Orac