Twitter / 佐藤伸夫 ( とーまん ): SQL Azure :初期に作成される管理者ログイン …
今回のネタは、上の呟き「SQL Azure:初期に作成される管理者ログインでは、CREATE USER FOR LOGINのログインにできない?」に対する調査結果です。
結論
できるけど、できない。
正確に表現すると次のようになります。
初期に作成される管理者ログインにマッピングされたUSERがすでに存在する為に、ユーザが定義するUSERには使用できない。
解説
SQL Azureサーバを作成する際に、管理者ログイン(Administrator Login)を指定します。SQL Azureの管理画面上では、下の図の矢印で示されたLogin名です。
次に、データベースに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にマッピングさせることはできないのです。