gpt4 book ai didi

c# - 如何在 ASP.NET Core 中更改 Oracle 数据库连接的协议(protocol)?

转载 作者:行者123 更新时间:2023-12-04 22:36:21 25 4
gpt4 key购买 nike

我有一个 ASP.NET Core 应用程序,它使用 nuget 包 Oracle.ManagedDataAccess.Core 连接到 Oracle 数据库v2.19.80 和 Dapper .根据请求数据,可能每次都需要连接到不同的数据库。
连接发生字符串是这样创建的:

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
回复是 tcp .如何配置连接或连接字符串,或者我可以做些什么来从 tcp 更改协议(protocol)至 tcps .
基于文档 here , 这些是 2 种支持的类型。我想确保我的连接是安全的 (SSL/TLS 1.2)。
到目前为止,我已经阅读了以下文档,但还没有实现目标。
文件内容如下:
  • Ora file parameters
  • Developer's guide for 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但不确定如何使用它,它在使用 OracleConnectionStringBuilder 构建查询字符串时暴露出来类(class)。它看起来像是一个 ora 文件的路径,但我没有这样的文件。

    最佳答案

    从版本 10g 第 2 版开始, native 网络加密和带有 SSL/TLS 的 TCP/IP 不再是高级安全选项的一部分,因此您可以配置数据库服务器和客户端中的所有元素以通过 TCPS 建立安全连接。
    基本上你需要使用 orapki服务器和客户端中的实用程序,并重新配置 listener.orasqlnet.ora服务器端的文件。
    在您的情况下,您需要重新配置随 Windows 的 ODAC 组件一起提供的 Oracle 客户端中的客户端元素。
    您必须满足以下先决条件:

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

  • 创建自动登录服务器钱包
    $ 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 钱包添加 -wallet "/my_client_wallet"-pwd yourclientpassword -trusted_cert -cert/serverhostname_certificate.crt
    在服务器中
    orapki 钱包添加 -wallet "/your_wallet_directory"-pwd yourwalletpassword
    -trusted_cert -cert/tmp/myclienthost-certificate.crt
    一旦我们准备好钱包和连接两端的证书,我们就可以配置 sqlnet.ora文件在 $ORACLE_HOME/network/admin
    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 加密连接。编辑 $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

    关于c# - 如何在 ASP.NET Core 中更改 Oracle 数据库连接的协议(protocol)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63834638/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com