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)
考えられるエラーの発生原因
このエラーの発生原因としては、次のような可能性が考えられます。以下全てのケースすべてで、18456が返ってきます。また、状態コードも全て1になっています。ですので、原因を確認する場合には、以下のケースに当てはまらないかを上から順に確認する必要があります。
- 入力しているLoginが存在しない(Loginを入力し間違っている。)
- パスワードが間違っている
- 接続しようとしているデータベース内に、入力したLoginに紐づいたユーザーが存在しない
- ユーザーに必要な権限が不足している
エラーの解消方法(ログインとユーザー)
「SQL Azureデータベースにユーザを追加する」で紹介しているように、ユーザーを追加するには、
1. ログインの作成
2. ログインに紐づけてDBユーザーの作成
3. DBユーザーに権限を付与する
の手順となります。
例えば、次のようなログインとユーザーを作成したとします。
ログイン:LoginUser
ユーザー:DBUsert
SQL Azure データベースに接続する際に使用するのは、DBUserでは無く、LoginUserを使用します。次の画像のように、「LoginUser」を入力します。
SQL Azureでは、SQL Serverに比べて、データベースをより意識するようになっていますので、うっかりと「DBUser」を入力したくなるかもしれません。
特に、SQL Azureでは次の画像のように接続するデータベースを指定する局面が増えるので、ついついDBユーザーで接続すると勘違いしやすくなります。
ログインとユーザーの簡単な概念
SQL Azureの例えばtestデータベースに接続をする際には、以下のような手順となっている。
① SQL Serverで言うところのインスタンス ログインが行われる。
(接続するときに入力したLoginとパスワードで認証する)
② インスタンスで、ログインの認証が成功したら、次はmasterに問い合わせを発行。これから接続しに行くデータベースtestの所在地を確認する。(どこに自分のtestデータベースがあるかを知る)
③ testデータベースに対して接続を試みる。
No. | Login | User | 権限 |
---|---|---|---|
1 | testLogin1 | testUser1 | db_owner |
2 | testLogin2 | testUser2 | db_owner |
データベースに、「testLogin1」のログインで接続があると、上の表のようなマッピングで、Dデータベースにログインと紐づいたUserがあり(testUser1が存在している)、権限があることを確認できると認証に成功し、データベースに接続することができる。
例えば、testLogin3のログインで、データベースに接続しても、紐づいたUserが存在しないので、データベースに接続することができない。
Loginには、下の図のように複数のデータベースのユーザIDを紐づけることができる。