2021年11月7日日曜日

SQLite3 読み取り専用でデータベースを開く (.open --readonly)

概要

SQLiteにはGRANTやREVOKEといった権限を操作するコマンドはなく、 ユーザやアクセス権限はOSのファイルアクセス管理に準ずる。

ただし、プログラミング言語用のライブラリやコマンドラインツールには データベースファイルを読み取り専用で開く手段が準備されていることがある。

このページではコマンドラインツールの方法を記載しておく。

コマンドラインツールでデータベースを読み取り専用で開く

コマンドラインツールであれば「.open --readonly」で データベースを開くことで読み取り専用で開くことが出来る。

読み取り専用で開くとinsert や update 実行時にエラーになる。

環境
  • Windows 10 64bit
  • SQLite3 (3.36.0) Command-Line Shell

C:\temp>sqlite3
SQLite version 3.36.0 2021-06-18 18:36:39
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.

sqlite> .open --readonly test1.db
sqlite> insert into product values (1, 'tomato');
Error: attempt to write a readonly database
                

ちなみに、中身が何もない空っぽのデータベースファイルを 読み取り専用で開こうとすると以下のようなエラーになる。


sqlite> .open --readonly test1.db
Error: unable to open database "test1.db": unable to open database file
                
note

どのバージョンから「--readonly」が使えるようになったかはよくわからん。 少なくとも手元に残っていた3.22.0では使えなかった。

SQLite 3 コマンドラインツール起動前にシェル等から読み取り専用で開く方法もある。

参考URL