Запустите SQLite в изолированной среде - PullRequest
0 голосов
/ 08 мая 2018

Моя цель - разрешить SQLite доступ из изолированной среды Lua. Но в приведенном ниже примере все еще можно использовать attach database (и, возможно, более нежелательные действия). Есть ли способ выполнить запросы SQLite в изолированной среде на предварительно определенный файл SQLite

SQLiteConnection.CreateFile("MyDatabase.sqlite");

SQLiteConnection m_dbConnection = new SQLiteConnection("Data Source=MyDatabase.sqlite;Version=3;");

m_dbConnection.Flags = SQLiteConnectionFlags.Default | SQLiteConnectionFlags.NoBindFunctions |
                        SQLiteConnectionFlags.NoConnectionPool | SQLiteConnectionFlags.NoCreateModule |
                        SQLiteConnectionFlags.NoLoadExtension | SQLiteConnectionFlags.NoExtensionFunctions;

m_dbConnection.Open();

string sql = "attach database 'contacts.db' as contacts;";

SQLiteCommand command = new SQLiteCommand(sql, m_dbConnection);

command.ExecuteNonQuery();

m_dbConnection.Close();

1 Ответ

0 голосов
/ 08 мая 2018

Если вы создаете соединение, SQLiteConnection имеет событие Authorize, которое можно использовать для предотвращения присоединения баз данных:

SQLiteConnection conn = new SQLiteConnection("Data Source=:memory:");
conn.Authorize += Conn_Authorize;

...

private static void Conn_Authorize(object sender, AuthorizerEventArgs e)
{
    if (e.ActionCode == SQLiteAuthorizerActionCode.Attach)
    {
        e.ReturnCode = SQLiteAuthorizerReturnCode.Deny;
    }
    else
    {
        e.ReturnCode = SQLiteAuthorizerReturnCode.Ok;
    }
}
...