SqlBulkCopy를 사용하여 데이터베이스의 암호화 된 열을 채우는 방법?

c# database encryption sqlbulkcopy sql-server

문제

내 데이터베이스에 데이터를 삽입하려면 SqlBulkCopySystem.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;
    }
}

물론 나중에 데이터베이스의 저장 프로 시저를 사용하여 암호화 된 열을 설정할 수 있지만 한 트랜잭션에서이 작업을 수행하려고합니다. 코드에서 데이터베이스의 인증서를 사용하여 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 

희망이 도움이됩니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.