尝试编写只读数据库 - System.Data.SQLite

Posted

技术标签:

【中文标题】尝试编写只读数据库 - System.Data.SQLite【英文标题】:Attempt to write a read-only database - System.Data.SQLite 【发布时间】:2011-01-20 22:35:48 【问题描述】:

我遇到了一些我认为与安全有关的问题,但事实证明不可能像我所做的几乎所有事情一样......

网络上有大量关于此的信息,但没有任何解决问题的方法。

让我告诉我的步骤:

在 VS2k8 上有一个网站,当我调试或从 Cassini 启动时,一切正常 将 IIS 7.5 (Win7) 设置为指向该网站并添加 IIS_IUSRS 修改权限后出现错误 使用 IIS 6.0 也是如此!

Img:IIS 7.5 中数据库文件的安全性

(来源:balexandre.com)

请注意,所有其他文件和文件夹具有与上述相同的权限

完整的错误是:

Log: Executing query on SQLite Database

Message ***************************************
Attempt to write a read-only database
attempt to write a readonly database

Stack Trace ***********************************
at System.Data.SQLite.SQLite3.Reset(SQLiteStatement stmt)
at System.Data.SQLite.SQLite3.Step(SQLiteStatement stmt)
at System.Data.SQLite.SQLiteDataReader.NextResult()
at System.Data.SQLite.SQLiteDataReader..ctor(SQLiteCommand cmd, CommandBehavior behave)
at System.Data.SQLite.SQLiteCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.SQLite.SQLiteCommand.ExecuteNonQuery()
at soDatabaseManager.CommitPersonsToKitchenDatabase() in c:\Adwiza\Kitchen\App_Code\soDatabaseManager.cs:line 242

PS 请记住这也必须与 IIS 6 (windows 2003) 一起使用,IIS 7.5 仅用于故障排除,因为我们对所有内容都有更多控制权...

【问题讨论】:

你检查了文件的只读状态吗? 是的,我做到了,它不是只读的,IIS 中的文件不是:-/ 【参考方案1】:

确保执行 Web 应用程序的匿名 Web 用户帐户(NETWORK SERVICE 或 maybe something else)对 sqlite 数据库所在的文件夹具有读/写/创建/删除权限。

【讨论】:

在 IIS 7.5 下您可以选择使用 USER 或 Application,我的匿名用户是 IUSR(如您所见,它存在于安全面板中)并且我在使用应用程序池时遇到相同的错误身份(img:balexandre.com/temp/2010-02-25_1150.png)【参考方案2】:

另一个答案让我对这个问题有所了解,但我的解决方案有点不同。 问题是用户没有修改文件夹和 .db 文件的权限。 所以我授予用户 Everyone 权限(Authenticated UsersGuest 的集体组)。 NETWORK SERVICE(或类似的)的权限在我的情况下没有解决。

注意:更改后必须重新启动IIS,才能加载所做的更改。

【讨论】:

对我来说,这是应用程序池标识,但 +1 建议重新启动 - 但在我的情况下,这只适用于应用程序池本身。并非所有 IIS。【参考方案3】:

ss----enter image description here

您也应该这样做。错误为--->无法打开数据库文件 必须添加连接字符串。--"Version=3;Mode=ReadWrite;New=False;Compress=True;Journal Mode=Off;";

【讨论】:

文本图像是个坏主意(它们无法搜索,外部网站有时会将它们删除),而是复制并粘贴文本。

以上是关于尝试编写只读数据库 - System.Data.SQLite的主要内容,如果未能解决你的问题,请参考以下文章

Swift 中的惰性只读属性

python - 为啥只读属性是可写的?

尝试写入只读数据库(代码 1032)

插入期间 SQLite 错误“尝试写入只读数据库”?

UWP SQLite 错误:“尝试写入只读数据库” [重复]

Django 登录错误:在 IIS 中“尝试写入只读数据库”