프로젝트 소개
jetdb는 Microsoft Access 데이터베이스 파일(.mdb 및 .accdb)을 읽기 위한 순수 Rust 라이브러리이자 명령줄 도구입니다. C/C++ 의존성이나 FFI가 없어 macOS, Windows, Linux는 물론 WebAssembly(브라우저 타겟 포함)에서도 이식성이 뛰어납니다. Access 97(Jet3)부터 Access 2019(ACE17)까지 지원합니다.
## 설치
- **CLI 도구**: `cargo install jetdb-cli`
- **라이브러리**: Cargo.toml에 `jetdb = "0.2"`를 추가하세요.
## 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` – SQLite, PostgreSQL, MySQL 또는 Access용 DDL 생성
- `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 등)
- SQLite, PostgreSQL, MySQL 및 Access SQL용 DDL 생성
- 저장된 쿼리에서 SQL 복구
- VBA 모듈 소스 코드 추출
- 객체 속성 읽기(LvProp)
- RC4 암호화 데이터베이스 및 암호로 보호된 .accdb 파일 복호화(Agile, RC4 CryptoAPI, Standard/NonStandard AES)
- Jet3(Latin-1) 및 Jet4+(UTF-16LE, 압축 텍스트) 인코딩 처리
- `PageReader::open_reader`로 메모리의 바이트에서 데이터베이스를 열어 WebAssembly(브라우저 타겟 `wasm32-unknown-unknown` 포함)에서 실행
## 제한 사항
- 읽기 전용(쓰기 지원 없음)
- 인덱스 기반 조회 없음(전체 테이블 스캔만 가능)
- 모든 행을 메모리에 로드하므로 매우 큰 테이블에서는 메모리 사용에 유의
- 암호로 보호된 .accdb 파일은 `PageReader::open_with_password` 필요(Agile, RC4 CryptoAPI, Standard/NonStandard AES)
- 복제 데이터베이스(.mda)는 테스트되지 않음
## AI 에이전트 통합
[agent-skills](https://github.com/dominion525/agent-skills) 저장소를 통해 Claude Code Skill로 사용할 수 있습니다. Claude Code Plugin Marketplace를 통해 설치:
```
/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/) – Office 문서 암호화에 대한 Microsoft 사양
## 라이선스
MIT OR Apache-2.0
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.