Об этом проекте
jetdb — это чистая библиотека и инструмент командной строки на Rust для чтения файлов базы данных Microsoft Access (.mdb и .accdb). Она не имеет зависимостей C/C++ или FFI, что делает её переносимой на macOS, Windows, Linux и даже WebAssembly (включая браузерные цели). Поддерживает Access 97 (Jet3) до Access 2019 (ACE17).
## Установка
- **Инструмент CLI**: `cargo install jetdb-cli`
- **Библиотека**: Добавьте `jetdb = "0.2"` в ваш Cargo.toml.
## Примеры использования CLI
- `jetdb --password secret tables protected.accdb` — открыть файл, защищённый паролем
- `jetdb ver database.mdb` — показать версию движка базы данных
- `jetdb tables database.mdb` — список таблиц
- `jetdb schema database.mdb` — показать схему таблиц (столбцы, индексы, связи)
- `jetdb schema database.mdb --ddl sqlite` — сгенерировать DDL для SQLite, PostgreSQL, MySQL или Access
- `jetdb export database.mdb Table1` — экспорт данных таблицы в CSV
- `jetdb queries list database.mdb` — список сохранённых запросов
- `jetdb queries show database.mdb SelectQuery` — показать SQL сохранённого запроса
- `jetdb vba list database.mdb` — список модулей VBA
- `jetdb vba show database.mdb Module1` — показать исходный код VBA
- `jetdb macro list database.accdb` — список именованных макросов
- `jetdb macro show database.accdb AutoExec` — показать макрос в виде текста
- `jetdb prop database.mdb Table1` — показать свойства объекта
## Использование библиотеки
```rust
use jetdb::{PageReader, read_catalog, read_table_def, read_table_rows};
fn main() -> Result<(), jetdb::FileError> {
let mut reader = PageReader::open("database.mdb")?;
let catalog = read_catalog(&mut reader)?;
for entry in &catalog {
println!("{}", entry.name);
}
let entry = &catalog[0];
let table_def = read_table_def(&mut reader, &entry.name, entry.table_page)?;
let result = read_table_rows(&mut reader, &table_def)?;
for row in &result.rows {
println!("{:?}", row);
}
Ok(())
}
```
## Поддерживаемые версии
| Движок | Версия Access | Формат файла |
|--------|---------------|-------------|
| Jet3 | Access 97 | .mdb |
| Jet4 | Access 2000/2003 | .mdb |
| ACE12 | Access 2007 | .accdb |
| ACE14 | Access 2010 | .accdb |
| ACE15 | Access 2013 | .accdb |
| ACE16 | Access 2016 | .accdb |
| ACE17 | Access 2019 | .accdb |
## Возможности
- Чтение метаданных таблиц (столбцы, индексы, связи)
- Чтение данных строк с сопоставлением типов Rust (Text, Long, Double, Timestamp, Money, Memo, OLE, GUID и т.д.)
- Генерация DDL для SQLite, PostgreSQL, MySQL и Access SQL
- Восстановление SQL из сохранённых запросов
- Извлечение исходного кода модулей VBA
- Чтение свойств объектов (LvProp)
- Расшифровка баз данных, зашифрованных RC4, и файлов .accdb, защищённых паролем (Agile, RC4 CryptoAPI, Standard/NonStandard AES)
- Обработка кодировок Jet3 (Latin-1) и Jet4+ (UTF-16LE, сжатый текст)
- Работа на WebAssembly, включая браузерную цель (`wasm32-unknown-unknown`), путём открытия базы данных из байтов в памяти с помощью `PageReader::open_reader`
## Ограничения
- Только чтение (без поддержки записи)
- Нет поиска по индексу (только полное сканирование таблицы)
- Загружает все строки в память; учитывайте использование памяти при очень больших таблицах
- Файлы .accdb, защищённые паролем, требуют `PageReader::open_with_password` (Agile, RC4 CryptoAPI, Standard/NonStandard AES)
- Базы данных репликации (.mda) не тестировались
## Интеграция с ИИ-агентом
Доступно как навык Claude Code через репозиторий [agent-skills](https://github.com/dominion525/agent-skills). Установка через маркетплейс плагинов Claude Code:
```
/plugin marketplace add dominion525/agent-skills
/plugin install jetdb-cli@dominion525-skills
```
Или через Vercel skills CLI:
```bash
npx skills add dominion525/agent-skills --skill jetdb-cli -a claude-code
```
## Благодарности
- [mdbtools](https://github.com/mdbtools/mdbtools) — HACKING.md был бесценным справочником для понимания формата файлов MDB/ACCDB
- [Jackcess](https://github.com/spannm/jackcess) (Apache License 2.0) — большинство тестовых файлов .mdb/.accdb взяты из этого проекта
- [jackcessencrypt](https://github.com/jahlborn/jackcessencrypt) (Apache License 2.0) — тестовые файлы, связанные с шифрованием
- [MS-OFFCRYPTO](https://learn.microsoft.com/en-us/openspecs/office_file_formats/ms-offcrypto/) — спецификация Microsoft для шифрования документов Office
## Лицензия
MIT OR Apache-2.0
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.