首先,原谅我的英语。
我和我的小组正计划申请。此应用程序可以安装到其他计算机,并应连接到服务器,数据库受密码保护。
作为一名学生,我们总是以天真的方式做到这一点:
SqlConnection myConnection = new SqlConnection("user id=username;" +
"password=password;server=serverurl;" +
"database=database; " +
"connection timeout=30");
始终硬编码。
如果我们更改数据库的密码或者改变我们的服务器怎么办?
我们还要更改代码中的值,重新编译并在pc中重新安装应用程序。有没有动态的方式来做这些?
我们认为在应用程序的第一次运行中,系统将提示用户输入连接详细信息,并将该数据保存到一个文件中,应用程序每次启动时都会将其提取并用于数据库连接,但是有一个涉及密码。
任何建议,想法,概念,样品等......?如何以更专业的方式做到这一点?请帮忙......谢谢。
答案 0 :(得分:1)
您可以将数据库设置存储在app.config
中答案 1 :(得分:0)
Windows允许您加密文件,因此只有作为所有者运行的进程才能读取它们。您可以将密码存储在文件中并加密。请参阅MSDN上的File.Encrypt。
这只是安全模型中的一个因素。您可能还希望在应用程序级别加密文件,以便用户运行的恶意软件不会嗅探密码。
答案 2 :(得分:0)
您可以将您的凭据存储在配置文件中 - 这样,无需在每次密码更改时重新编译项目。
配置文件也可以加密,因此您只能通过正在进行的应用程序更改密码。
答案 3 :(得分:0)
有几种方法可以做到这一点。首先,您可以在 app.Config / web.config 文件中保存connectionString。您的连接对象可以使用
访问此字符串PROJECTNAME.Properties.Settings.Default.YOURCONNECTIONSTRINGNAME
您的app.config文件可能看起来像这样
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings>
<add name="Winforms_Demo.Properties.Settings.dbNordwindConnectionString"
connectionString="Data Source=(local)\SQLEXPRESS;Initial Catalog=dbNordwind;User ID=sa"
providerName="System.Data.SqlClient" />
</connectionStrings>
</configuration>
正如您所看到的,这种可能性仍然保存任何硬编码的用户凭据(尽管您可以通过手动编辑config.file来更改它们(即使在编译之后)。您可以通过添加来创建这样的配置文件项目的新数据源(例如sql server datasource)。然后向导将询问保存connectionString的位置。
另一种可能性是connectionStringBuilder。这个类提供了一些属性:
SqlConnectionStringBuilder conbuild = new SqlConnectionStringBuilder();
conbuild.InitialCatalog = "dbNordwind"; // database name
conbuild.IntegratedSecurity = false; // true if you use winAuthent
conbuild.UserID = "sa"; // e.g get this info by showing a authent form
conbuild.Password = "123";
conbuild.DataSource = "servername";
SqlConnection con = new SqlConnection(conbuild.ConnectionString);
使用此方法,您甚至可以访问文件并读取任何所需数据。在这种情况下,您必须查看文件的安全措施!
保护您的文件可以通过加密(System.Security命名空间)或将数据保存到任何 isolatedStorage (特定于用户 - 将使用Windows安全性)或通过使用“aspnet_regiis -pef”来加密任何配置文件。