【发布时间】:2011-09-10 08:33:34
【问题描述】:
我有公共界面,允许人们通过输入 sql 命令与数据库进行交互。但是,我不希望他们以任何方式更改数据库(如果可能,不要访问某些表)。不过据我了解,SQLite 没有用户的概念,那我该如何实现呢?
【问题讨论】:
我有公共界面,允许人们通过输入 sql 命令与数据库进行交互。但是,我不希望他们以任何方式更改数据库(如果可能,不要访问某些表)。不过据我了解,SQLite 没有用户的概念,那我该如何实现呢?
【问题讨论】:
如果查询中没有应用程序定义的sql函数,间接修改数据库(例如:SELECT eval('DELETE FROM t1') FROM t2;),则使用sqlite3_stmt_readonly判断准备好的sql语句是否写入数据库,否则你可以尝试打开另一个read_only,数据库连接handler(SQLITE_OPEN_READONLY),将用于read_only访问。
【讨论】:
首先复制“主”数据库文件并打开它 :-) 不,真的,这是一个严肃的建议。
否则,根据访问 SQLite 的方式,可以将 SQLITE_OPEN_READONLY flag 传递给 sqlite3_open_v2。这适用于整个连接——以及该连接上的所有事务。
另一种选择是限制 SQL 条目,但这很难正确地做到,因此我不推荐这条路线。
编码愉快。
【讨论】: