2015-07-10 6 views
0

В настоящее время использую createSqlitePool от упорного-SQLite:Как открыть базу данных Sqlite3 в режиме только для чтения с постоянным?

import Database.Persist.Sqlite 

createSqlitePool "mydb.db" 10 

Согласно Sqlite3 документации можно передать дополнительные параметры в строках соединения, например

"Data Source=c:\mydb.db;Version=3;Read Only=True;" 

Cf. https://www.connectionstrings.com/sqlite-net-provider/read-only-connection/

По-видимому, нельзя просто передать эту строку подключения createSqlitePool. Есть ли способ сказать persistent-sqlite открыть мою базу данных только для чтения?

+0

sqlite, являющийся файловой базой данных, не имеет понятия «строки соединения». У него даже нет связей, потому что dbms здесь просто библиотека в вашей программе. – Cubic

ответ

0

Persistent теперь поддерживает sqlite3-URI-синтаксис в строках подключения, как описано здесь:

https://github.com/yesodweb/persistent/wiki/Database-Configuration

Таким образом, только для чтения что-то вроде это работает:

URI файла стиля, относительный путь , только для чтения: «файл: sqlite3.db? mode = ro»

2

Я думаю, что это конкретная информация .NET, с которой вы связываетесь, поэтому она, вероятно, здесь не применима.

Если вы посмотрите на the code, постоянный просто вызывает функцию SQLite C sqlite3_open, которая принимает только имя файла базы данных.

Похоже, что необходимо использовать sqlite3_open_v2, которые принимают дополнительные флажки, если вы хотите сделать соединение только для чтения.

Возможно, вы, возможно, достигнете того же, что и с разрешениями на файлы, поскольку пользователь не сможет записать файл SQLite DB, если у него нет разрешения на это.

+0

Кажется разумным открыть вопрос о Persistent об этом @ ruben.moor. Это может быть не слишком сложно реализовать самостоятельно. – MaxGabriel

+0

Я попробую подход с простым разрешением только на чтение в файле db. Это звучит достаточно для всех практических целей. Однако можно утверждать, что доступ только для чтения, указанный в коде haskell, является более чистым (в зависимости от обстоятельств), и я также рассмотрю необходимые изменения для этого. –