Jet データベースエンジンの移行のススメ

Last Update:
このエントリーをはてなブックマークに追加

こんにちは、Japan Developer Support Core チームの高橋です。かつて SQL Server サポートの一環でデータベース アクセス関連のテクノロジーを対応しており、ブログも執筆していましたが、開発支援サポートのチームでも引き続き同テクノロジーについて対応しています。今回はその中から Jet データベース エンジンの利用の終了を皆さんにご検討いただきたく、Jet データベース エンジンの現状と移行について本記事で説明します。

Jet データベース エンジンとは?

Jet データベース エンジンは Microsoft が 1990年代に初めてリリースした Windows 向けの組み込み型データベースエンジンです。主に Microsoft Access のデータストレージ エンジンとして採用され、また Visual Basic をはじめとするアプリケーションで組み込みデータベースとして利用されてきました。Jet エンジンはサーバー プロセスを持たないファイル共有型の RDBMS であり、データは単一のファイル(.mdb 形式など)に格納されます。これにより、専用のデータベース サーバーを用意せずとも手軽にデータベース機能を組み込めるため、小規模データや単独ユーザーでの利用に便利です。一方で、大規模データや多数ユーザーでの同時利用を前提としていないため、例えば Web サーバーでのマルチスレッド処理が想定される環境での利用はサポートされないなどの制限があります。

なお、DAO (Data Access Objects)、ADO (Microsoft ActiveX Data Objects) や MFC (Microsoft Foundation Class) の CDatabase などのデータ アクセス テクノロジーを使用して MDB ファイルにアクセスする処理であることは把握していても、「Jet を使っている」と意識していないケースも多いようですが、次のような .mdb ファイルを使用するケースでは Jet データベース エンジンを利用しています。

  • 過去のバージョンの Microsoft Access で作成した業務ツール
  • "Microsoft.Jet.OLEDB.4.0" (Microsoft OLE DB Provider for Jet) を接続用 OLE DB プロバイダーとして利用している VBA、VB6.0、VC++、VB.NET アプリ
  • "Microsoft Access Driver (*.mdb)" を接続用 ODBC ドライバとして利用している VBA、VB6.0、VC++、VB.NET アプリ

Jet データベース エンジンの非推奨化とサポート状況

現在、Jet データベース エンジンは非推奨 (Deprecated) の技術と位置付けられています。次のページでも "Microsoft Jet データベース エンジン 4.0" が非推奨のコンポーネントとして紹介されていることをご覧いただけます。

非推奨の MDAC/WDAC コンポーネント

これは、新規開発では使用を避けるべきレガシーコンポーネントであり、将来のプラットフォームからは除去される可能性があるという意味です。実際、弊社では 2000 年代以降 Jet データベース エンジン自体の開発を停止しており、Jet データベース エンジン バージョン 4.0 以降は機能強化が行われず、Windows に含まれる Jet 関連のコンポーネントもセキュリティ対策のための修正のみとする維持モードです。また、64 ビット版の Jet データベース エンジンは提供されておらず、今後も予定はありません。これに伴い、Windows 搭載の Jet 向け OLE DB プロバイダーや ODBC ドライバーも 32 ビット版のみ提供しています。これは、64 ビット ネイティブのアプリケーションから Jet データベース エンジンを介してデータベース (.mdb) に直接アクセスできないことを意味します。(WoW64 上の 32ビットプロキシを介す必要があります。)

Jet データベース エンジン利用上のリスク

前述の通り、Jet データベースは開発を終了している維持モードにつき、以前より存在していた不具合が表面化した場合にもセキュリティ脆弱性に相当しない限りはその修正は行われません。直近では次のような問題が報告されましたが、問題に遭遇したユーザーの皆様には同理由により修正ではなく移行による対応を進めていただきました。

発生する問題:
mdb ファイルへの接続時に "Not a valid password." のエラーが発生して接続が失敗することがある。

上記問題の原因:
Jet データベース エンジンは Temp 環境変数で示される領域に一時ファイルを作成し、データの並べ替えなどの作業用に使用しますが、今回のエラーは実際のデータベースへの接続にあたって作成される一時ファイル向けのパスワード処理で未初期化の変数を使用するため、その変数が割り当てられたメモリ領域の内容に依存してエラーと判断される問題です。

また、Jet データベース エンジンはその古さゆえに、セキュリティ面でもいくつかのリスクや課題があります。

代表的なものを挙げます:

リスク項目 内容
パスワードセキュリティの弱さ Jet データベース(.mdb)にはオプションで「データベース暗号化/パスワード設定」が可能ですが、その実装は非常に脆弱です。Access 95–2003 の Jet 3.x/4.x では、パスワード文字列が平文または単純な XOR パターンでファイルヘッダに格納されるだのみにつき、第三者による解析が容易と言われています。
ユーザー権限機能の形骸化 Jet データベース (.mdb) は独自のユーザー/グループ管理によるアクセス制御機能(俗に「ワークグループセキュリティ」)を提供しています。しかしこの仕組みもセキュリティが不十分のため、設定が複雑な割に回避策が存在するものと言えます。
ファイル自体への物理アクセス Jet データベースは単一ファイルにまとまっているため、そのファイルにアクセスできれば OS レベルでコピー・移動・解析が可能です。たとえファイルを開くパスワードを設けても前述の通り容易に解読できるため、悪意ある内部ユーザーや第三者にファイルそのものを取得されると情報漏えいにつながります。サーバー型の RDBMS のような統合認証や通信暗号化を Jet は備えていないため、設置環境でのファイルアクセス権限の厳重な管理が不可欠です。

以上のように、Jet データベース エンジンはセキュリティ面でも時代遅れにつき、企業システムで Jet (.mdb) を使い続けることは、脆弱性や情報漏洩リスクの観点からも望ましくありません。

Jet データベース エンジンからの移行先

冒頭にも記載したように、Jet データベース エンジンの利用を終了し、他のデータベース製品への移行を公式に推奨しています。Jet データベース エンジンを利用しているアプリケーションやシステムは、用途に応じて以下のような弊社サポート対象の代替データベース エンジンへの移行を検討しましょう。

移行先 概要と利点
Microsoft SQL Server (Express Edition を含む) 企業向けの標準的 RDBMS です。Jet データベース エンジンの代替としては SQL Server Express エディション (無償版) が適しています。Express エディションはローカル PC にインストールして手軽に使える一方、性能・信頼性・セキュリティはいずれも Jet データベース エンジンより大幅に向上します。将来的にデータやユーザー数が増大した場合も、上位エディションの SQL Server へのスケールアップが可能です。Access を使用しているケースでは、Jet データベース エンジンの「アップサイジングウィザード」も SQL Server への移行を支援します。
Access ランタイム (.ACCDB形式) Microsoft Access 2007 で採用された新世代エンジンを使用する方法です。Jet バージョン 4.0 から派生しており従来の Jet と高い互換性を保ちつつ、マルチバリューフィールドや添付ファイル型などの新機能、強化された暗号化を備えています。Access ランタイムにて提供される OLE DB プロバイダーや ODBC ドライバーからも旧 MDB ファイルを扱えるため、既存 Jet アプリも Access ランタイムのインストールと接続文字列に指定するプロバイダーやドライバの指定の変更によって継続運用が可能です。また、64 ビット版も提供されています。Access を使った業務ツールなど Jet 特有の機能が必要な場合、このエンジン環境へ移行することが一つの解決策です。

まとめ

Jet データベース エンジンはデスクトップ向けデータベース エンジンとして完結した機能セットを持ち、小規模な用途であればプログラムから直接扱える便利なものであり、MS Access 黎明期から多くのアプリケーションで用いられてきた実績あるエンジンでした。しかし、その構造上の制約から時代と共に役割を終え、現在では非推奨のレガシー技術です。サイズや同時利用、セキュリティの制約があるため、より堅牢なデータベース技術へ置き換えられてきたと言えます。このような背景を踏まえ、Jet データベース エンジンを使用したシステムに対して弊社では SQL Server ファミリや Access ランタイムへの移行を推奨しています。Jet データベースを利用したシステムをお持ちの場合、上記情報を参考に是非早めの移行計画策定をお勧めします。

Jet はレガシーな組み込みデータベース エンジン

Microsoftが 1990 年代に開発した Jet データベース エンジンは、Microsoft Access や古い Visual Basic アプリからアクセスするデータベースエンジンとして広く利用されたファイルベース型の RDBMS です。

非推奨と制約

Jet データベース エンジンは現在 Microsoft によって非推奨 (Deprecated) とされており、2GB までのファイルサイズ制限や同時接続 255 ユーザーまでといった容量・規模上の限界、および 32 ビット環境専用(64ビット未対応)といった技術的制約があります。

移行の推奨

Jet を使用するアプリケーションは、Microsoft がサポートする代替データベース製品への移行が推奨されます。具体的には、SQL Server(小規模用途には無償 Express 版含む)や、Access の新しい ACCDB 形式 (Access ランタイム利用) などが公式に推奨されています。


本ブログの内容は弊社の公式見解として保証されるものではなく、開発・運用時の参考情報としてご活用いただくことを目的としています。もし公式な見解が必要な場合は、弊社ドキュメント (https://learn.microsoft.comhttps://support.microsoft.com) をご参照いただくか、もしくは私共サポートまでお問い合わせください。