如何使用 SqlBulkCopy 填充数据库中的加密列?
How to fill encrypted columns in database using SqlBulkCopy?
我正在使用 SqlBulkCopy
和 System.Data.Datatable
将数据插入我的数据库。我正在做这样的事情:
var table = new DataTable();
// Creating table schema
var newRow = table.NewRow();
newRow["FirstName"] = Parser.Parse(values[0])
newRow["LastName"] = Parser.Parse(values[1])
...
newRos["SSN"] = //here I need to encrypt by db certificate value[5] before set it to this row value
并简单复制到数据库代码:
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.BatchSize = 100;
bulkCopy.DestinationTableName = "dbo.Member";
try
{
bulkCopy.WriteToServer(table);
}
catch (Exception)
{
transaction.Rollback();
connection.Close();
throw;
}
}
当然我可以稍后使用数据库中的存储过程设置加密列,但我想在一个事务中完成。是否可以在代码中使用数据库中的证书加密 string
值?
提前致谢!
据我所知,您可以选择以下选项之一(这两个选项都应该很容易实现):
在您的 C# 代码中进行加密
由于您拥有所有数据,因此您可以使用相关的 .NET Framework 进行加密 类。您可以对其进行测试并确保获得相同的结果。
使用 AFTER INSERT 触发器
添加值后,您将修改并添加加密数据。触发器将是同一事务的一部分。只需使用 CREATE TRIGGER 语句创建一个新触发器,检查该值是否为 NULL,然后使用 SQL 语句放置加密值。
例如:
CREATE TRIGGER [dbo].[myTrigger]
ON [dbo].[Members]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Members
SET [EncryptedSSN] = EncryptByKey(Key_GUID('SSN_Key'), inserted.SSN)
FROM inserted
INNER JOIN dbo.Members On inserted.id = Members.id
END
希望对您有所帮助。
我正在使用 SqlBulkCopy
和 System.Data.Datatable
将数据插入我的数据库。我正在做这样的事情:
var table = new DataTable();
// Creating table schema
var newRow = table.NewRow();
newRow["FirstName"] = Parser.Parse(values[0])
newRow["LastName"] = Parser.Parse(values[1])
...
newRos["SSN"] = //here I need to encrypt by db certificate value[5] before set it to this row value
并简单复制到数据库代码:
using (var bulkCopy = new SqlBulkCopy(connection, SqlBulkCopyOptions.Default, transaction))
{
bulkCopy.BatchSize = 100;
bulkCopy.DestinationTableName = "dbo.Member";
try
{
bulkCopy.WriteToServer(table);
}
catch (Exception)
{
transaction.Rollback();
connection.Close();
throw;
}
}
当然我可以稍后使用数据库中的存储过程设置加密列,但我想在一个事务中完成。是否可以在代码中使用数据库中的证书加密 string
值?
提前致谢!
据我所知,您可以选择以下选项之一(这两个选项都应该很容易实现):
在您的 C# 代码中进行加密
由于您拥有所有数据,因此您可以使用相关的 .NET Framework 进行加密 类。您可以对其进行测试并确保获得相同的结果。
使用 AFTER INSERT 触发器
添加值后,您将修改并添加加密数据。触发器将是同一事务的一部分。只需使用 CREATE TRIGGER 语句创建一个新触发器,检查该值是否为 NULL,然后使用 SQL 语句放置加密值。
例如:
CREATE TRIGGER [dbo].[myTrigger]
ON [dbo].[Members]
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE Members
SET [EncryptedSSN] = EncryptByKey(Key_GUID('SSN_Key'), inserted.SSN)
FROM inserted
INNER JOIN dbo.Members On inserted.id = Members.id
END
希望对您有所帮助。