我正在使用form1创建一个简单的c#.net winform应用程序,它将连接到sql server。
我希望在建立与sql server的连接之前,应用程序要求用户输入登录名&密码连接。
为此我该怎么做:
获取登录名称&两个文本框中的密码&将它们传递给连接字符串 要么 我应该将它们传递给app.config文件&然后使用form1.cs中的app.config文件中的字符串?
这可以解决安全问题吗?如果没有,那么实现这项任务的其他方式是什么?
答案 0 :(得分:5)
我会这样做:
SqlConnectionStringBuilder
组件app.config
<强>更新强>
我的建议是存储基本连接字符串,如下所示:
<configuration>
<connectionStrings>
<add name="MyConnStr"
connectionString="server=A9;database=MyDB;" />
</connectionStrings>
</configuration>
然后将这个“骨架”连接字符串(不完整 - 仅此一项不起作用!)加载到SqlConnectionStringBuilder
:
string myConnStr = ConfigurationManager.ConnectionStrings["MyConnStr"].ConnectionString;
SqlConnectionStringBuilder sqlcsb = new SqlConnectionStringBuilder(myConnStr);
然后在对话框中从用户处获取用户名和密码,并将其添加到连接字符串构建器中:
sqlcsb.UserID = tbxUserName.Text.Trim();
sqlcsb.Password = tbxPassword.Text.Trim();
然后从SqlConnectionStringBuilder
:
string completeConnStr = sqlcsb.ConnectionString;
using(SqlConnection _con = new SqlConnection(completeConnStr))
{
// do whatever you need to do here....
}
答案 1 :(得分:1)
将登录名传递给连接字符串。 app.Config不是存储用户交互的地方。
答案 2 :(得分:1)
实现它的另一种方法可能是使用Windows身份验证在SQL服务器上进行身份验证。这样,本地Windows用户可以拥有数据库的某些安全权限,并且应用程序的用户必须输入任何凭据。
使用的凭据是什么?它们是用于与数据库建立连接,还是用于访问应用程序中的用户帐户条目和安全权限?
答案 3 :(得分:1)
要保护字符串,请使用SecureString
Class。
答案 4 :(得分:1)
Sql身份验证详细信息始终与应用程序身份验证详细信息分开(有例外...例如:您创建自己的sql server客户端版本)