Pra*_*een 5 .net c# sql-server oledb sql-server-2008
我的应用程序需要与SQL Server 2008建立安全连接.在服务器端启用了"强制加密",以下是我的C#应用程序中的连接字符串.
Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Use Encryption for Data=True;Trust Server Certificate=True;
Run Code Online (Sandbox Code Playgroud)
我没有在服务器中提供任何证书 - 因此我提供了Trust Server Certificate = True,因此未验证自签名服务器证书.
但是没有建立与以下错误的连接.
数据库错误:[DBNETLIB] [ConnectionOpen(SECDoClientHandshake()).] SSL安全性错误.
没有与安全性相关的两个属性,它可以正常工作.
我需要做些什么才能让它发挥作用?
使用该SqlConnection对象有两个优点.首先,您可以确保正确构建连接字符串,因为您可以使用SqlConnectionStringBuilder该类来构建它.其次,它的很多比OLEDB更快.
要构建此连接字符串......
Initial Catalog=emp_test;Persist Security Info=True;User ID=sa;Password=***;Data Source=172.21.70.94;Provider=SQLOLEDB;Use Encryption for Data=True;Trust Server Certificate=True;
Run Code Online (Sandbox Code Playgroud)
...使用SqlConnectionStringBuilder你会写一些像这样的代码......
var builder = new SqlConnectionStringBuilder();
builder.DataSource = "172.21.70.94";
builder.Encrypt = true;
builder.TrustServerCertificate = true;
builder.InitialCatalog = emp_test;
builder.PersistSecurityInfo = true;
builder.UserID = "sa";
builder.Password = "***";
var connection = new SqlConnection(builder.ToString());
Run Code Online (Sandbox Code Playgroud)
...该Encrypt属性在.NET Framework中保存此定义...
获取或设置一个布尔值,指示SQL Server是否使用SSL加密客户端和服务器之间发送的所有数据,如果服务器安装了证书.
...该TrustServerCertificate属性在.NET Framework中保存此定义...
获取或设置一个值,该值指示在绕过证书链以验证信任时是否加密通道.
所以我想说这是最安全的方法.您可以确保.NET Framework正确地构建连接字符串,并且您可以获得一组良好的定义,这些定义围绕这些属性基于其定义的证书的含义.
现在,既然您也连接到Oracle,那么最好的方法是继续构建OLEDB连接,因为您没有太多选择.但是这两个连接都是一个IDbConnection,所以你只需要一个工厂来建立正确的连接并返回一个IDbConnection.
这意味着您可以充分利用这两个方面,SqlConnection对象的性能和易用性以及对象的抽象,IDbConnection以便您的代码不必更改.
| 归档时间: |
|
| 查看次数: |
7677 次 |
| 最近记录: |