2024年2月5日月曜日

SQLite 3 コマンドラインツール起動時に読み取り専用でデータベースを開く (-readonly)

概要

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

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

このページでは、コマンドプロンプトやbashといったシェルから SQLite 3 のデータベースファイルを読み取り専用で開く方法を記載しておく。

コマンド

SQLite 3 のコマンドのオプションに「-readonly」を指定してデータベースを開くことで 読み取り専用で開くことが出来る。
読み取り専用で開くとinsert や update 実行時にエラーになる。


sqlite3 -readonly DB_NAME
                

実行例

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

C:\temp>rem # 1.
C:\temp>sqlite3 -readonly test.db
SQLite version 3.45.1 2024-01-30 16:01:20 (UTF-16 console I/O)
Enter ".help" for usage hints.

sqlite> -- # 2.
sqlite> create table test_table (id, name);
Runtime error: attempt to write a readonly database (8)
sqlite>
                
  • 読み取り専用でtest.dbを開く
  • create文を実行しようとするとエラーになるのがわかる

SQLite 3 のコマンドラインツールを起動した後でも 「.open」コマンドを使用して読み取り専用でデータベースに繋ぎなおすことができる。

参考URL