簡體   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