2009-06-12 2 views
5

파이썬에서 삽입/선택하는 sqlite3 db가 있습니다. 앱은 훌륭하게 작동하지만 아무도 비밀번호없이 DB에서 읽을 수 없도록 조정하고 싶습니다. 파이썬에서는 어떻게 할 수 있습니까? 나 어디서부터 시작해야할지 모르겠다.파이썬에서 암호화 된 파일 또는 db

답변

1

SQLite 데이터베이스는 사람이 읽을 수 있고 내장 된 암호화가 없습니다.

데이터베이스 파일을 직접 액세스하거나 읽거나 프로그램을 통해 액세스하는 사용자가 염려 되니?

전자는 전적으로 데이터베이스와 관련이 없으므로 전자 대신 가정합니다. 응용 프로그램의 보안이 중요합니다.

몇 가지 옵션이 마음에 와서 :

  1. 은 파일 시스템 권한이 아닌 암호화와 DB를 보호합니다. 당신은 당신의 환경이 무엇인지에 대해 언급하지 않았기 때문에 이것이 가능할 지 말할 수는 없지만 읽을 수없는 것을 해독하려고 시도 할 수는 없으므로 아마도 가장 간단하고 믿을만한 방법 일 것입니다.
  2. 쓰기 전에 파이썬으로 암호화하고, 읽은 후에 파이썬에서 해독하십시오. 매우 간단하지만 SQL의 세트 기반 매칭 작업의 힘을 대부분 잃을 수 있습니다.
  3. 다른 데이터베이스로 전환하십시오. 사용자 인증 및 사용 권한은 대부분의 다중 사용자 데이터베이스의 표준 기능입니다. 도구의 한계에 부딪치게되면 새로운 도구를 해킹하는 것보다 다른 도구를 둘러 보는 것이 더 쉬울 수도 있습니다.
+0

sqlite는 데스크톱 응용 프로그램 용으로 가벼우므로 다른 데이터베이스를 사용할 수 없다는 점을 제외하고는 동일한 질문이 있습니다. (개인 저널 소프트웨어) –

9

SQLCipher를 사용할 수 있습니다. SQLite는

SQLCipher에 대한

http://sqlcipher.net/

오픈 소스 전체 데이터베이스 암호화 데이터베이스 파일의 투명한 256 비트 AES 암호화를 제공하는 SQLite는 확장입니다. 페이지는 디스크에 쓰여지기 전에 암호화되고 다시 읽을 때 암호 해독됩니다. 작은 크기와 뛰어난 성능으로 인해 임베디드 애플리케이션 데이터베이스를 보호하는 데 이상적이며 모바일 개발에 적합합니다.

  1. 데이터베이스 파일에 여러 작업에 암호화 데이터의
  2. 100 %로 거의 5 ~ 15 % 정도의 오버 헤드와 빠른 성능 타오르는 것은 암호화는 좋은 보안을 관행 (CBC 모드, 키 유도)
  3. 를 사용
  4. 0 구성 및 응용 프로그램 수준 암호화 광범위한 플랫폼
  5. 지원 : C/C++, Obj-C, QT, Win32/.NET, Java, Python, Ruby 등 Windows, Linux, iPhone/iOS ...
+6

어떻게 작성합니까? 파이썬에서 일하니? – Michael

1

동일한 문제가있었습니다. 내 애플리케이션에 동시에 여러 인스턴스가 실행 중일 수 있습니다. 이 때문에, 나는 sqlite db 파일을 암호화 할 수 없으며 처리 할 수 ​​없다. 나는 또한 파이썬에서 데이터를 암호화하는 것이 좋은 생각이라고 믿지 않는다. 왜냐하면이 상태에서 데이터베이스에서 심각한 데이터 조작을 할 수 없기 때문이다.마음에 이러한 제약으로

, 나는 다음과 같은 두 가지 해결책을 온 :

1)는 앞서 언급 SQLCipher를 사용합니다. 여기서 볼 수있는 문제는 파이썬 용 바인딩을 직접 작성하고 직접 컴파일 (또는 요금 지불)해야한다는 것입니다. 어떤 경우이든이 작업을 수행 할 수있는 것은 다른 Python 개발자들에게 훌륭한 솔루션이 될 수 있기 때문입니다. 내가 성공하면, 나는 그 해결책으로 다시 게시 할 것이다.

2) 옵션 1이 너무 힘들거나 시간이 오래 걸리는 경우이 방법을 사용합니다. 이 방법은 안전하지 않습니다. pycrypto를 사용하여 데이터베이스 파일을 암호화합니다. 데이터베이스 파일의 암호를 해독 한 다음 다양한 클라이언트의 요청을 처리 할 SQL "서버"를 구현할 것입니다. 미해결 요청이 없으면 데이터베이스를 다시 암호화합니다. 이것은 전반적으로 속도가 느려지고 데이터베이스를 임시 해독 상태로 유지합니다.

다음 아이디어가 도움이되기를 바랍니다.

편집 2013년 1월 13일 내가 컴파일 할 수없는 것 수 있고, 코드베이스 사운드 라이브러리 상태입니다에는 OpenSSL을 사용하려고 때문에 SQLCipher 포기

단순한 AES를위한 코드베이스의 꽤 방대한 128.

나는 wxSQLite3이라는 또 다른 옵션을 발견했다. 나는 SQLite 암호화 피스를 분리하는 방법을 알아 냈다 : https://github.com/shenghe/FreeSQLiteEncryption. 컴파일하고 작업 할 수있게되었습니다 (SQLite3의 최신 버전 사용). wxSQLite3는 또한 정말 멋진 AES 256을 지원합니다. 내 다음 단계는 수정 된 sqlite3.dll을 사용하여 pysqlite (파이썬에 내장 된 sqlite 라이브러리)를 컴파일하는 것이다. 그게 작동한다면, 나는 wxSQLite3의 sqlite3.dll의 확장 암호화 부분을 지원하기 위해 pysqlite를 조정할 것이다. 어쨌든이 스레드를 내 결과로 업데이트하려고 시도하고, 성공하면 빌드 지침과 함께 최종 코드베이스를 Github에 게시합니다.

+0

이 항목에 대한 업데이트가 있습니까? – Thomas

+0

불행히도 프로젝트가 끝났고 다시 돌아올 수 없었습니다. – shellster

2

Frontware에서 제시 하듯이 sqlcipher를 사용할 수 있습니다.

pysqlcipher 파이썬 패키지는 sqlcipher 코드 결합을 사용하여 확장 기능을 컴파일하므로 사용하기가 더 쉽습니다.

정상적인 sqlite.dbapi2를 사용하는 것처럼 pysqlcipher를 사용하고 올바른 암호화 pragma를 설정하기 만하면됩니다.