2

我有通过预先确定的用户名和密码连接到 SqlServer 的程序。前任:

static void Main(string[] args)
{
    string UserName, Password;
    UserName = "Name";
    Password = "Pass";

    SqlConnection conn = new SqlConnection("...");
}

如何保护密码不被反编译?

4

3 回答 3

15

一开始就不要这样做。该安全系统旨在保护用户免受试图让用户运行不良代码的攻击者的攻击。它并非旨在保护您的程序免受其用户的侵害,而这正是您正在尝试做的。

出于多种原因,将用户名和密码硬编码到可执行文件中是最糟糕的做法。首先,因为它授予拥有您的程序的人访问数据库的权限,而不是授权的人。其次,这意味着如果您需要更改用户名或密码,则需要重新发布程序。第三,如果密码真的泄露了,而且只需要泄露一次,会发生什么?您无法将访问权限仅限于攻击者。

一个更好的解决方案是要求每个用户都有自己的帐户。让他们输入密码。或者将数据库访问与其他一些身份和授权方案集成,如 Windows 身份验证或其他。

于 2012-04-29T13:55:34.677 回答
3

如果此程序将始终在同一台计算机上运行,​​您可以将此信息放在配置文件的 connectionStrings 部分并使用 DPAPI 对其进行加密

于 2012-04-29T13:06:15.153 回答
1

加密密码是一回事。如果你问我,在你的数据库上有一个专门的用户,只有一组必要的数据库对象权限是另一个,更重要的是。

于 2012-04-29T13:49:49.503 回答