ラベル readonly の投稿を表示しています。 すべての投稿を表示
ラベル readonly の投稿を表示しています。 すべての投稿を表示

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

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