运行 沙盒环境中的 SQLite
Run SQLite in sandboxed environment
我的目标是允许从沙盒 Lua 环境访问 SQLite。
但在下面的示例中,仍然可以使用 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();
如果您创建连接,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;
}
}
我的目标是允许从沙盒 Lua 环境访问 SQLite。
但在下面的示例中,仍然可以使用 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();
如果您创建连接,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;
}
}