如何使用 app.config 上的加密连接字符串与 Windows 窗体上的向导生成的 Dataset.xsd

2024-03-10

我正在开发一个 MDI 应用程序Visual Studio 2013 (.NET 4.5) and Oracle 开发工具最新发布。我需要创建一个主窗体,然后它将成为许多不同窗体的容器,每个窗体都是不同的应用程序。

该应用程序必须连接到不同的 Oracle 数据库,现在我尝试设置主窗体以将所有连接字符串加密并可能保存在单独的文件中。目前连接字符串只有一个。

为了加密连接字符串,我使用了aspnet_regiis这些文章中描述的方法:

  • Framework 4.0 中的 Web Config 加密/解密 http://digantakumar.com/2010/12/20/web-config-encryptiondecryption-in-framework-4-0/
  • 使用受保护的配置加密配置信息 http://msdn.microsoft.com/en-us/library/53tyfkaw(v=vs.100).aspx

总结:

我在 app.config 中添加了<configProtectedData>我定义了自己的 RSA 提供程序和密钥容器,因为我需要在多台计算机上导出和导入密钥。然后我创建了密钥容器并将其与aspnet_regiis加密工具<connectionStrings>部分。

我还设置了<oracle.manageddataaccess.client>部分为TNS_ADMIN使用我自己的变量Oracle 即时客户端和我的习惯tnsnames.ora文件。这将有助于避免不同机器操作系统和 Oracle 客户端版本和配置出现问题。

所以,现在这就是我的最终结果应用程序配置文件应该是:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <configSections>
  </configSections>
  <oracle.manageddataaccess.client>
    <version number="*">
      <settings>
        <setting name="TNS_ADMIN" value="D:\VSProjects\Visual Studio 2013\Projects\MDITest\MDITest\"/>
      </settings>
    </version>
  </oracle.manageddataaccess.client>
  <configProtectedData>
    <providers>
      <add name="OracleDeveloperRSAProtectedConfigurationProvider"
    type="System.Configuration.RsaProtectedConfigurationProvider,System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a"
    keyContainerName="OracleDeveloperDbKeys"
    description="Uses RsaCryptoServiceProvider to encrypt and decrypt" />
    </providers>
  </configProtectedData>
  <connectionStrings configProtectionProvider="OracleDeveloperRSAProtectedConfigurationProvider">
    <EncryptedData Type="http://www.w3.org/2001/04/xmlenc#Element"
      xmlns="http://www.w3.org/2001/04/xmlenc#">
      <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#tripledes-cbc" />
      <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
        <EncryptedKey xmlns="http://www.w3.org/2001/04/xmlenc#">
          <EncryptionMethod Algorithm="http://www.w3.org/2001/04/xmlenc#rsa-1_5" />
          <KeyInfo xmlns="http://www.w3.org/2000/09/xmldsig#">
            <KeyName>Rsa Key</KeyName>
          </KeyInfo>
          <CipherData>
            <CipherValue>ZuB8jsXnXR/6Ww47R4Oc/ksSgHsrRuuOkNypbsdfm1ASDlvdsklsgfhtrwaADFHrywswvfhgnjlsGHSDJKFEROvfsd/TV+LKlysPkccEXmJFCcFZ7S9geSInPBaNvYGweR9FcTK1HVcrYMaddgfBK6lpSTTw6cdMRIOcw0Ib//oYPr34=</CipherValue>
          </CipherData>
        </EncryptedKey>
      </KeyInfo>
      <CipherData>
        <CipherValue>01old8NrGlRAOLdfdtXUKYuBkZPY5XbWMI/j22Hnm8U=</CipherValue>
      </CipherData>
    </EncryptedData>
  </connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
  </startup>
</configuration>

现在我需要使用数据源配置向导来设置 Oracle 数据集,然后能够将表从 DataSource Explorer 拖放到自动创建导航按钮并保持表之间关系等的表单中。

但是,当我使用原始应用程序在新应用程序上使用向导完成配置时app.config,它要求我创建一个 ConnectionString 并将其存储在app.config然后也将副本放入Settings.settings file, 显然是纯文本.

如果我执行上述过程来加密<connectionStrings>原文中的部分app.config,那么DataSet.xsd 仅当 ConnectionString 设置存在于 Settings.settings。它不使用app.config范围。

我尝试打开DataSet.Designer.cs文件但有Connection and ConnectionString为每个指定的参数TableAdapter对象,并且由于我的数据集中有很多表,我想避免查找/替换方法...另外,因为如果我需要对数据集进行一些更改,那么DataSet.xsd文件可能会被覆盖,因此所有编辑都将丢失。

我想知道哪种是替换连接字符串并使用加密字符串的最佳方法。

最后我也想知道我是否可以移动我的<connectionStrings>部分到不同的 .config 文件,同时保持加密。

- 编辑 -

我做了一些更多的测试来重新创建一个新的应用程序项目,Visual Studio 似乎比我想象的更聪明!

我将第一个连接字符串添加到空白处app.config使用向导设置新数据源后。然后我编辑了app.config并移动了<connectionStrings>节到一个新的connections.config文件。我应用了aspnet_regiis加密该部分的方法并且一切正常。但是,因为我仍然可以在里面看到纯文本的连接字符串Settings.settings我决定改变<CipherData>字符串来查看应用程序是否会抛出错误或者是否可以正常工作。非常简单,如果应用程序抛出错误,则它使用加密的连接字符串(我想要的 - 正确),否则它使用纯文本连接字符串Settings.settings(我不想要的 - 不正确)。令人惊讶的是,应用程序抛出了异常!

看来Settings.settings面板始终显示纯文本连接字符串,只是因为它读取 app.config(以及connections.config),然后应用“即时”解密。因此,该面板可以被视为 app.config 的简单视图,显示一些参数,即使它们是加密的。

除此之外,我再次使用向导添加了具有另一个连接的第二个数据源。新连接会自动添加到connections.config已加密!我注意到它是因为<CipherData>字符串被更改。新连接也以纯文本形式显示在Settings.settings。因此,我通过更改字符串重新进行了与之前相同的测试,应用程序再次抛出错误。

所以,最后,每次添加新连接时无需重新加密 app.config 文件,因为它是自动完成的! Great!


None

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 app.config 上的加密连接字符串与 Windows 窗体上的向导生成的 Dataset.xsd 的相关文章

随机推荐

  • 检查 pandas 列中的连续行值

    I have hi 0 1 1 2 2 4 3 8 4 3 5 3 6 2 7 8 8 3 9 5 10 4 我有一个列表和单个整数的列表 如下所示 2 8 3 2 2 8 对于主列表中的每个项目 我想找出它第一次出现在列中的索引 因此 对
  • 使用 node.js 的 http 请求失败 发送后无法设置标头

    我尝试使用 https http 请求服务器并将结果显示在网页中 它作为服务器上的脚本工作 但由于我通过 get 请求返回结果而失败 var express require express var app express var port
  • Ember Data:在控制台中获取模型

    我有最简单的 Ember 应用程序JSBin http jsbin com aYIkAcUk 2 edit 我想做的就是找到一个模型 基于其他所以问题 https stackoverflow com questions 18756092 h
  • 跨域AJAX post调用

    我必须对位于另一台服务器上的 asp 表单进行 POST 调用 带参数 对于开发 我在同一台服务器上执行了此操作 并且运行良好 但现在我在另一台服务器上测试它 我收到的不是 200 状态 而是 0 状态 我认为这是因为它是跨域 AJAX 调
  • 如何知道三星 S8、S8+、S9 等底部导航栏何时可见?

    三星 S8 S8 S9 等上的底部导航栏在关闭时会导致 UI 和动画噩梦 导致视图从应用程序的顶部和底部移入和移出 对于这些设备 如果导航栏打开 一切都会完美运行 但如果关闭 所有动画都会低于导航栏的高度 我的想法是调整动画 但是 我很难弄
  • Paper_trail 宝石能力

    我想知道是否可以使用以下用例来实现纸迹 https github com airblade paper trail宝石 维基百科类型的应用程序 其中登录用户可以更改 编辑维基页面 其中 版主可以撤消特定更改 我知道 papertrail 允
  • 如何查看TortoiseSVN中的所有修订?

    TortoiseSVN 显示日志 选项按日期过滤修订 手动更改这些日期很麻烦 如何以最少的麻烦查看所有修订 You must在存储库的根文件夹中执行此操作 取消选中 复制 重命名时停止 Check Include merged revisi
  • 如何在android中离线获取纬度和经度?

    我想在 WiFi 和 Gps 关闭时获取当前位置 纬度和经度 可以从移动 SIM 网络获取纬度和经度 我在谷歌上搜索了更多 但没有得到满意的答案 从我昨天的经验来看question https stackoverflow com q 220
  • 简单地显示 UIInterpolatingMotionEffect 的值?

    这是一个谜题 想象一个典型的 UIInterpolatingMotionEffect UIInterpolatingMotionEffect horizontalMotionEffect UIInterpolatingMotionEffec
  • 使用 FluentValidation 的 WithMessage 方法和命名参数列表

    我正在使用 FluentValidation 并且想使用对象的某些属性值来格式化消息 问题是我对 C 中的表达式和委托的经验很少 FluentValidation 已经提供了一种使用格式参数来执行此操作的方法 RuleFor x gt x
  • Python-检查字符串是否包含数字[重复]

    这个问题在这里已经有答案了 我正在制作一个函数 它使用 while True 循环来要求用户输入通过条件的密码 长度最少为 8 15 个字符 并且至少包含一个整数 我对如何正确检查整数的输入感到困惑 我的程序 def enterNewPas
  • 如何回显$?工作?

    我正在编写一些 PowerShell 脚本来执行一些构建自动化 我发现here https stackoverflow com a 4917997 1977871 that echo 根据先前的语句返回 true 或 false 我刚刚发现
  • AWS cloudformation Template - 为模板中的堆栈提供标签

    我们希望对我们在 AWS 中创建的资源使用公司特定的标签以进行计费 我正在使用云形成模板来启动我们的 Elasticbeanstalk 实例和其他项目相关资源 当我使用 CloudFormation 控制台创建堆栈时 它会要求我在参数后面的
  • NodeJS/Express 请求实体太大 - Heroku

    我到处查看 似乎找不到对此的解释 这就是 Heroku 在我的日志中显示的内容 45 45 00 00 app web 7 Error Request Entity Too Large 45 45 00 00 app web 7 at Ob
  • GTK 3.x 是一个真正的跨平台解决方案吗?

    我已经尝试过 Qt 4 x 5 x 和 GTKmm 3 x 相比 Qt 我更喜欢 GTKmm 现在我刚刚发现 GTKmm 3 x 不提供 Windows 移植 他们也不提供 Mac 移植 基本上我除了 Linux 的库 源代码 二进制文件之
  • Promise.then() 返回 Promise { } [重复]

    这个问题在这里已经有答案了 函数 fetchData 返回一个承诺 然后我通过链接在generateURL函数中处理该承诺promise with then但是它返回 Promise 函数generateURL应该返回一个字符串我做错了什么
  • 从 pdf 中提取的细化表格 - Tabulizer

    我正在 R 中的 Tabulizer 的帮助下从 PDF 中提取一些表格 下面是其中一个表格的代码 library tabulizer location lt http napic jpph gov my portal web guest
  • 将消息从一个 Kafka 主题复制到另一个 Kafka 主题

    我想从生产集群中的 Kafka 集群 主题进入开发环境中的另一个 Kafka 集群 以进行可扩展性和回归测试 对于鸭磁带解决方案 我级联了 Kafka 消费者和生产者 但我的直觉告诉我应该有更好的方法 但是 我还没有找到任何好的解决方案 谁
  • 将 jQuery Validation 插件中的验证方法与“or”而不是“and”结合起来

    在 jQuery 验证插件中 有几个方法可以执行相同的操作 但针对不同的区域设置 例如dateISO and dateDE 两者都验证日期格式 如何组合这些以便输入元素接受either 假设我有一个
  • 如何使用 app.config 上的加密连接字符串与 Windows 窗体上的向导生成的 Dataset.xsd

    我正在开发一个 MDI 应用程序Visual Studio 2013 NET 4 5 and Oracle 开发工具最新发布 我需要创建一个主窗体 然后它将成为许多不同窗体的容器 每个窗体都是不同的应用程序 该应用程序必须连接到不同的 Or