我有公共接口,允许人们通过输入sql命令与数据库进行交互。但是,我不希望他们以任何方式更改数据库(如果可能,不访问某些表)。据我所知,SQLite没有用户概念,所以我该如何实现呢?
答案 0 :(得分:2)
首先复制“主”数据库文件并打开:-)不,真的,这是一个严肃的建议。
否则,根据访问SQLite的方式,可以传递给sqlite3_open_v2
的{{3}}。这适用于整个连接 - 以及该连接上的所有事务。
另一种选择是限制SQL条目,但非常非常要正确执行,因此我不建议使用此路由。
快乐的编码。
答案 1 :(得分:2)
如果在查询中没有应用程序定义的sql
函数,它间接修改数据库(例如:SELECT eval('DELETE FROM t1') FROM t2;
),则使用sqlite3_stmt_readonly
来确定是否准备好sql
}语句写入数据库,否则您可以尝试打开另一个read_only
数据库连接handler(SQLITE_OPEN_READONLY)
,该连接将用于read_only
访问。