SQL Server 2005 ExpressをJET DBのように使う

以前にも書いたLink ように、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)Link でツリーのDetabasesを右クリック、Attachで登録する
  • ADO/ADO.NETのConnection StringにAttachDbFilename=(mdfファイル名)を指定して接続
などの方法があります。

が、この処理はCREATE DATABASE/CREATE ANY DATABASE/ALTER ANY DATABASE の権限を持っているユーザーしかできませんLink 。最も分かりやすいこの権限を持ったユーザーは管理者(Administrator)です。つまり、制限ユーザーにとってはあまりお手軽ではない。またAttachDbFilenameの方法を使った場合、Detactchしないと次の接続時にすでにAttachされているファイルをまたAttachDbFilenameしようとしたとして、エラーになるそうです。

これの対策として、User InstanceLink を使う方法があります。これはそのユーザー専用の仮想的なデータベースインスタンスを作ることで、そのインスタンス上だけではユーザーは特権的振る舞いができるようにするもののようです。しかもデータベースをシャットダウン後は自動的に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 OfficeLink 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に変更する必要があります。

[参考]


— posted by mu at 09:00 pm   commentComment [2]  pingTrackBack [0]

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.0096 sec.
prev
2008.7
next
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31