我有一个 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)。
到目前为止,我已经阅读了以下文件,但还没有达到目标。
文件内容如下:
我还尝试添加以下内容:
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文件的路径,但我没有拥有这样的文件。
有两种加密SQLNET流量的方法。
在我的例子中,我们选择使用选项2,只要您在对查询的响应中看到ASE256(这是DB服务器端正在请求的)从v$session_connect_info中选择NETWORK_SERVICE_BANNER,其中SID=sys_context('USERENV','SID')
,我会说您很好。
您可以按原样显式配置连接,但就我而言,我不必这样做,因为 oracle 服务器已配置为默认需要它。
OracleConfiguration.SqlNetEncryptionClient = "required";
OracleConfiguration.SqlNetCryptoChecksumClient = "required";
资料来源:
从版本10g版本2开始,本机网络加密和带有SSL/TLS的TCP/IP不再是高级安全选项的一部分,因此您可以配置数据库服务器和客户端中的所有元素以通过TCPS建立安全连接。
基本上,您需要在服务器端和客户端都使用orapki
实用程序,并在服务器端重新配置listener.ora
和sqlnet.ora
文件。
在您的情况下,您需要在 Oracle 客户端中重新配置客户端元素,该客户端随 Windows 的 ODAC 组件一起提供。
您必须满足以下先决条件:
使用自动登录创建服务器钱包
$ 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