我有程序通过预定的用户名和安装程序连接到SqlServer。密码。 例如:
static void Main(string[] args)
{
string UserName, Password;
UserName = "Name";
Password = "Pass";
SqlConnection conn = new SqlConnection("...");
}
如何保护密码免受反编译?
答案 0 :(得分:15)
首先,不要这样做。安全系统旨在保护用户免受攻击者的攻击,他们试图让用户运行错误的代码。它并非旨在保护您的程序 其用户,而您正在尝试这样做。
由于多种原因,将用户名和密码硬编码到可执行文件中是最糟糕的做法。首先,因为它授予拥有您的程序的人访问数据库的权限,而不是授权的人。其次,这意味着如果您需要更改用户名或密码,则需要重新发送程序。第三,如果密码确实存在,并且只需要一次,会发生什么?您无法限制只访问攻击者。
更好的解决方案是要求每个用户都拥有自己的帐户;让他们输入密码。或者将数据库访问与其他身份和授权方案集成在一起,例如Windows身份验证或其他任何方式。
答案 1 :(得分:3)
如果此程序将始终在同一台计算机上运行,您可以将此信息放在配置文件and use DPAPI to encrypt it的connectionStrings部分。
答案 2 :(得分:1)
加密密码是一回事。如果你问我,在数据库上拥有一个专用用户,只需要对数据库对象拥有一组必要的权限,这一点就更为重要了。