如何确保SqLite中的只读事务?

时间:2011-09-10 08:33:34

标签: c++ sql c sqlite

我有公共接口,允许人们通过输入sql命令与数据库进行交互。但是,我不希望他们以任何方式更改数据库(如果可能,不访问某些表)。据我所知,SQLite没有用户概念,所以我该如何实现呢?

2 个答案:

答案 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访问。