SQLite는 기본적으로 데이터베이스 파일 암호화를 지원하지 않습니다. 대신 SQLCipher, SQLiteCrypt 또는 wxSQLite3과 같은 수정된 버전의 SQLite를 사용해야 합니다. 이 문서에서는 SQLCipher의 지원되지 않는 오픈 소스 빌드를 사용하는 방법을 보여 주지만, 다른 솔루션도 일반적으로 동일한 패턴을 따르기 때문에 이 정보를 적용할 수 있습니다.
설치
dotnet remove package Microsoft.Data.Sqlite
dotnet add package Microsoft.Data.Sqlite.Core
dotnet add package SQLitePCLRaw.bundle_e_sqlcipher
암호화에 다른 네이티브 라이브러리를 사용하는 방법에 대한 자세한 내용은 사용자 지정 SQLite 버전을 참조하세요.
키 지정
새 데이터베이스에서 암호화를 사용하려면 Password 연결 문자열 키워드를 사용하여 키를 지정합니다.
SqliteConnectionStringBuilder를 사용하여 사용자 입력의 값을 추가 또는 업데이트하고 연결 문자열 삽입 공격을 방지합니다.
var connectionString = new SqliteConnectionStringBuilder(baseConnectionString)
{
Mode = SqliteOpenMode.ReadWriteCreate,
Password = password
}.ToString();
중요한
사용 가능한 가장 안전한 인증 흐름을 사용하는 것이 권장됩니다. Azure SQL에 연결하려는 경우, 권장되는 인증 방법은 Azure 리소스에 대한 관리 ID입니다.
팁
기존 데이터베이스를 암호화하고 암호를 해독하는 방법은 사용 중인 솔루션에 따라 달라집니다. 예를 들어 SQLCipher에서는 sqlcipher_export() 함수를 사용해야 합니다. 자세한 내용은 솔루션 설명서를 참조하세요.
데이터베이스 키 다시 입력
암호화된 데이터베이스의 키를 변경하려면 PRAGMA rekey 문을 실행합니다.
아쉽지만 SQLite는 PRAGMA 문에서 매개 변수를 지원하지 않습니다. 대신 quote() 함수를 사용하여 SQL 삽입을 방지합니다.
var command = connection.CreateCommand();
command.CommandText = "SELECT quote($newPassword);";
command.Parameters.AddWithValue("$newPassword", newPassword);
var quotedNewPassword = (string)command.ExecuteScalar();
command.CommandText = "PRAGMA rekey = " + quotedNewPassword;
command.Parameters.Clear();
command.ExecuteNonQuery();
.NET