繁体   English   中英

c#如何加密SQL Server连接字符串?

[英]c# How to encrypt SQL Server connection string?

我想创建一个连接到SQL Server并具有完全访问权限的客户端。

如何使其他人看不到SQL Server的连接字符串并通过其他数据库编辑器访问它? 我知道.NET应用程序可以反编译,所以我担心我的服务器。

这是一个简单的连接字符串加密/解密机制的不太安全的参考实现。

首先,使用Base64编码方案对连接字符串进行编码。

未编码的连接字符串:

server=localhost\SQLEXPRESS2012;database=testdb;uid=testuser;pwd=supersecret

Base64编码的连接字符串:

c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA==

之后, App.config文件中的相应行应如下所示。

<add name="TestDb" connectionString="c2VydmVyPWxvY2FsaG9zdFxTUUxFWFBSRVNTMjAxMjtkYXRhYmFzZT10ZXN0ZGI7dWlkPXRlc3R1c2VyO3B3ZD1zdXBlcnNlY3JldA==" providerName="System.Data.SqlClient" />

最后,修改您的DbContext使其能够使用编码的连接字符串创建数据库连接。

using System;
using System.Configuration;
using System.Data.Common;
using System.Data.Entity;
using System.Data.SqlClient;
using System.Text;

namespace TestApp
{
    public class TestDb : DbContext
    {
        public TestDb() : base(CreateConnection("TestDb"), true)
        {
        }

        static DbConnection CreateConnection(string dbName)
        {
            string encodedCs = ConfigurationManager.ConnectionStrings[dbName].ConnectionString;
            string decodedCs = Encoding.UTF8.GetString(Convert.FromBase64String(encodedCs));
            return new SqlConnection(decodedCs);
        }
    }
}

如您所见,此实现使用Base64编码方案,如果最终用户知道自己在做什么,则可以很容易地将它们反转。

具有完全数据库权限的可公开访问的客户端通常从来都不是一个好主意,因此您可能需要重新考虑一下。

这是一篇有关您的问题的不错的MSDN文章:

https://msdn.microsoft.com/zh-CN/library/89211k9b(v=vs.110).aspx

如果将客户端部署到Azure,您还可以在门户中存储与应用程序分开的机密配置信息。

一些更多的想法:

通过单独的远程服务检索连接字符串,并使用SecureString实例处理它。

或者只是通过将整个SQL db隐藏在服务墙后根本不给客户端提供连接字符串。

使用证书始终是避免在配置中存储机密信息的好方法。

SQL Azure具有一项新功能,允许您使用证书来访问数据库。 有关更多详细信息,请参见此链接: https : //azure.microsoft.com/zh-cn/documentation/articles/sql-database-aad-authentication/ (第7.3节)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM