c# - 存储全局/共享应用程序登录名/密码的常用方法有哪些?

标签 c# mysql .net security passwords

我工作的团队设计了许多在整个组织内部使用的应用程序。我们使用 MySQL 数据库,并不真正关心跟踪每个用户的 MySQL 访问,因为没有必要。我们建立了基于应用程序的用户帐户,以便我们可以监控每个应用程序的使用情况和访问权限,并且我们将应用程序设计为只要用户已分配对该特定应用程序的访问权限即可自动登录。

目前,我们将登录信息存储在 DSN 文件中,在应用程序中创建连接时会读取这些文件。这是将登录信息与应用程序分离的最简单方法,因为此信息有时需要更改。但是,这显然不太安全,因为找到 DSN 文件的任何人都将拥有应用程序的用户和密码。

我们还利用 C# 应用程序中的资源文件来管理登录。

展望 future ,我想考虑更好的方法来管理这些应用密码。如上所述,我们不想维护用户帐户,因为这会需要太多维护...应用程序帐户对我们来说是一个很好的平衡,因为我们没有太多帐户,但至少能够跟踪每个帐户的使用情况应用程序基础。

我并不是在寻找有关我们所使用的方法的安全性讲座,因为我知道它们并不安全。

但是有人对更安全、也更容易维护的方法有建议吗?我听说其他人像我们一样使用应用程序登录名/密码,但我不太确定他们如何维护登录名。

最佳答案

对于后来遇到这个问题的人来说,集成 Windows 安全显然是最好的选择,正如上面所指出的,但就我而言,这有点过分了,因为我必须为 300 多个用户维护每个用户的访问权限(这对于我的小团队来说是不可行的,也没有必要)。我们已经使用应用凭据设置了应用。

因此,我发现管理配置文件安全性的方法是以下两种方法之一:

  • 您可以加密配置文件中存储的凭据:

https://learn.microsoft.com/en-us/dotnet/framework/data/adonet/connection-strings-and-configuration-files

<configProtectedData defaultProvider="RsaProtectedConfigurationProvider">  
  <providers>  
    <add name="RsaProtectedConfigurationProvider"   
      type="System.Configuration.RsaProtectedConfigurationProvider, ... />  
    <add name="DataProtectionConfigurationProvider"   
      type="System.Configuration.DpapiProtectedConfigurationProvider, ... />  
  </providers>  
</configProtectedData>
  • 或者您可以将凭据存储为 secret :

https://learn.microsoft.com/en-us/aspnet/core/security/app-secrets?view=aspnetcore-2.2&tabs=windows

使用 secret 管理器, secret 存储在此处:

%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json

关于c# - 存储全局/共享应用程序登录名/密码的常用方法有哪些?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55924417/

相关文章:

php - MySQL 表更新错误

.net - 如何以编程方式判断 Word 宏是否是从 VB.Net/C# 签名的

java - C#、Java SQLite 无法读取/写入

java - 你能用 C# 编写最终函数吗?

c# - 如何增加 WinForms 中 ListViewItems 的 AutoPopDelay 值?

C#反序列化具有多个可能命名空间的xml

mysql - SQL 数据库迁移到 Salesforce/另一个 CRM(一次性导入)

php - 为什么 Controller 路由返回时不保存多个图像?

c# - 如何在保持打开状态的同时将 "this.ShowInTaskBar"更改为 "form.ShowDialog()"?

.net - 如何在生产机器上嗅探 .NET 中捕获的异常?