配置 Datasette 使用 SQLite 的 set_authorizer 机制来阻止操作
在 Datasette 所在的同一环境中安装此插件。
datasette install datasette-sqlite-authorizer
此插件目前提供一个配置选项:read_only_tables
。您可以使用此选项指定应设为只读的表列表。
如果一个表是只读的,任何对其进行的写入尝试 - insert
、update
、delete
、drop table
、alter table
- 都将被拒绝并显示错误消息。
要配置只读表,请将以下内容添加到您的 metadata.yaml
文件中
plugins:
datasette-sqlite-authorizer:
read_only_tables:
- table: my_table
database: my_database
如果您想将相同的规则应用于所有数据库,可以省略 database
键。
以下是如何使用此插件使所有与 Litestream 同步相关的表在所有附加的数据库中都设为只读
plugins:
datasette-sqlite-authorizer:
read_only_tables:
- table: _litestream_lock
- table: _litestream_seq
要为特定操作检查启用调试输出(到标准错误),请将它们添加到 debug_actions
列表中。例如,要记录所有 SQLITE_INSERT
操作
plugins:
datasette-sqlite-authorizer:
debug_actions:
- SQLITE_INSERT
- SQLITE_DELETE
记录的输出将类似于这样
authorizer: {"action": "SQLITE_INSERT", "arg1": "foo", "arg2": null, "db_name": "main", "trigger_name": null, "result": "OK"}
authorizer: {"action": "SQLITE_DELETE", "arg1": "foo", "arg2": null, "db_name": "main", "trigger_name": null, "result": "OK"}
要在本地设置此插件,请首先检出代码。然后创建一个新的虚拟环境
cd datasette-sqlite-authorizer
python3 -m venv venv
source venv/bin/activate
现在安装依赖项和测试依赖项
pip install -e '.[test]'
运行测试
pytest