SQL Serverログファイルビューアが表示するメッセージ:
Login failed for user [User]
Error: 18456, Severity: 14, State 38
実際の意味:
Failed to open the explicitly specified database
私の質問:
重大度と状態の組み合わせごとに、役立つ説明テキストとともに、18456エラー(ログイン失敗)のすべてのバリエーションのどこかにリストがありますか?
Googleを利用しましたが、特定の組み合わせ以外は見つかりません。
州コードとその意味。
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の blog を参照してください。
接続文字列のデータベース名のタイプミスが原因で、状態コード38で同じエラーが発生しました。
このエラーを解決したところ、次のことがわかりました。ユーザー名とパスワードではなく、Windowsログインを使用していくつかのSQL接続を作成しました。それが何がどのように起こったかは本当にわかりませんが、実際に起こりました。それらを削除してから、エンティティモデルを再構築しました。私は別の接続文字列を使用しましたが、これは良いことであり、すべてが喜びです。キーはPersist Security Info = Trueであり、ネットワークまたは外部Webサイトでは機能しません
18456州と38州もありました。接続文字列には、 'integrated security = true'があり、これは私が望んでいたものではないことがわかりました。接続文字列には、使用されるユーザーIDとパスワードが含まれていました。設定をfalseに変更したところ、すべて順調でした。
@ Pete Oakly は、州コードのリストがある右側の道にあります。具体的には、これは私たち全員が関心のあるコードです。
38「ログインは有効ですが、データベースは使用できません(またはログインが許可されていません)」
私の問題はC#エラーログで始まりました:
Exception | PublishedException | 000161 | 10/29/2018 | 11:06:40.210 | 16284 | InnerException |ログインで要求されたデータベース「InterestingDataBaseName」を開けません。ログインに失敗しました。ユーザー「CORP\anyuser」のログインに失敗しました。
「ログインに失敗しました」部分に目が集中しました。私のユーザーはこのDBサーバーのsaでしたが、どうすればログインが失敗する可能性がありますか?
答えを持った3人のプログラマーがこの投稿に遭遇しました: https://justaprogrammer.net/2012/12/09/a-misleading-sql-error-message-error-18456-severity-14 -state-38 /
それ自体が失敗したログインではなく、私がアクセスしようとしているデータベースです。 存在しません!
ビンゴ!他の理由でデータベース名を変更したため、構成ファイルを更新しませんでした。 DB名を修正し、物事が再び魅力のように機能しています。
複数のインスタンスを持つSQL Serverにログオンしようとすると、このエラーが発生しました。接続文字列はインスタンスを指定していません。インスタンスに名前を付けたら(SERVERNAME\INSTANCENAME)、なんとかサーバーに接続できました。
SQL Server構成マネージャーの場合| SQL Serverネットワーク構成| TCP/IP | IP | TCP Port was [〜#〜] not [〜#〜]設定されました。
ODBC接続を確立できず、リモートSQL Management Studio接続を使用してユーザーでログインすることさえできませんでした。ただし、TomcatアプリケーションのURLにアクセスするたびに、jdbc接続が開始されました。 SQL Serverで発見エラーをログに記録:ユーザー 'xxxx'のログインに失敗しました:理由明示的に定義されたデータベースを開けませんでした、エラー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ネットワーク構成でalsoと言うことを意味します。 <インスタンス名>のプロトコル|名前付きパイプは有効にする必要があります&パイプ名\\.\pipe\MSSQL$<instance name>\sql\query
を正しく設定する必要があります。
まあ、これはデータベース権限関連のエラーです。 DBAの役割を理解することが非常に重要であるため、この質問に私のソリューションを追加します。だから、私の提案があります:
次に、そのユーザー名でログインすると、ユーザーにアクセス権を付与できます。そうするには:
セキュリティに移動し、ログインを右クリックして新規ログインを選択します
ログインウィンドウで、ユーザー名を入力するか、検索できます。リストからユーザーを選択し、[〜#〜] ok [〜#〜]および[〜#〜] ok [〜#〜]をもう一度クリックします。
同じログインウィンドウでServer Rolesをクリックし、選択したユーザーにsysadmin、serveradmin、decreatorなどのアクセス権を付与します。クリック[〜#〜] ok [〜#〜]。
個々のデータベースへのアクセスを許可する場合は、ユーザーマッピングに移動し、必要に応じてアクセスを提供します。
データベースのステータスを確認する:権限:付与ログイン:有効
クリック[〜#〜] ok [〜#〜]