gpt4 book ai didi

c# - 正确存储 SQL 凭据

转载 作者:可可西里 更新时间:2023-11-01 06:37:34 25 4
gpt4 key购买 nike

首先,这是一个教育问题 - 不是我在生产应用程序中实现的问题,因为我正在学习 C# 的基础知识。

目前我有一个包含2个(实际上是3个,但一个是单元测试)项目的解决方案;

  • 表格
  • 类库

在类库中,我有一个名为 Database.cs 的类,它与 MySQL 数据库进行通信。我不直接与此 Database.cs 类通信,但类库中的其他类会这样做(例如 Products.cs)。虽然,我需要凭据才能连接到此 MySQL 数据库,但我不确定要以哪种方式安全地进行连接。

将其存储在类库中/在类中对凭据进行硬编码。

这对我来说没有意义,因为用户可以轻松获取 DLL,并且他在技术上获得了数据库的凭据。

通过表单将凭据传递给一个类(如 Products.cs),然后该类在初始化数据库对象时传递它

可以工作,尝试过并且有效,但我不确定这是否是“最简洁”的方法。

编写一个静态类,其中包含带有凭据的属性

同样,如果我在类库中创建这个静态类,我将与第一个示例大不相同。如果我要在 Form 中创建这个静态类,我需要从我的类库中添加对 Form-project 的引用(不是我想要的方式)。

我尝试查找资料,但显然我做的不对。还有其他方法吗?

最佳答案

首先,永远不要将凭据硬编码到代码中,因为凭据往往会随着时间的推移而变化,这意味着每次 SQL 凭据发生变化时,您都必须重新编译和重新部署您的应用程序。

通常连接数据库所需的所有信息都以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

关于c# - 正确存储 SQL 凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15280141/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com