Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/64: Рейтинг темы: голосов - 64, средняя оценка - 4.95
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
SQLite

Пароль на SQLite

08.01.2019, 17:49. Показов 13075. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет и с Рождеством! Хочу поставить пароль на SQLite. Пробую сделать это через строку подключения:

C#
1
SQLiteConnection conn = new SQLiteConnection("Data Source=advsettings.db;Version=3;Password=\"test\";");
Файл создается. Но через DB Browser for SQLite я могу его открыть без проблем без всякого пароля.

2. Пробовал вариант такой:
C#
1
2
3
            SQLiteConnection conn = new SQLiteConnection("Data Source=advsettings.db;Version=3;");
            conn.SetPassword("pass");
            conn.Open();
То же самое: файл создается, без ошибок, но открывается без пароля

3. Пробовал такой:
C#
1
2
3
4
5
            SQLiteConnection conn = new SQLiteConnection("Data Source=advsettings.db;Version=3;");
            
            conn.Open();  
 
            conn.SetPassword("pass");
Ошибка:
Password can only be set before the database is opened.
4. Пробовал так:

C#
1
2
3
            SQLiteConnection conn = new SQLiteConnection("Data Source=advsettings.db;Version=3;");
            conn.ChangePassword("password");
            conn.Open();
Тогда ошибка такая:
Database must be opened before changing the password.
5. Ну и наконец:

C#
1
2
3
4
5
            SQLiteConnection conn = new SQLiteConnection("Data Source=advsettings.db;Version=3;");
            
            conn.Open();
 
            conn.ChangePassword("password");
На последней строке ошибка:
file is encrypted or is not a database
not an error
Если я выполню какие-то действия, например, Create Table и применю их ExecuteNonQuery, после этого вызываю ChangePassword, то ошибок нет. Но файл открывается так же без пароля

Нашел подобную тему без ответа на garu:

Почему эти методы не работают? У кого-нибудь получилось поставить пароль на SQLite через System.Data.SQLite?

Добавлено через 5 часов 9 минут
Никто не использовал эту опцию что ли? Или она у всех работает?
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
08.01.2019, 17:49
Ответы с готовыми решениями:

Пароль на sqlite
Программой db browser for Sqlite установил пароль на базу данных. В fdconnection.params.password добавил пароль которым запоролил базу,...

Заразил доки и поставил пароль а пароль забыл, не как его не взломать или не скинуть пароль с архива?
Зарарил доки и поставил пароль а пароль забыл, не как его не взломать или не скинуть пароль с архива?

Как написать формулы в sqlite или отказаться от использования sqlite вовсе
Доброго времени суток. Друзья, пишу справочник по физике, недавно столкнулся с проблемой - как написать формулы в sqlite? пользуюсь DB...

7
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
08.01.2019, 19:38
Лучший ответ Сообщение было отмечено netBool как решение

Решение

netBool, интересовался как-то этим вопросом. Насколько я понял шифрование должно осуществляться внешней dll которая поставляется за отдельную плату.

SQLite Encryption Extension (SEE). A drop-in replacement for public-domain SQLite source code that has the added ability to read/write AES-encrypted databases.

$2000 one time fee
1
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
09.01.2019, 09:29
Цитата Сообщение от netBool Посмотреть сообщение
Хочу поставить пароль на SQLite
Немного не правильно написали, Вы "бьетесь" с паролем на подключение к базе, но он не может защитить базу, если к ней есть физический доступ.
Вам нужно шифрование данных, поищите в поисковике "sqlite-with-encryptionpassword-protection", здесь к сожалению ссылку не могу указать.
0
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
09.01.2019, 18:16  [ТС]
OwenGlendower, в сети много противоречивой информации. нашел на system.data.sqlite.org исходники. Там есть такой метод в файле crypt.c (который по идее компилится в SQLite.Interop.dll):

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/* Called by sqlite and sqlite3_key_interop to attach a key to a database. */
int sqlite3CodecAttach(sqlite3 *db, int nDb, const void *pKey, int nKeyLen)
{
  int rc = SQLITE_ERROR;
  HCRYPTKEY hKey = 0;
 
  /* No key specified, could mean either use the main db's encryption or no encryption */
  if (!pKey || !nKeyLen)
  {
    if (!nDb)
    {
      return SQLITE_OK; /* Main database, no key specified so not encrypted */
    }
    else /* Attached database, use the main database's key */
    {
      /* Get the encryption block for the main database and attempt to duplicate the key
      ** for use by the attached database
      */
      Pager *p = sqlite3BtreePager(db->aDb[0].pBt);
      LPCRYPTBLOCK pBlock = (LPCRYPTBLOCK)sqlite3pager_get_codecarg(p);
 
      if (!pBlock) return SQLITE_OK; /* Main database is not encrypted so neither will be any attached database */
      if (!pBlock->hReadKey) return SQLITE_OK; /* Not encrypted */
 
      if (!CryptDuplicateKey(pBlock->hReadKey, NULL, 0, &hKey))
        return rc; /* Unable to duplicate the key */
    }
  }
  else /* User-supplied passphrase, so create a cryptographic key out of it */
  {
    hKey = DeriveKey(pKey, nKeyLen);
    if (hKey == MAXDWORD)
    {
#if SQLITE_VERSION_NUMBER >= 3008007
      sqlite3ErrorWithMsg(db, rc, SQLITECRYPTERROR_PROVIDER);
#else
      sqlite3Error(db, rc, SQLITECRYPTERROR_PROVIDER);
#endif
      return rc;
    }
  }
 
  /* Create a new encryption block and assign the codec to the new attached database */
  if (hKey)
  {
    Pager *p = sqlite3BtreePager(db->aDb[nDb].pBt);
    LPCRYPTBLOCK pBlock = CreateCryptBlock(hKey, p, -1, NULL);
    if (!pBlock) return SQLITE_NOMEM;
 
    sqlite3PagerSetCodec(p, sqlite3Codec, sqlite3CodecSizeChange, sqlite3CodecFree, pBlock);
 
    rc = SQLITE_OK;
  }
  return rc;
}
Он вызывается из sqlite3_key_v2, который в свою очередь вызван из sqlite3_key_v2. Я это не дебажил, но по исходникам оно выглядит именно так. А вот саму System.Data.SQLite продебажил до
C#
1
2
[DllImport("System.Data.SQLite.dll", CallingConvention = CallingConvention.Cdecl)]
internal static extern SQLiteErrorCode sqlite3_key(IntPtr db, byte[] key, int keylen);
То есть какой-то вызов из неуправляемой dll с таким названием происходит. Странно только, что ссылается не на SQLite.Interop.dll, а на System.Data.SQLite.dll . И сам метод sqlite3CodecAttach вроде не пустышка, что-то там шифрует вроде судя по коду. Если будет время, попробую пошагово посмотреть, что происходит
1
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18242 / 14156 / 5366
Регистрация: 17.03.2014
Сообщений: 28,844
Записей в блоге: 1
09.01.2019, 19:42
netBool, не забудь поделиться находками. Интересно будет узнать можно ли все-таки поставить пароль на базу.
0
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
10.01.2019, 05:54
Ладно, размещу тут цитатой
You can get sqlite3.dll file with encryption support from http://system.data.sqlite.org/.

1 - Go to http://system.data.sqlite.org/... loads.wiki and download one of the packages. .NET version is irrelevant here.

2 - Extract SQLite.Interop.dll from package and rename it to sqlite3.dll. This DLL supports encryption via plaintext passwords or encryption keys.

The mentioned file is native and does NOT require .NET framework. It might need Visual C++ Runtime depending on the package you have downloaded.
1
 Аватар для netBool
325 / 304 / 173
Регистрация: 16.11.2010
Сообщений: 1,069
Записей в блоге: 9
10.01.2019, 14:42  [ТС]
Цитата Сообщение от OwenGlendower Посмотреть сообщение
netBool, не забудь поделиться находками. Интересно будет узнать можно ли все-таки поставить пароль на базу.
Все получилось. Видимо, я устал. Долго смеялся, когда после двух дней мучений я обнаружил, что проверял не тот файл db

Так что в System.Data.SQLite все таки есть бесплатное шифрование из коробки. Алгоритм - RSA. (в SEE - AES вроде)

DB Browser for SQLite при подключении требует пароль. При чем если ввести правильный, он все равно не открывает, будто пароль был неверный )) Видимо, ожидает AES. Так что обыватели даже брутфорсом не возьмут. Впрочем, других дб-менеджеров я пока не пробовал

Цитата Сообщение от OttoFix Посмотреть сообщение
Ладно, размещу тут цитатой
Я читал. Этот пост с so.com мне и не давал покоя. Если бы бесплатное шифрование в System.Data.SQLite не было, зачем так подробно расписывать, как его применить без упоминаний о платном SEE

Цитата Сообщение от OttoFix Посмотреть сообщение
Вы "бьетесь" с паролем на подключение к базе, но он не может защитить базу, если к ней есть физический доступ.
Код остается слабым местом, спору нет
0
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
10.01.2019, 14:48

Не по теме:

Цитата Сообщение от netBool Посмотреть сообщение
после двух дней мучений я обнаружил, что проверял не тот файл db
:D бывает,



Интересно на сколько скорость работы просядет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.01.2019, 14:48
Помогаю со студенческими работами здесь

Файл cookies.sqlite не sqlite на самом деле, или как его открыть
хочу прочитать куки браузеров (это не противозаконно) оперу сделал, хром сделал, у хрома как раз sqlite как и у мозилы делаю...

SQLite for Excel или как выгрузить данные в SQLite
Здравствуйте! Мне необходимо написать макрос для выгрузки данных из excel в sqlite. Нашла проект SQLite for Excel, но при запуске...

Sqlite в c++ под linux, как правильно подключить sqlite?
Добрый день. Подскажите пожалуйста, как подключить sqlite к c++? Пишу приложение без сред разработки. в миднайте. есть .cpp файл, .h...

Редактирование связанных объектов через EF в SQLite, C#, EF 6.2, SQLite, C# Winforms
Здравствуйте. Суть: используя вышеперечисленные технологии, при чтении из базы данных связанных объектов после добавления, функция...

SQLite не найден SQLite.Interop,dll
работаю на виртуальной машине windows 7 x86. Установлен Visual Studio 2013. Через NuGet установил для своего проекта...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru