Как подключиться к защищенной базе данных Sqlite3 с помощью Python - PullRequest
0 голосов
/ 17 мая 2018

Я создал базу данных SQLite3 и защитил ее паролем («тест») благодаря приложению DB browser for SQLite. Чтобы подключиться к моей базе данных через Python, мне нужно предоставить пароль, но я не могу понять, как это сделать. Я попробовал следующий код:

conn=sqlite3.connect("mydatabase.db", Password="test")
cur=conn.cursor()

EDIT:

Моя база данных SQLite3 была зашифрована с помощью SQLCipher (см. Изображение). enter image description here Если я запускаю следующий код:

conn=sqlite3.connect("mydatabase.db")
cur=conn.cursor()

Я получаю эту ошибку:

sqlite3.DatabaseError: file is encrypted or is not a database

Как я могу передать пароль для соединения с моим db через Python?

РЕДАКТИРОВАТЬ 2

Вот краткое изложение того, чего я пытаюсь достичь. Я разрабатываю приложение с Python 3, для которого требуется предварительно заполненная база данных, но эта база данных должна быть защищена паролем. После обширных исследований кажется сложным подключить зашифрованную базу данных SQLite3 через Python 3. Библиотека звонков pysqlcipher существует, но только для Python 2.7. Мой следующий вопрос будет, возможно, слишком широким, и я заранее извиняюсь. Существует ли еще одна переносимая база данных, позволяющая мне защитить ее паролем и получить доступ к Python? Другая идея, которую я имею в виду, чтобы решить мою проблему, - это использовать библиотеку zipfile. В этой ссылке упоминается, что модуль zipfile не поддерживает шифрование, но неясно, относится ли шифрование к базе данных SQLite3 или к zip-файлу. Идея состояла бы в том, чтобы заархивировать мою незащищенную DB в защищенный zip-файл, как мне кажется, я могу это сделать ( link ). Цель этого редактирования - получить новые идеи о том, как решить мою проблему. Спасибо

Ответы [ 2 ]

0 голосов
/ 09 декабря 2018

Если ваша база данных зашифрована с помощью SqlCipher, вам необходимо установить sqlcipher в вашей SO Windows: Скачать

Linux: sudo pacman -S sqlcipher или

sudo apt-get install sqlcipher

После того, как вам понадобится библиотека pysqlcipher3: pip install pysqlcipher3

См .: https://github.com/rigglemania/pysqlcipher3

мой пример кода:

from pysqlcipher3 import dbapi2 as sqlite3


class Database(object):
    def __init__(self, dbname):
        self.dbname = dbname

    def connDB(self):
        self.conn = sqlite3.connect(self.dbname)
        self.cursor = self.conn.cursor()
        self.cursor.execute("PRAGMA key='mypassword'")

    def createDB(self):
        self.connDB()
        self.cursor.execute(
            '''
            CREATE TABLE IF NOT EXISTS users (
            id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
            name TEXT NOT NULL,
            login TEXT NOT NULL,
            passwd TEXT);
            '''
        )

        self.cursor.execute(
            '''
            INSERT INTO users (name, login, passwd)
            VALUES ("Admininstrator", "admin", "12345")
            '''
        )
        self.conn.commit()
        self.conn.close()

    def queryDB(self, sql):
        self.connDB()
        self.cursor.execute(sql)

        if sql[0:6].lower() == 'select':
            result = self.cursor.fetchall()
            self.conn.close()
            return result
        else:
            self.conn.commit()
            self.conn.close()
0 голосов
/ 17 мая 2018

Вам необходим модуль SQLCipher для чтения этой базы данных.Модуль SQLite3 по умолчанию не поддерживает это.Смотри https://github.com/sqlitebrowser/sqlitebrowser/wiki/Encrypted-Databases

...