以前にも書いた ように、MS SQL Server 2005は、データベース1個を1つのmdfファイル(正確にはトランザクションログとの二つ)に収め、好きな所に配置して運用ができます。同じMSのJET DB(AccessのDBエンジン)のmdbファイルみたいな運用が考えられるわけで、これを便利と考えられる人には結構便利ですが、セキュリティーや安全性上ずさんだといえばそう。
ただmdbほどお手軽ではなく、開く前にmdfファイルをSQL Server 2005に登録しないといけません。この登録作業がAttach、登録解除がDetatchです。Attachは- SQL Server Management Studio (Express) でツリーのDetabasesを右クリック、Attachで登録する
- ADO/ADO.NETのConnection StringにAttachDbFilename=(mdfファイル名)を指定して接続
が、この処理はCREATE DATABASE/CREATE ANY DATABASE/ALTER ANY DATABASE の権限を持っているユーザーしかできません 。最も分かりやすいこの権限を持ったユーザーは管理者(Administrator)です。つまり、制限ユーザーにとってはあまりお手軽ではない。またAttachDbFilenameの方法を使った場合、Detactchしないと次の接続時にすでにAttachされているファイルをまたAttachDbFilenameしようとしたとして、エラーになるそうです。
これの対策として、User Instance を使う方法があります。これはそのユーザー専用の仮想的なデータベースインスタンスを作ることで、そのインスタンス上だけではユーザーは特権的振る舞いができるようにするもののようです。しかもデータベースをシャットダウン後は自動的にDetatchされるので、次回接続時に二重Atatchのエラーも出ません。
使い方は簡単。Connection Stringにuser instance=trueを指定するだけ。Provider=SQLOLEDB.1; Data Source=.¥SQLEXPRESS; Integrated Security=true; attachDbFilename=C:¥TEST.MDF; User Instance=trueただし使用に制限があります。
- SQL Server 2005 Expressにしか使えない(上位有償エディションはだめ)
- ADO.NET上でしか使えない
で私、SQL Server 2005 Express+Open Office Baseで無料でAccessの代わりになる環境ができないかと思ったわけです。Open Office Baseには既存のデータベースに接続→ADOがありまして、Connection Stringを指定すればSQL Server 2005にmdfファイルを指定して接続できるはず・・・だめでした。Open Office BaseはADO(Visual Studio 6時代)であって、ADO.NETじゃないみたいです。
ちなみに管理者権限なら、以下のConnection string (URL)でOpen Office Baseから接続できます。Provider=SQLOLEDB.1; Data Source=.¥SQLEXPRESS; Integrated Security=SSPI; Persist Security Info=False; attachdbfilename=C:¥TEST.MDF;
ただし一回Attachされると次回はエラーとなりますので、attachdbfilenameをInitial Catalogに変更する必要があります。
[参考]
1. hayashi — 2009/04/27@14:17:37
この問題が最終的に解決できたかどうか知らせていただけるとうれしいです。
わたしはHSQLDBをOpenOfficeが誕生する以前から利用してきました。
通常のC/Sタイプの接続に加えて、スタンドアロン接続ができるのでユーザー環境へのインストールはデータベースファイルをコピーするだけでOK!
ユーザーにデータベースを意識させずにすむのでとても重宝しています。
[短所]
・Javaが必要!
・ODBC接続できないこと!
データベース操作はすべてプログラミングする必要がありましたが、OpenOfficeの登場でこの問題もクリアされつつあるのかな?