ユーザーのログインに失敗しました-エラー18456-重大度14、状態38


23

SQL Serverログファイルビューアーに表示されるメッセージ:

Login failed for user [User]
Error: 18456, Severity: 14, State 38

実際の意味:

Failed to open the explicitly specified database

私の質問:

重大度と状態の組み合わせごとに、18456エラー(ログイン失敗)のすべてのバリエーションのリストが役立つ説明テキストとともにありますか?

Googleを使用しましたが、特定の組み合わせ以外は見つかりません。

回答:


25

状態コードとその意味。

1      'Account is locked out'
2      'User id is not valid'
3-4    'Undocumented'
5      'User id is not valid'
6      'Undocumented'
7      'The login being used is disabled'
8      'Incorrect password'
9      'Invalid password'
10     'Related to a SQL login being bound to Windows domain password policy enforcement.
        See KB925744.'
11-12  'Login valid but server access failed'
16     'Login valid, but not permissioned to use the target database'
18     'Password expired'
27     'Initial database could not be found'
38     'Login valid but database unavailable (or login not permissioned)'

より詳細な情報は、Aaron Bertrandのブログにあります。


@PeteOaklyあなたは状態38の理由の一つとして、不足しているデータベースについての記事の下に参照してくださいここでは状態38のための右の道にしている
ジョン・ダイアー

4

接続文字列のデータベース名のタイプミスにより、状態コード38で同じエラーが発生しました。


2

このエラーを解決したときに見つけたものは次のとおりです。ユーザー名とパスワードではなく、Windowsログインを使用していくつかのSQL接続を作成しました。何がどのように起こったのかはよくわからないが、実際に起こった。それらを削除してから、エンティティモデルを再構築しました。私は別の接続文字列を使用しましたが、それは良いことがわかっていて、すべてが喜びです。キーは永続的なセキュリティ情報= Trueであり、ネットワークまたは外部のWebサイトでは機能しません


2

状態38の18456もありました。接続文字列に 'integrated security = true'が含まれていることがわかりましたが、これは私が望んでいたものではありませんでした。接続文字列には、使用されるユーザーIDとパスワードが含まれていました。設定をfalseに変更したとき、すべては順調でした。


2

複数のインスタンスを持つSQL Serverにログオンしようとすると、このエラーが発生しました。接続文字列はインスタンスに名前を付けませんでした。インスタンス(SERVERNAME \ INSTANCENAME)に名前を付けたら、サーバーに接続できました。


2

@Pete Oaklyは、状態コードのリストで正しい道を進んでいます。具体的には、これは私たち全員が興味を持っているコードです。

38 'ログインは有効だが、データベースが利用できない(またはログインが許可されていない)'

私の問題はC#エラーログで始まりました。

Exception | PublishedException | 000161 | 10/29/2018 | 11:06:40.210 | 16284 | InnerException |ログインで要求されたデータベース「InterestingDataBaseName」を開けません。ログインに失敗しました。ユーザー 'CORP \ anyuser'のログインに失敗しました。

私の目は「ログイン失敗」の部分に集中していました。私のユーザーはこのDBサーバーのsaでしたが、ログインが失敗する可能性はありますか?

私は答えを持っていたプログラマーのトリオによってこの投稿につまずきました:https : //justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14-state-38 /

それ自体がログイン失敗ではなく、私がアクセスしようとしているのはデータベースです。 それは存在しません!

ビンゴ!他の理由でデータベース名を変更しましたが、構成ファイルを更新しませんでした。DB名を修正し、物事が再びチャームのように機能するようになりました。


1

私たちの場合、SQL Server構成マネージャーで| SQL Serverネットワーク構成| TCP / IP | IP | TCPポートでしたありません設定さ。

ODBC接続を確立できず、リモートのSQL Management Studio接続を使用して、ユーザーでログインすることさえできませんでした。ただし、TomcatアプリケーションのURLにアクセスするたびにjdbc接続を起動し、SQL Serverログにエラーを発見しました:ユーザー 'xxxx'のログインに失敗しました:reason明示的に定義されたデータベースを開くことができませんでした、エラー18456、重大度14 、状態38

ここで、jdbc接続文字列の要約

"jdbc:sqlserver://10.10.10.10:1433;databaseName=zzzzzzz" username="yyyyyy" password="xxxxxx" driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver" type="javax.sql.DataSource" maxActive="100" maxIdle="30" maxWait="10000" defaultAutoCommit="true"/>
<Resource name="jdbc/application" 

これは、SQL Serverネットワーク構成で言うことができます| <インスタンス名>のプロトコル| 名前付きパイプを有効にし、パイプ名 \\.\pipe\MSSQL$<instance name>\sql\query を正しく設定する必要があります。


1

さて、これはデータベースのアクセス許可関連のエラーです。DBAの役割を理解することが非常に重要であるため、この質問にソリューションを追加しています。だから、私の提案があります:

  • サーバーマネージャーに移動
  • [ツール]、[コンピューターの管理]の順に選択します
  • ローカルユーザーとグループを確認する
  • 「コンピューター/ドメインを管理するためのビルトインアカウント」という説明のある管理者名を確認します

次に、そのユーザー名でログインすると、ユーザーにアクセスを許可できます。そうするには:

[ セキュリティ ]に移動し、[ ログイン ]を右クリックして[ 新しいログイン ] を選択します

ログインウィンドウで、ユーザー名を入力または検索できます。リストからユーザーを選択してクリックし、[OK][OK]をもう一度。

同じログインウィンドウで、[ サーバーロール ]をクリックし、sysadmin、serveradmin、decreatorなどの選択したユーザーにアクセスを許可します。OKをクリックします。

個々のデータベースへのアクセスを許可する場合は、ユーザーマッピングに移動し、要件に従ってアクセスを提供します。

データベースの状態をチェック: 許可:グラント ログイン:有効

OKをクリック


2
これは、SQL Serverログインデータベースユーザーの関係が失われたり、SQL Serverログインデフォルトデータベースが利用できなくなったりする可能性に焦点を当てることができれば、かなり良い答えになるでしょう。現在、あなたの答えは、アカウントの作成方法に関する一般的な推奨事項にすぎません。あなたの答えの最初の部分がOPの問題を解決するのにどのように役立つのか分かりません。その部分を説明してもらえますか?
ジョン別名hot2use
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.