MariaDBからSQL Serverを直接参照するテーブルを作成


概要

Windows上のMariaDBからSQL Serverを直接参照するテーブルを作成します。Accessのリンクテーブル。
Connect Storageという機能を利用します。

経緯

社内データの保管に、以下の理由でSQL Serverを利用していました。

  • ODBCを設定せずにExcelから参照できる。
  • Windows認証を利用できるので、アプリで認証を考慮する必要がない。

後者に関しては、エラー時の対応等、逆にややこしくなりそうでメリットにならないと判断。ただ、前者を利用した、簡易BIとしてのExcelピボットテーブルファイルが利用されているため、うまく対応する必要がありました。

将来性を考えると、10GBに制限されるSQL Server Express Editionは避けたいところ。そこで、まずMariaDBサーバを立ててSQL Serverのデータを参照する形で運用を開始することにしました。

MariaDBには、異種データベースを参照するConnect Storage Engineという機能があることが分かり、これを利用して実装しました。

前提

  • OS: Windows Server 2008 R2
  • Maria DB: 10.2.9
  • SQL Server: SQL Server 2008 R2 Express Edition
    • データベース名: DBTEST
    • DBユーザー名: USERTEST, パスワード: PASSTEST
    • テーブル名: TABLETEST

手順

  1. 管理ツールの「データソース(ODBC)」にて、SQL ServerへのDSNを登録(DSN名を「SQLSVR」とする)
  2. MariaDBにmysqlクライアントで接続し、以下のコマンドでConnect Storage Engineを有効化する。

    INSTALL SONAME 'ha_connect'
    
  3. 以下のコマンドでConnect Storage Engine経由での参照を利用したテーブルエントリを作成する。

    CREATE TABLE TABLETEST ENGINE=CONNECT DEFAULT CHARSET=cp932 TABLE_TYPE=ODBC CONNECTION='DSN=SQLSVR;UID=USERTEST;PWD=PASSTEST';
    

問題点

上記手順だと、該当のデータベースの一覧(show tables)まではできるが、内容を取得(select * from ...)できない。
SELECTしか必要ない場合においても、全データベースに対する全操作の権限(grant all on .)を与えないと値を取得できない。
MariaDBをHubとして各テーブルを見に行くような運用も考えたが、本格的な運用に採用するのは厳しいかもしれない。