MicrosoftのフリーデータベースMSDEを調べる

MSDEとは?

http://e-words.jp/w/MSDE.html

Microsoft社が開発したデータベースエンジン。同社Webサイトなどで単体で無償配布されているほか、Microsoft AccessやVisual Studioなどに同梱されている。


同社の大規模向けデータベース管理ソフト「Microsoft SQL Server」のデータベースエンジン部分を抜き出した製品で、Microsoft Access標準のエンジンであったJetデータベースエンジンに比べ高い性能を発揮する。Jetがデスクトップでの単体利用に適していたのに対し、クライアントサーバ型でのネットワーク利用にも対応する。ただし、2GB以上のデータベースを扱えない、同時利用5人以下に最適化されている、複数サーバにまたがるトランザクションに対応できないといった制限があり、SQL Serverを利用したソフトウェアの開発やテストに利用したり、少人数で利用するのに適している。

インストール

ここのJPN_MSDE2000A.exeを落としてくる。


そんで解凍先ディレクトリにあるsetupをコマンドラインから実行。


以下の場合、SQL認証モードでsaのパスワードがsaとなってインストールされるようです。

setup.exe SECURITYMODE=SQL SAPWD="sa" 


MSDEコマンドラインから接続

osql -U sa -P sa -S サーバ名 

先ほどsaのパスワードをsaとしてインストールしているので、-Pは「sa」でつなげばつながる。

ログインIDとデータベースユーザの関係

  • ログインIDとは
    • デフォルトではsaとWindowsのワークグループ用の2つが存在
    • SQLServerログイン時に使用するユーザのこと(データベース接続時ではない!)
    • ストアド「sp_addlogin ログインID , パスワード , デフォルトデータベース名」で新規作成できる
    • 固定サーバロールに参加できる
  • データベースユーザ(セキュリティーアカウント?)とは
    • データベースアクセス時に使用するユーザ(ログインIDのDBアクセス用の別名と考えるとしっくりくるか?)
    • 「sp_grantdbaccess "ログインID" , "データベースユーザ名」でデータベースユーザを作成

ログインIDとデータベースユーザの関係で理解できなかった部分

  • 一つのデータベース内で、ことなるログインIDに同名のデータベースユーザをマッピングすることはできない!!!
    • 例えば、saはデフォルトDBの1つであるmasterにdboユーザとして接続する。
    • これにならって、他のログインID(suda)を作成し、そのログインIDにmasterへの全権限を与えるためdboユーザをマップしようと、masterデータベースに対して、「sp_grantdbaccess suda,dbo」 を実行してもエラーになる。

ログインIDとデータベースユーザの関係でさらに理解できなかった部分

  • ログインIDとデータベースユーザは一対一の関係になるのだが、ログインIDをsysadminに参加させると、例外的にそのログインは全てのデータベースにdboユーザとして、接続できるようになる。そしてこの場合は、該当DBでdboが別ログインにマッピングされていたとしても、一対他関係を実現し、sysadminに参加したログインはdboユーザとして全てのデータベースにアクセスできるみたいだ。

スキーマという概念はない

テーブルをSQLで修飾する場合の完全指定方法

サーバの名前.データベースの名前.データベースユーザ名.テーブル名
  • 例えば
    • サーバ名:PC7777
    • database名:master
    • データベースユーザ名:kijitoraneko
    • テーブル名:Emp


以上のデータベースの全件をselectする場合のSQL

select * from PC7777.master.kijitoraneko.Emp;


同一データベース内であってもテーブルを所有するデータベースユーザが違えば、同一名テーブルが存在することができる。

JDBCでつなごうとしたら

Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
conn = DriverManager.getConnection("jdbc:microsoft:sqlserver://localhost;DatabaseName=master", "sa", "sa");

つながらない。現在動いているサーバにインストールされているMSDEで使っているjarを持ってきて、それをクラスパスに設定してつないだのだけれどもつながらないのだ。自分のMSDEとバージョン違うのかなとか考えていたのだけれど、


どうやらこれの「JDBC-Type4ドライバの使用法」に書かれた

svrnetcn.exe 

をプロンプトから実行すると、GUI画面が表示される。これで、TCP-IPポートを有効にしてあげてから再起動することによって、JDBCアクセスできるようになりました。よかった。