尝试编写只读数据库 - 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 Users 和 Guest 的集体组)。 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的主要内容,如果未能解决你的问题,请参考以下文章