时间:2010-07-23 14:31:03

标签: sqlite permissions

10 个答案:

答案 0 :(得分:283)

答案 1 :(得分:13)

答案 2 :(得分:5)

对我来说问题是SELinux enforcement而不是权限。一旦我禁用强制执行,,根据Steve V.在the accepted answer.

的评论中提出的建议,“只读数据库”错误就消失了
echo 0 >/selinux/enforce

运行此命令后,一切都按预期工作(CentOS 6.3)。

我遇到的具体问题是在Graphite的设置过程中。我已经三次检查了apache用户拥有并可以写入我的graphite.db及其父目录。但在我“修复”SELinux之前,我得到的只是一个堆栈跟踪效果: DatabaseError:尝试编写只读数据库

答案 3 :(得分:3)

这可能是由SELinux引起的。如果您不想完全禁用SELinux,则需要将db目录fcontext设置为httpd_sys_rw_content_t。

semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/railsapp/db(/.*)?"
restorecon -v /var/www/railsapp/db

答案 4 :(得分:1)

我在Windows 7下从IIS得到了同样的错误。要修复此错误,我必须为sqlite数据库文件的IUSR帐户添加完全控制权限。如果在webmatrix而不是IIS下使用sqlite,则无需更改权限。

答案 5 :(得分:1)

当我尝试写入Android系统上的数据库时出现此错误。

显然sqlite3不仅需要对数据库文件和包含目录的写权限(正如@ austin-hyde在答案中已经说过的那样)而且环境变量TMPDIR必须指向(可能是可写的)目录

在我的Android系统上,我将其设置为TMPDIR="/data/local/tmp",现在我的脚本按预期运行:)

修改

如果您无法设置环境变量,可以使用此处列出的其他方法之一:https://www.sqlite.org/tempfiles.html#temporary_file_storage_locations 比如PRAGMA temp_store_directory = 'directory-name';

答案 6 :(得分:1)

我用过:

echo exec('whoami');

找出谁在运行脚本(例如用户名),然后向用户授予整个应用程序目录的权限,例如:

sudo chown -R:用户名/ var / www / html / myapp

希望这可以帮助某个人。

答案 7 :(得分:0)

总而言之,我通过将数据库文件(* .db)放在子文件夹中来解决此问题。

  • 子文件夹和其中的数据库文件必须是 www数据组。
  • 在www-data组中,您必须有权写入 子文件夹和数据库文件。

答案 8 :(得分:0)

(对于寻找类似问题答案的关注者) 我正在构建一个 C# .Net Core 6.0 WPF 应用程序。为了方便开发,我把Sqlite.db3放在c:\盘。要写入数据库,我必须以管理员身份打开 Visual Studio 2019。

答案 9 :(得分:-2)

当我从使用http://localhost更改为http://145.900.50.20(其中145.900.50.20是我的本地IP地址),然后更改回localhost时,我在浏览器中显示了此信息 - 有必要继续使用一旦我改变了那个IP地址