MariaDB 10.0には CONNECTストレージエンジン という MS Accessでいうところのリンクテーブルなストレージエンジンが搭載されていて、リンクの方法にCSVとかXMLとかODBCとか色々あるようです。MySQLに昔から入っているFEDERATEDストレージエンジンはMySQLプロトコルしかしゃべれないのでリンク先は必ずMySQLサーバーでないといけないという制約がありますが、ODBCなら色々できるわけですよね。
というわけでさっくり試してみました。
unixODBC-develと OracleのInstant Client (とりあえず、basic, odbc, develの3つをrpmで突っ込みました)は予めインストールしてあります。
$ wget "https://downloads.mariadb.org/f/mariadb-10.0.15/source/mariadb-10.0.15.tar.gz/from/http%3A/ftp.yz.yamagata-u.ac.jp/pub/dbms/mariadb?serve" -O mariadb-10.0.15.tar.gz $ tar xzf mariadb-10.0.15.tar.gz $ cmake -DWITH_CONNECT_STORAGE_ENGINE=ON . $ make $ make install
ODBCドライバーの設定をしておきます。
$ sudo vim /etc/odbcinst.ini .. [Oracle 12c ODBC driver] Description = Oracle ODBC driver for Oracle 12c Driver = /usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1 $ vim ~/.odbc.ini [JPOUG] Driver = Oracle 12c ODBC driver ServerName = xxx.xxx.xxx.xxx:1521/HOGE DSN = JPOUG
ではCONNECTテーブルの作成。
mysql> CREATE TABLE connect_test Engine= Connect TABLE_TYPE=ODBC tabname='TABLE_1' CONNECTION='DSN=JPOUG;UID=xxxx;PWD=xxxx'; ERROR 1105 (HY000): [unixODBC][Driver Manager]Can't open lib '/usr/lib/oracle/12.1/client64/lib/libsqora.so.12.1' : file not found
( ゚д゚) ファッ
ライブラリーパスが通ってなさそうなパスに入れたんですね○racleさん。。
$ export LD_LIBRARY_PATH=/usr/lib/oracle/12.1/client64/lib $ bin/mysqladmin shutdown $ bin/mysqld_safe &
取りあえずLD_LIBRARY_PATHに突っ込んでmysqldを再起動。
mysql> CREATE TABLE connect_test Engine= Connect TABLE_TYPE=ODBC tabname='TABLE_1' CONNECTION='DSN=JPOUG;UID=xxxx;PWD=xxxx'; Query OK, 0 rows affected (2.21 sec)
通ったー。
mysql> SELECT * FROM connect_test LIMIT 3; +---------+-----------+--------+-----------+--------------+------------+---------------------+---------------+--------+ | USER_ID | ACTION_ID | SERIAL | REMOTE_IP | HTTP_REFERER | USER_AGENT | START_TIME | COMPLETE_TIME | STATUS | +---------+-----------+--------+-----------+--------------+------------+---------------------+---------------+--------+ | 277385 | 159 | 1 | NULL | NULL | NULL | 2014-10-29 04:43:40 | NULL | 1 | +---------+-----------+--------+-----------+--------------+------------+---------------------+---------------+--------+ 1 row in set (0.11 sec) xxxx@test-db03>SELECT * FROM TABLE_1; USER_ID ACTION_ID SERIAL REMOTE_IP ---------- ---------- ---------- --------------- HTTP_REFERER -------------------------------------------------------------------------------- USER_AGENT -------------------------------------------------------------------------------- START_TI COMPLETE STATUS -------- -------- ---------- 277385 159 1 14-10-29 1
取り合えずテスト用のDBを間借りしただけなので何のデータも入ってないけど、同じデータが引けてはいるぽい。
こんなことして何が嬉しいかというと、MariaDBをオペレーター用(Not アプリケーション用)のプロキシとして使うことで
* Oracle側で設定するよりも柔軟にアクセス制限が出来る(かも知れない)
* MySQL(MariaDB)はカラム単位までアクセス制限ができる
* 接続元IPアドレスが違えば別ユーザーとして扱える
* MariaDBならPAM Auditプラグインが入っているので、既存のLDAPと連携できるかも
* Oracle側でやる気にならなさそうな全件クエリーログとかできる
* アプリケーション用のクエリーは別の方法を模索するとして、内部アクセスの証左にするぶんならgeneral_logとPAM Auditを使えば結構イケるんじゃね?
なあたりのユースケースが無いかなぁと思っている所存。
0 件のコメント :
コメントを投稿