是否有可能将DapperORM用于(Azure)SQL 2016 Always Encrypted?是否有任何文档如何使用和最佳实践?
特别是如何处理新的参数属性输入方向和输入长度?
答案 0 :(得分: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; } }
}
答案 1 :(得分:0)
要添加到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运行良好。我认为它与以下事实有关:当您加密列时,它会改变&#34;真实的&#34;数据类型为NCHAR(50)和dapper从nvarchar(4000)=&gt; CHAR(9)=&gt; NCHAR(50)的转换不起作用,但只在Dapper中工作。