目前我有一个包含2个(实际上是3个,但一个是单元测试)项目的解决方案;
>表格
>班级图书馆
在类库中,我有一个名为Database.cs的类,它与MySQL数据库通信.我不直接与此Database.cs类通信,但类库中的其他类(例如Products.cs).
虽然,我需要凭据连接到这个MysqL数据库,我不知道哪种方式可以安全地进行.
将其存储在类库中/对类中的凭据进行硬编码.
这对我来说没有意义,因为用户可以轻松地获取DLL并且他在技术上获得了数据库的凭据.
将凭证通过表单传递给类(如Products.cs),该类在初始化Database对象时传递它
可以工作,尝试,它的工作原理,但我不确定这是否是“最好的”方法.
编写一个包含带凭据的属性的静态类
同样,如果我在类库中创建这个静态类,我几乎和我的第一个例子不同.如果我要在Form中创建这个静态类,我需要从我的类库中添加对Form-project的引用(不是我希望它的方式).
我试着查找东西,但我显然做得不对.有没有其他方法可以做到这一点?
解决方法
通常,连接到数据库所需的所有信息都以connection string的形式存储在应用程序配置文件中.
如果您的应用程序是Web应用程序,那么您很高兴,因为web.config(Web应用程序配置文件)存储在Web服务器上,并且永远不会提供给Web请求.
但是,如果您的应用程序是Windows窗体应用程序,则安全性考虑因素意味着使用您的应用程序的任何用户都可以查看应用程序配置文件并获取凭据.如果是Microsoft sql,我建议使用Windows身份验证.但是对于MysqL,我猜你注定要将用户名和密码存储到连接字符串中.然后我建议在encrypting之前保护你的连接字符串.
此外,如果您的用户可以/必须对MysqL服务器进行身份验证(输入MysqL用户名和密码),那么您可以使用连接字符串模板并用用户名和密码替换它的某些部分:
的app.config
<connectionStrings> <add name="MyApplication" connectionString="Location=myServerAddress;Data Source=myDataBase;User ID={0};Password={1}; Port=3306;Extended Properties=""""; /> </connectionStrings>
C#代码
var username = textBoxUsername.Text; var password = textBoxPassword.Text; var connectionString = string.Format(ConfigurationManager.ConnectionStrings["MyApplication"].ConnectionString,username,password) // at this point you have a connection string whitch could be passed to your Products class