私は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
そして単純なdbコードへのコピー:
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;
}
}
もちろん、データベースのストアドプロシージャを使用して暗号化された列を設定することはできますが、これを1つのトランザクションで実行したいとします。コード内のデータベースから自分の証明書を使用して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
お役に立てれば。