Невозможно указать пароль в строке подключения для SQLite.

Я использую SQLite с Entity Framework.

Я создаю БД со следующим кодом:

class MyContext : DbContext
{   
    // DbSets, OnModelCreating(), etc.

    protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
    {
        optionsBuilder.UseSqlite("Data Source=c:\\test.db");
    }
}

//this is in my test method
 using (var db = new MyContext())
{
    db.Database.EnsureCreated();
}

Приведенный выше код работает. БД создается. Но я хочу зашифровать БД, указав пароль в строке подключения:

optionsBuilder.UseSqlite("Data Source=c:\\test.db;Password=mypassword");

В этом случае послеEnsureCreated называется, я получаю исключение

Произошло необработанное исключение типа «System.ArgumentException» в System.Data.dll Дополнительная информация: ключевое слово не поддерживается: «пароль».

Что не так с использованием пароля? Как я могу зашифровать эту базу данных SQLite?

 Nkosi16 июн. 2016 г., 16:23
Проверьте этот вопросstackoverflow.com/questions/35060250/...
 lordkain16 июн. 2016 г., 16:22
где ваш пароль хранится прямо сейчас, если он находится в файле web.config, вы можете использовать aspnet_regiis -pef для шифрования файла конфигурации

Ответы на вопрос(4)

которое не включает в себя копирование DLL в папке BIN.

Взгляни наЭто.

 private const string Password = "1234";
        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            var conn = new SqliteConnection(@"Data Source=test.db;");
            conn.Open();

            using (var command = conn.CreateCommand())
            {
                command.CommandText = $"PRAGMA key = '{Password}';";
                command.ExecuteNonQuery();
            }
            optionsBuilder.UseSqlite(conn);
        }

и мне удалось установить пароль для моего решения, и решение работает нормально, но у меня есть другая проблема - я не могу открыть базу данных (я использую DB Browser для SQL Lite), используя этот пароль (когда я нажимаю «ОК», пароль удаляется и Ничего не произошло):

printScreen DB Browser

 Stephen Vernyi29 янв. 2018 г., 19:06
Вы случайно не поняли это?
 mamarija13 мар. 2018 г., 15:42
Браузер БД не может открыть зашифрованный файл. Единственный способ открыть ее - это сначала разблокировать базу данных «вручную»: скопировать файл sqlite3.exe в папку с базой данных, запустить инструмент командной строки, выполнить команду: sqlite3 -key YourKey DBname.db (где YourKey - это ключ, который вы использовали для записи, и DBname - это имя вашей базы данных) запустите команду: .rekey YourKey "" ""
 fedeteka02 мая 2018 г., 14:59
Вы можете использовать этот другой браузер SQLite "SQLite2009 Pro Enterprise Manager"sqlite2009pro.azurewebsites.net Если база данных защищена паролем, браузер спросит вас пароль
Решение Вопроса

Защита базы данных SQLite, используемой основным приложением EntityFramework

EF Core использует Microsoft.Data.Sqlite, который в настоящее время не поддерживает готовое шифрование. Увидетьhttps://github.com/aspnet/Microsoft.Data.Sqlite/issues/184, Вы можете добавить шифрование самостоятельно, используя расширения SQLite.

При ссылке на GitHub есть другие ссылки на альтернативу на

Шифрование в Microsoft.Data.Sqlite

 Tschareck16 июн. 2016 г., 16:17
EntityFramework.Core (RC1)
 Tschareck16 июн. 2016 г., 16:03
Это также вызывает исключение «Ключевое слово не поддерживается:« версия ».»
 Nkosi16 июн. 2016 г., 16:09
Какую версию структуры сущностей вы используете?

«Чистый» файл с открытым исходным кодом sqlite3.. Существуют и другие реализации, в том числе лицензированные и нелицензированные. Для моего решения я использовалrindeal / проект шифрования SQLite3 от GitHub

Мое решение:

Скачать скомпилированные двоичные файлыСкопируйте sqlite3.dll в папку BINдобавить DLL для проекта в Visual Studioустановить Copy to Output Directory - всегда копировать

Используйте этот код в конструкторе контекста:

string password;
var connection = Database.GetDbConnection();
connection.Open();
using (var command = connection.CreateCommand())
{
    command.CommandText = $"PRAGMA key='{password}';";
    command.ExecuteNonQuery();
}

Ваш ответ на вопрос