SQL Azure DBに接続しようとすると18456エラーがでる場合の対処

SQL Azureデータベースにユーザを追加する」で紹介したように、SQL Azureデータベースでも、ユーザーを追加することができます。

新規に追加したユーザーでSQL Azureデータベースに接続しようとすると、次のような「18453」エラーが出て接続できない人がいるかもしれません。

*****.database.windows.net に接続できません。

Login failed for user ‘******’.

This session has been assigned a tracing ID of ‘*******-0230-4743-a8c4-5fb532996fec’.  Provide this tracing ID to customer support when you need assistance. (Microsoft SQL Server、エラー: 18456)

000001

考えられるエラーの発生原因

このエラーの発生原因としては、次のような可能性が考えられます。以下全てのケースすべてで、18456が返ってきます。また、状態コードも全て1になっています。ですので、原因を確認する場合には、以下のケースに当てはまらないかを上から順に確認する必要があります。

  • 入力しているLoginが存在しない(Loginを入力し間違っている。)
  • パスワードが間違っている
  • 接続しようとしているデータベース内に、入力したLoginに紐づいたユーザーが存在しない
  • ユーザーに必要な権限が不足している

エラーの解消方法(ログインとユーザー)

SQL Azureデータベースにユーザを追加する」で紹介しているように、ユーザーを追加するには、
1. ログインの作成
2. ログインに紐づけてDBユーザーの作成
3. DBユーザーに権限を付与する
の手順となります。

例えば、次のようなログインとユーザーを作成したとします。

ログイン:LoginUser

ユーザー:DBUsert

SQL Azure データベースに接続する際に使用するのは、DBUserでは無く、LoginUserを使用します。次の画像のように、「LoginUser」を入力します。
000002

SQL Azureでは、SQL Serverに比べて、データベースをより意識するようになっていますので、うっかりと「DBUser」を入力したくなるかもしれません。
特に、SQL Azureでは次の画像のように接続するデータベースを指定する局面が増えるので、ついついDBユーザーで接続すると勘違いしやすくなります。
20110109110514

ログインとユーザーの簡単な概念

SQL Azureの例えばtestデータベースに接続をする際には、以下のような手順となっている。

20110109125729

① SQL Serverで言うところのインスタンス ログインが行われる。
(接続するときに入力したLoginとパスワードで認証する)

② インスタンスで、ログインの認証が成功したら、次はmasterに問い合わせを発行。これから接続しに行くデータベースtestの所在地を確認する。(どこに自分のtestデータベースがあるかを知る)

③ testデータベースに対して接続を試みる。

No. Login User 権限
testLogin1 testUser1 db_owner
testLogin2 testUser2 db_owner

データベースに、「testLogin1」のログインで接続があると、上の表のようなマッピングで、Dデータベースにログインと紐づいたUserがあり(testUser1が存在している)、権限があることを確認できると認証に成功し、データベースに接続することができる。
例えば、testLogin3のログインで、データベースに接続しても、紐づいたUserが存在しないので、データベースに接続することができない。

Loginには、下の図のように複数のデータベースのユーザIDを紐づけることができる。

20110109131342