是否有可能将 DapperORM 与 (Azure) SQL 2016 Always Encrypted 一起使用?是否有任何文档如何使用和最佳实践?
特别是新的参数属性输入方向和输入长度如何处理?
是否有可能将 DapperORM 与 (Azure) SQL 2016 Always Encrypted 一起使用?是否有任何文档如何使用和最佳实践?
特别是新的参数属性输入方向和输入长度如何处理?
以下链接将帮助您开始使用 Always Encrypted。
我没有使用 Dapper ORM,但是,只要您能够使用连接字符串启用 Always Encrypted 并参数化您的文字,您应该没问题。
这是我尝试过的一个快速示例。请注意Column Encryption Setting=Enabled
为给定连接启用 Always Encrypted 的连接字符串。
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; } }
}
为了补充 Nikhil 的答案,有可能并且他引用的资源很有帮助,但是参数化文章可能有点误导,我将包含一个我刚刚开始工作的片段,以防它有帮助。您不必像在 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 中起作用。