[c#] SQLite DB를 암호로 보호합니다. 가능합니까?

새로운 작은 프로젝트에 직면해야합니다. 약 7 ~ 9 개의 테이블이 있으며, 그중 가장 큰 테이블은 한 달에 최대 1000 행씩 증가합니다.

SQLite를 내 db로 생각했습니다.하지만 누군가 db에서 데이터를 변경하려는 경우 DB를 보호해야합니다.

내 주요 질문은 다음과 같습니다.

액세스 할 때처럼 암호로 sqlite db를 보호 할 수 있습니까?

이러한 소규모 솔루션에 대해 어떤 다른 RDBMS를 권장 하시겠습니까?

개발은 C #에서 이루어 지지만 무료로 검색하고 있습니다.



답변

SQLite3 DB를 암호로 보호 할 수 있습니다. 작업을 수행하기 전에 다음과 같이 암호를 설정하십시오.

SQLiteConnection conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");
conn.SetPassword("password");
conn.Open();

다음에 다음과 같이 액세스 할 수 있습니다.

conn = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;Password=password;");
conn.Open();

이렇게하면 GUI 편집기에서 데이터를 볼 수 없습니다. 일부 편집자는 비밀번호를 제공하면 DB를 해독 할 수 있습니다. 사용 된 알고리즘은 RSA입니다.

나중에 암호를 변경하려면

conn.ChangePassword("new_password");

비밀번호를 재설정하거나 제거하려면

conn.ChangePassword(String.Empty);


답변

sqlite .net 공급자 (System.Data.SQLite)의 기본 제공 암호화를 사용할 수 있습니다. 자세한 내용은 http://web.archive.org/web/20070813071554/http://sqlite.phxsoftware.com/forums/t/130.aspx참조하십시오.

암호화되지 않은 기존 데이터베이스암호화 하거나 암호화 된 데이터베이스의 비밀번호를 변경하려면 데이터베이스 를 연 다음 SQLiteConnection의 ChangePassword () 함수를 사용합니다.

// Opens an unencrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
// Encrypts the database. The connection remains valid and usable afterwards.
cnn.ChangePassword("mypassword");

또는 암호를 사용 하여 기존의 암호화 된 데이터베이스 호출 을 해독 하려면 :ChangePassword()NULL""

// Opens an encrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3;Password=mypassword");
cnn.Open();
// Removes the encryption on an encrypted database.
cnn.ChangePassword(null);

기존의 암호화 된 데이터베이스를 열거 나 새 암호화 된 데이터베이스를 만들려면 ConnectionString이전 예에 표시된대로에 암호를 지정 하거나 SetPassword()SQLiteConnection. 에 지정된 암호 ConnectionString는 일반 텍스트 여야하지만 SetPassword()함수에 제공된 암호 는 이진 바이트 배열 일 수 있습니다.

// Opens an encrypted database by calling SetPassword()
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.SetPassword(new byte[] { 0xFF, 0xEE, 0xDD, 0x10, 0x20, 0x30 });
cnn.Open();
// The connection is now usable

기본적으로 ATTACH 키워드는 다른 데이터베이스 파일을 기존 연결에 연결할 때 기본 데이터베이스와 동일한 암호화 키를 사용합니다. 이 동작을 변경하려면 다음과 같이 KEY 수정자를 사용합니다.

일반 텍스트 암호를 사용하여 암호화 된 데이터베이스를 연결하는 경우 :

// Attach to a database using a different key than the main database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY 'mypassword'", cnn);
cmd.ExecuteNonQuery();

이진 암호를 사용하여 암호화 된 데이터베이스를 연결하려면 :

// Attach to a database encrypted with a binary key
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:\\test.db3");
cnn.Open();
cmd = new SQLiteCommand("ATTACH DATABASE 'c:\\pwd.db3' AS [Protected] KEY X'FFEEDD102030'", cnn);
cmd.ExecuteNonQuery();


답변

데이터베이스 파일의 투명한 256 비트 AES 암호화를 제공하는 SQLite 용 오픈 소스 확장 인 SQLCipher를 사용합니다. http://sqlcipher.net


답변

SEE 애드온으로 SQLite 데이터베이스를 암호화 할 수 있습니다. 이렇게하면 무단 액세스 / 수정을 방지 할 수 있습니다.

SQLite 문서 인용 :

SQLite 암호화 확장 (SEE)은 128 비트 또는 256 비트 AES를 사용하여 데이터베이스 파일을 암호화하여 무단 액세스 또는 수정을 방지하는 SQLite의 향상된 버전입니다. 전체 데이터베이스 파일이 암호화되어 외부 관찰자에게는 데이터베이스 파일에 백색 잡음이 포함 된 것처럼 보입니다. 파일을 SQLite 데이터베이스로 식별하는 것은 없습니다.

이 링크 에서이 애드온에 대한 자세한 정보를 찾을 수 있습니다 .


답변

한 가지 옵션은 VistaDB 입니다. 이를 통해 데이터베이스 (또는 테이블)를 암호로 보호 (선택적으로 암호화) 할 수 있습니다.


답변

sqlite db를 보호하는 암호에 대한 질문에 대해 할 수 있다고 생각하지 않습니다.

하지만 암호화 할 수 있습니다. 여기에 대한 몇 가지 정보가 있습니다.

http://sqlcrypt.com/

플랫폼 당 $ 149입니다.


답변

당신이 사용하는 경우 FluentNHibernate를 사용하면 설정 코드를 사용할 수 있습니다 :

private ISessionFactory createSessionFactory()
{
    return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.UsingFileWithPassword(filename, password))
            .Mappings(m => m.FluentMappings.AddFromAssemblyOf<DBManager>())
            .ExposeConfiguration(this.buildSchema)
            .BuildSessionFactory();
}

private void buildSchema(Configuration config)
{
        if (filename_not_exists == true)
        {
            new SchemaExport(config).Create(false, true);
        }
}

FileWithPassword (filename, password)를 사용하는 방법 은 데이터베이스 파일을 암호화하고 암호를 설정합니다.
새 데이터베이스 파일이 생성 된 경우에만 실행됩니다. 이 방법으로를 열면 암호화되지 않은 이전 암호화가 실패합니다.