【问题标题】:How to use Azure Sql Always Encrypted with Dapper ORM?如何使用 Azure Sql Always Encrypted with Dapper ORM?
【发布时间】:2016-10-28 21:57:15
【问题描述】:

是否有可能将 DapperORM 与 (Azure) SQL 2016 Always Encrypted 一起使用?是否有任何文档如何使用和最佳实践?

尤其是新的参数属性输入方向和输入长度如何处理?

【问题讨论】:

    标签: dapper sql-server-2016 azure-sql-database always-encrypted


    【解决方案1】:

    以下链接将帮助您开始使用 Always Encrypted。

    我没有使用 Dapper ORM,但是,只要您能够使用连接字符串启用 Always Encrypted 并参数化您的文字,您应该没问题。

    这是我尝试过的一个快速示例。请注意连接字符串中的Column Encryption Setting=Enabled,它为给定的连接启用始终加密。

    private static readonly string connectionString = @"Data Source=.;Initial Catalog=dbName;Integrated Security=true;Connection Timeout=60;Column Encryption Setting=Enabled";
    
    static void Main(string[] args)
    {
        using (SqlConnection conn = new SqlConnection(connectionString))
        {
            conn.Open();
    
            int id = 1;
            var dog = conn.Query<Dog>("select age, name, weight, idcol from  DogTable where idcol = @Id", new { Id = id });
        }
    }
    
    public class Dog
    {
        public int? age { get; set; }
        public int idcol { get; set; }
        public string name { get; set; }
        public float? weight { get; set; }
    
        public int IgnoredProperty { get { return 1; } }
    }
    

    【讨论】:

      【解决方案2】:

      为了补充 Nikhil 的答案,这是可能的,而且他引用的资源很有帮助,但是参数化文章可能有点误导,我将包含一个我刚刚开始工作的 sn-p,以防万一。您不必像在 SSMS 中那样在您的 sql 中使用 DECLARE @SSN...,一旦我修复了我的类型问题(参见代码块后面的段落),打击对我来说效果很好。

      string sql = "SELECT * from dob.ExampleTable WHERE IsActive = 1 SSN = @SSN";
      
      var results = await this.DbConnection.QueryAsync(sql, new
      {
          SSN = 999999999
      });
      

      另外,请注意不匹配的数据类型。我无法使用 Dapper 使 char 或 varchar 作为我的 SSN 列的目标类型(我能够使用直接 ADO.NET 将列显式配置为 CHAR 或 VARCHAR 但 Dapper 似乎假定所有字符串为 NVARCHAR(4000)字段,这导致使用 Dapper 时出错)。 NVARCHAR 和 NCHAR 工作正常。我认为这与以下事实有关:当您加密列时,它将“真实”数据类型更改为 NCHAR(50) 以及从 nvarchar(4000)=>CHAR(9)=>NCHAR 转换 dapper (50) 不起作用,但仅在 Dapper 中。

      【讨论】:

      • 是的,Always Encrypted 的隐式数据类型转换非常有限。始终确保您的参数类型(和长度)与您的列类型匹配。
      猜你喜欢
      • 1970-01-01
      • 2022-01-02
      • 1970-01-01
      • 2017-10-25
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多