Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Attempt to write a read-only database - System.Data.SQLite

I'm having a little bit of a problem that I thought was related to Security but, turns out can't be as I did almost everything ...

Plenty of information on this on the web but nothing has an answer to fix the issue.

Let me tell my steps:

  • Have a Website on VS2k8 that when I debug or start from Cassini, all works fine
  • When setting up IIS 7.5 (Win7) to point to this website and after adding IIS_IUSRS Modify rights I get the error
  • Same thing using IIS 6.0!

Img: Security on Database File from IIS 7.5

alt text
(source: balexandre.com)

Note that all other files and folders have the same rights as above

The full Error is:

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

P.S. Keep in mind that this has to work with IIS 6 (windows 2003) as well, the IIS 7.5 is only for troubleshooting as we have more control in everything...

like image 679
balexandre Avatar asked Feb 25 '10 09:02

balexandre


People also ask

Is SQLite read only?

The SQLite file is a writeable file on the filesystem.

Which language is used to read and write data to a SQLite database?

SQLite (/ˌɛsˌkjuːˌɛlˈaɪt/, /ˈsiːkwəˌlaɪt/) is a database engine written in the C programming language.

Can you read and write SQLite at the same time?

First, by default, multiple processes can have the same SQLite database open at the same time, and several read accesses can be satisfied in parallel. In case of writing, a single write to the database locks the database for a short time, nothing, even reading, can access the database file at all.


2 Answers

Make sure that the anonymous web user account (NETWORK SERVICE or maybe something else) under which your web application executes has read/write/create/delete access to the folder where the sqlite database resides.

like image 98
Darin Dimitrov Avatar answered Oct 17 '22 01:10

Darin Dimitrov


The other answer give me an idea about the problem, but my solution was a bit differente. The problem was that the user did not have permissions to modify the folder and the .db file. So I give permission to the user Everyone (collective group for Authenticated Users and Guest). The permisions on NETWORK SERVICE (or similars) did not solve in my case.

Note: The IIS must be restarted, after the change, to load the change made.

like image 36
Alejandro Montilla Avatar answered Oct 17 '22 00:10

Alejandro Montilla