【发布时间】: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 密码? -
另见 stackoverflow stackoverflow.com/questions/42115/…
-
@MarcGravell 谢谢你的时间,我想如果有人打开这个 .txt 文件,我在其中存储有关初始目录、数据源、id、密码的数据,他可以简单地访问这个 sql 数据库,不是这样吗?我还没有使用任何类型的安全性,你会向我推荐什么?非常感谢您再次光临。
-
@Marek “我还没有使用任何类型的安全性”......好吧,是的:你是。您正在使用 sql server 身份验证(如果包含密码),或者您正在使用集成安全性(又名“受信任”又名“sspi”)。没有“无”选项。最终,无论哪种情况:如果用户有权访问数据库,则用户有权访问数据库。如果您实际上关心安全性,那么我个人会使用 Web 服务作为抽象层 - 这可以避免恶意客户端发出任意 sql 的问题。客户的任何安全都是一个神话。将客户视为敌对。
-
@MarcGravell 然后我使用 Sql Server 身份验证:)。对不起那个错误。您能否推荐我任何链接,我可以在其中了解有关“作为抽象层的 Web 服务”的更多信息。请问您对存储登录详细信息以访问数据库有何看法?如果是编码的?再次感谢您的宝贵时间。我很高兴能学到一些东西。
标签: c# sql sql-server winforms encoding