c# - 配置文件 - 加密连接字符串
问题描述
我正在尝试开发一个连接到 SQL 数据库的 C# Winform 应用程序。
到目前为止,我能够将最敏感的数据从我的 XML 配置文件移动到外部 XML 配置文件,但仅此而已。
我要做的最后一件事是加密该文件,因为许多人都可以访问应用程序所在的目录。
我的主 [APP] 配置文件如下所示:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<configSections>
</configSections>
<connectionStrings configSource="conn_string.config"/>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.7.2" />
</startup>
</configuration>
还有我的 [conn_string] 外部配置文件,我试图在其中隐藏连接字符串:
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
<add name="myConnectionStringName"
providerName="System.Data.SqlClient"
connectionString="Data Source=ServerName;Initial
Catalog=InitialDatabaseName;User=UserName;Password=MyPassword;Application Name=MyAppName" />
</connectionStrings>
现在谈到加密,我读到 asp-netregiis.exe 只寻找名为“web”的文件,所以我暂时将“conn_string”文件重命名为“web”
并尝试了加密(通过开发人员命令行 VS):
aspnet_regiis -pef "connectionStrings" "path_to_my_conn_string_file"
结果是:~我的翻译
The web.config file doesn't contain a configuration tag
所以我添加了一个这样的:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<connectionStrings>
<add name="myConnectionStringName"
providerName="System.Data.SqlClient"
connectionString="Data Source=ServerName;Initial
Catalog=InitialDatabaseName;User=UserName;Password=MyPassword;Application Name=MyAppName" />
</connectionStrings>
</configuration>
现在它抱怨:〜再次我的翻译
File format configSource must be an element conatining section name
解决方案
您正在采取的使用 aspnet_Regiis 的步骤实际上适用于托管在 Internet 信息服务器 (IIS) 中的 Web 应用程序。它正在寻找的文件实际上是“web.config”。您提到正在构建的应用程序是一个 winforms 应用程序,它不是一个 Web 应用程序。常规的 winforms 应用程序通常通过名为“app.config”的文件进行配置。Visual Studio 可能已经为你创建了一个基础 app.config,具体取决于你使用的版本。
您可以通过将 app.config临时重命名为 web.config,然后使用指向我们“假”web.config 的确切路径的标志调用 aspnet_regiis来“欺骗”aspnet_Regiis 来加密您的配置文件:
为简单起见,假设您的初始 app.config 位于 c:\MyPrograms\MyApp 中。
- 将 app.config 重命名为 web.config。
- 在管理命令提示符下,将当前目录设置为 c:\windows\micrsoft.net\framework\v4.0.30319
调用 aspnet_regiis,使用“-pef”开关指示该工具加密 web.config 的特定部分:
aspnet_regiis -pef "connectionStrings" c:\MyPrograms\MyApp
如果您看到“Succeeded”消息,请将您的 web.config 重命名为 app.config,然后运行您的应用程序。.NET 应该在该机器上运行时自动解密您的连接字符串。
如果您需要将此应用程序放在其他机器上,您可能需要考虑设置一个可以安装在其他机器上的通用加密密钥,并在 web.config 中定义一个利用该密钥的提供程序。但是现在,让我们先让基本流程在本地工作,然后在我们知道这部分工作正常之后再担心其他组件。
希望这可以帮助!
推荐阅读
- java - 使用 ControlsFx CheckComboBox 过滤 TableView
- wordpress - 仅显示 Wordpress 中每个类别的最新帖子
- python - 无法在 Python 3.6.6 上的 Open CV 3.4.1 上运行跟踪
- c# - C#如何互相访问表单对象
- django - 错误:尝试获取任何值时无法调整类型 ExpressionWrapper
- sql - SQL Server:如何将浮点数格式化为字符串,不带逗号?
- android - Map Android 开发的跟踪要求
- android - 如何通过 kotlin 代码更改 android 中的笔触颜色?
- python - RuntimeError:超时上下文管理器应该在任务内部使用
- php - 想从最后一个 id 中提取一个子字符串