web-dev-qa-db-ja.com

アプリケーションではAzure SQLデータベース「ユーザーのログインに失敗しました」がSSMSで正常に機能する

Azure SQL Database V12の contained database users 機能を試してみたかったのですが、認証に問題があり、奇妙に思えます。

Classifierというデータベースを作成しました。ワークステーションのSSMSからAzure dbサーバーに接続できるように、ファイアウォールルールにIPを追加しました。管理のためにSSMS経由で接続できるようになったら、次のようにデータベースにパスワードを持つユーザーを追加してみました。

CREATE USER classifier WITH PASSWORD='thepassword'

このユーザーをデータライターおよびリーダーの役割にも追加しました。

exec sp_addrolemember 'db_datawriter', 'classifier'
exec sp_addrolemember 'db_datareader', 'classifier'

この後、SSMSからのこれらの資格情報を使用してデータベースに接続できます。

enter image description here

しかし、これはうまくいかないところです。私はいくつかの異なる接続文字列の呪文を試しましたが、作業しているWebアプリに接続できないようです。 Azure環境では機能しなかったため、Azureデータベースへの接続文字列を使用してlocalhostで実行していますが、接続しません。現在使用している接続文字列は次のとおりです。

<add name="Classifier" connectionString="Data Source=xxxxxxx.database.secure.windows.net;Initial Catalog=Classifier;User ID=classifier;Password=xxxxxxxxxxxxx;Encrypt=True;TrustServerCertificate=False;Connection Timeout=30;" providerName="System.Data.SqlClient"/>

ユーザーのパスワードを(SSMS経由で)リセットし、接続文字列を更新してみました。また、この接続文字列からSSMSの接続ダイアログにパスワードをコピーしてパスワードを再確認し、そこに何らかのタイプミスがないことを確認しました。

Azure dbサーバーで監査を有効にして、失敗の理由に関する詳細を取得したいと考えていますが、取得できるのはこれだけです。

Err 18456, Level 14, State 1, Sever SQL Azure, Line 1Login failed for user 'classifier'

そして、これは私が行き詰まっているところです。ドキュメントやブログで見つけたほとんどのことは、SQL Serverのログを見て、実際のエラー状態が何であるかを確認することです。 Azureを扱っているので、それを行う方法はありません(私の知る限り)。

SSMS(およびLinqPadとVisual Studio Server Explorer)が成功した場合、アプリケーションが失敗する原因は何ですか?

14
Ben Collins

含まれているデータベース/含まれているユーザーでは、指定する必要があることがわかりました:

GRANT CONNECT TO [YOUR_USER]

それ以外の場合、CONNECTはデフォルトで取り消されているようです。上記の変更を行ったら、データベースにアクセスできます。

16

新しい包含ユーザーを介してAzureデータベースに接続するようにAPIを切り替えるとき、接続文字列を次のように変更する必要がありました。

Persist Security Info=True;

なぜこの変更が必要なのかはわかりませんが、将来誰かが助けてくれるようにここに投稿したいと思いました。

この質問 からこれを試すようになりました。

5
sfm

私の問題は異なっていましたが、関連していました。SQLServer Management Studio(SSMS)で contained user を使用してAzure SQLデータベースに接続しようとしていました。 SSMSで「ユーザーのログインに失敗しました」というメッセージが表示されました。

Solution:クエリウィンドウのSSMS接続オプションで、[データベースに接続]を、接続しようとしたデータベースの名前に設定しました接続します。

説明:結果を見ると、その理由は明らかでした。含まれているユーザーは、作成されたデータベースへの接続のみを許可されています。

2
Vince Horst

これは、パスワードに$が含まれているときに、接続文字列を含むPowershellコマンドを実行すると発生する可能性があります。これを回避するには、接続文字列を一重引用符で囲むか、最初に接続文字列にパスワードを格納しないようにします。;-)

例えば。 Scaffold-DbContextコマンドでこれに遭遇しました

https://github.com/aspnet/EntityFrameworkCore/issues/6624

0
Simon_Weaver