【问题标题】:Strong Type Data Set : Override column get : set强类型数据集:覆盖列获取:设置
【发布时间】:2012-06-13 13:19:09
【问题描述】:

我们使用数据集作为我们的数据访问层。 目前有一些列存储加密数据。

使用 CLR 我能够创建一个 SQL 函数来解密 select 中的数据,但在讨论中我们已经确定这是一个安全风险。

我想做的是要么

  1. 覆盖数据表列的获取/设置,以便在获取时将取消加密值 并返回一个可读的字符串,并在集合上加密数据。
  2. 或对表适配器执行某些操作,以便在选择/更新时执行与上述相同的操作。

【问题讨论】:

标签: c# xsd strongly-typed-dataset


【解决方案1】:

您可以尝试为此任务创建扩展方法:

namespace ExtensionMethods
{
    public static class MyExtensions
    {
        public static void SetEncryptColumn(this DataSetType.DataTableRow row, string value)
        {
            row.Encrypt = EncryptValue(value);
        }

        public static string GetEncryptColumn(this DataSetType.DataTableRow row)
        {
            return DecryptValue(row.Encrypt);
        }
    }   
}

http://msdn.microsoft.com/en-us/library/bb383977%28v=vs.90%29.aspx

【讨论】:

  • 已经考虑过这一点,真的很希望有办法获得类似 get{return DecryptValue(value)}
  • 我确实有一个字符串的扩展方法,所以我可以说 table.value.encrypt/decrypt() 并获得回报。我想要做的本质是在填充或从数据库获取数据时将解密放在表适配器中。谢谢回复!
【解决方案2】:

类型化数据表是部分类。虽然您无法覆盖属性,但您可以在另一个文件中添加更多方法,这些方法将在设置时加密并在获取时解密,将值存储在原始属性中。

【讨论】:

  • 您可以提供任何参考资料或示例吗?
  • 类型化数据集是部分类,但我在生成的强类型行定义中没有看到“部分”关键字。
  • 在 Visual Studio 2012 pro .net 4.5 数据集中,我确实看到了类似 public partial class xyzRow : global::System.Data.DataRow {
猜你喜欢
  • 2011-01-02
  • 1970-01-01
  • 2013-02-21
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-06-22
  • 1970-01-01
相关资源
最近更新 更多