【问题标题】:Best way to encode SqlConnection string information编码 SqlConnection 字符串信息的最佳方式
【发布时间】:2013-08-07 10:49:46
【问题描述】:

您好,我在下面有此代码,reads Sqlconnection string 信息。但问题是我按原样存储这些信息。没有编码所以在我看来这样做是非常不安全的。有什么办法可以encode然后解码?还是散列?非常感谢您的时间和 cmets。

internal static class DataSource
    {
        private static string _ConnectionString;
        public static string ConnectionString
        {
            get
            {
                if (_ConnectionString == null)
                    _ConnectionString = FunctionToDynamicallyCreateConnectionstring();
                return _ConnectionString;
            }
        }
        private static string FunctionToDynamicallyCreateConnectionstring()
        {
            string path = "C:\\Users\\marek\\Documents\\Visual Studio 2012\\Projects\\tours\\tours\\sql_string.txt";
            StreamReader sr = new StreamReader(File.Open(path, FileMode.Open));

            SqlConnectionStringBuilder cb = new SqlConnectionStringBuilder();

            cb.DataSource = sr.ReadLine();
            cb.InitialCatalog = sr.ReadLine();
            cb.UserID = sr.ReadLine();
            cb.Password = sr.ReadLine();

            return cb.ToString();
        }
    }

这是我存储它的方式:

 string path = "C:\\Users\\marek\\Documents\\Visual Studio 2012\\Projects\\tours\\tours\\sql_string.txt";

            StreamWriter sw = new StreamWriter(File.Create(path));
            sw.WriteLine(textBox1.Text);
            sw.WriteLine(textBox2.Text);
            sw.WriteLine(textBox3.Text);
            sw.WriteLine(textBox4.Text);


            sw.Dispose();

也许这甚至不是一个好方法。我是初级程序员,如果我的想法很糟糕,请原谅。

【问题讨论】:

  • 一个连接字符串是:只是一个字符串。最简单的存储方式是:作为字符串 - 例如,File.WriteAllText,或者作为配置文件中的设置。您提到“不安全”;你想保护什么?你担心人们浏览文件吗?在这种情况下:您使用什么类型的安全性?受信任/sspi?还是 sql server 密码?
  • @MarcGravell 谢谢你的时间,我想如果有人打开这个 .txt 文件,我在其中存储有关初始目录、数据源、id、密码的数据,他可以简单地访问这个 sql 数据库,不是这样吗?我还没有使用任何类型的安全性,你会向我推荐什么?非常感谢您再次光临。
  • @Marek “我还没有使用任何类型的安全性”......好吧,是的:你是。您正在使用 sql server 身份验证(如果包含密码),或者您正在使用集成安全性(又名“受信任”又名“sspi”)。没有“无”选项。最终,无论哪种情况:如果用户有权访问数据库,则用户有权访问数据库。如果您实际上关心安全性,那么我个人会使用 Web 服务作为抽象层 - 这可以避免恶意客户端发出任意 sql 的问题。客户的任何安全都是一个神话。将客户视为敌对。
  • @MarcGravell 然后我使用 Sql Server 身份验证:)。对不起那个错误。您能否推荐我任何链接,我可以在其中了解有关“作为抽象层的 Web 服务”的更多信息。请问您对存储登录详细信息以访问数据库有何看法?如果是编码的?再次感谢您的宝贵时间。我很高兴能学到一些东西。

标签: c# sql sql-server winforms encoding


【解决方案1】:

是的,您可以加密连接字符串。受保护的配置模型允许您使用两个受保护的配置提供程序加密数据。它们是:

RSAProtectedConfigurationProvider:这是默认提供程序,使用 RSA 公钥加密算法来加密和解密数据。

DataProtectionConfigurationProvider:此提供程序使用 Windows 数据保护应用程序编程接口 (DPAPI) 来加密和解密数据。

你可以看看here看看它是怎么做的。

【讨论】:

  • 很高兴再次见到你,Ehsan。您认为这也适用于 .txt 文件吗?因为我现在正在使用它来读取 SqlConnection 字符串。感谢您的宝贵时间。
  • @Marek 不,不会。它适用于 web.config/app.config。虽然你可以为txt文件自己写一个非常相似的
猜你喜欢
  • 1970-01-01
  • 2012-03-18
  • 1970-01-01
  • 1970-01-01
  • 2015-12-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多