SQL Azure

Twitter / 佐藤伸夫 ( とーまん ): SQL Azure :初期に作成される管理者ログイン …

20110224234420

今回のネタは、上の呟き「SQL Azure:初期に作成される管理者ログインでは、CREATE USER FOR LOGINのログインにできない?」に対する調査結果です。

結論

できるけど、できない。

正確に表現すると次のようになります。
初期に作成される管理者ログインにマッピングされたUSERがすでに存在する為に、ユーザが定義するUSERには使用できない。

解説

SQL Azureサーバを作成する際に、管理者ログイン(Administrator Login)を指定します。SQL Azureの管理画面上では、下の図の矢印で示されたLogin名です。

a

次に、データベースにUSERを作成する際に、Loginとマッピングします。
具体的には、次のようなコマンドになります。

CREATE USER readonlyuser FOR LOGIN readonlylogin;

本質問は、管理者ログインをUSERにマッピングさせたいけど、エラーがでてマッピングさせることができないことから出た質問です。

なぜ、エラーになるのか?

実は、新規にユーザデータベースを作成すると初期USERとして、dbo、guest、INFORMATION_SCHIMA、sysの4つのUSERが既定で作成されています。

その4つのユーザの内、dboの定義を確認すると次のような定義になっています。

CREATE USER [dbo] FOR LOGIN [管理者ログイン] WITH DEFAULT_SCHEMA=[dbo]

定義を見るとわかるとおり、dboユーザに管理者ログインがマッピングされています。

dboのUSERは削除できないので、ユーザ定義のデータベースに管理者ログインにマッピングされたUSERは存在するけど、任意のUSERにマッピングさせることはできないのです。