ユーザー「DOMAIN\MACHINENAME$」のログインに失敗しました
-
25-09-2019 - |
質問
これが次のものとほぼ重複していることはわかっています。 ASP.NET および SQL Server 2008 でのエラー「ユーザー 'NT AUTHORITY\IUSR' のログインに失敗しました」 そして ユーザー 'username' のログインに失敗しました - 外部プロジェクト/クラス ライブラリの LINQ で System.Data.SqlClient.SqlException が発生しました しかし、サーバー上の他のアプリケーションと比較すると、いくつかの点が一致しないのですが、その理由がわかりません。
使用されているボックス:
ウェブボックス
SQLボックス
SQLテストボックス
私のアプリケーション:
LINQ-to-SQL を使用するクラス ライブラリを参照する ASP.NET Web アプリケーションがあります。接続文字列がクラス ライブラリで適切に設定されている。とおり ユーザー 'username' のログインに失敗しました - 外部プロジェクト/クラス ライブラリの LINQ で System.Data.SqlClient.SqlException が発生しました この接続文字列も Web アプリケーションに追加しました。
接続文字列は SQL 資格情報をそのまま使用します (Web アプリとクラス ライブラリの両方で)。
<add name="Namespace.My.MySettings.ConnectionStringProduction"
connectionString="Data Source=(SQL Test Box);Initial Catalog=(db name);Persist Security Info=True;User ID=ID;Password=Password"
providerName="System.Data.SqlClient" />
この接続は、サーバー エクスプローラーに追加することで機能することが確認されました。これは、.dbml ファイルが使用している接続文字列です。
問題:
次のエラーが表示されます。
System.Data.SqlClient.SqlException: Login failed for user 'DOMAIN\MACHINENAME$'.
今これを参照しています ASP.NET および SQL Server 2008 でのエラー「ユーザー 'NT AUTHORITY\IUSR' のログインに失敗しました」 これは実際にはローカル ネットワーク サービスであり、他の非ドメイン名を使用すると機能しないと表示されます。
しかし、SQL Box と SQL Test Box SQL Management Studio の両方をチェックし、両方とも NT AUTHORITY/NETWORK SERVICE
[セキュリティ] -> [ログイン] の下にデータベース レベルで表示されますが、[セキュリティ] -> [ユーザー] の下にはリストされていませんが、データベース レベルの [セキュリティ] -> [ユーザー] で接続文字列にユーザーが表示されます。
Web サーバーの NTFS レベルでは、権限は NETWORK SERVICE によって完全に制御されます。
私が混乱している理由は、Web サーバー上に他の多くの Web アプリケーションがあり、SQL Box と SQL Test Box の両方のデータベースを参照しており、それらはすべて機能しているためです。しかし、クラス ライブラリを使用していること以外、それらと現在のアプリケーションとの違いは見つかりません。それは問題でしょうか?NTFS アクセス許可の確認、サーバー レベルとデータベース レベルでのセキュリティ ログインのセットアップ、接続文字列と接続方法 (SQL Server 資格情報)、IIS アプリケーション プールとその他のフォルダー オプションはすべて同じです。
これらのアプリケーションは、SQL ボックスのいずれかのアクセス許可に machinename$ を追加しなくても動作するのはなぜですか?しかし、それが、この問題を解決するために 1 つのリンクが私に指示していることです。
解決
NETWORK SERVICEおよびローカルシステムは、(ネットワーク・サービスおよび組み込み\ SYSTEM \ビルトイン)ローカルに常にcorrepsondingアカウントとして自分自身を認証しますが、両方をリモートマシンアカウントとして認証されます。
あなたはそれがNETWORK SERVICEとして、あるいはLocalSystemとして実行中のプロセスがリモートリソースにアクセスしたことを意味しLogin failed for user 'DOMAIN\MACHINENAME$'
などの故障が表示される場合は、、マシンアカウントとしての地位を認証したと承認を拒否されました。
典型的な例は、クレデンシャルとリモートSQL Serverに接続するネットワークサービスを使用するアプリケーションプールのセットで実行されているASPアプリケーションのようになります。アプリケーションプールとして認証されます。のマシンのアプリケーションプールを実行すると、アクセス権を付与する必要があり、このマシンアカウントがある。
アクセスは、マシンアカウントに拒否された場合は、は、アクセスは、マシンアカウントに付与する必要があります。サーバは、ログイン「DOMAIN \ MACHINE $」に拒否した場合、あなたはありませんNETWORK SERVICEに「DOMAIN \ MACHINE $」にログイン権限を付与する必要があります。 NETWORKサービスへのアクセスを許可すると、リモート1はDOMAIN \ MACHINE $、あなたが推測として認証されるので、リモート1、いない接続するためのネットワークサービスとして実行されているのローカルのプロセスを可能にする。
あなたはASPアプリケーションは、SQLのログインなどのリモートSQL Serverに接続することを期待して、DOMAIN \ MACHINEの$についての例外を取得する場合それはあなたが接続文字列で統合セキュリティを使用することを意味します。これは予想外である場合、それはあなたが使用する接続文字列をめちゃくちゃ意味ます。
他のヒント
あなたがIISでアプリケーションを設定しているときに、このエラーが発生し、IISは、適切な権限を持っていない資格情報を使用してログインにSQL Serverおよび試行に行きます。複製またはミラーリングが設定されている場合にも、このエラーが発生することがあります。 私はいつも動作し、非常にシンプルなソリューションを介して行くことになります。 SQL Serverの>>セキュリティ>>ログインとNT AUTHORITY \ NETWORKサービスを右クリックに移動し、プロパティを選択します。
ログインのプロパティの新しくオープンした画面で、「ユーザー・マッピング」タブに移動します。このエラーメッセージが表示されているため、特にデータベース - 次に、「ユーザーマッピング」タブで、目的のデータベースを選択します。下の画面では、ロールdb_ownerのを確認してください。 [OK]をクリックします。
私の場合、私は私のIISアプリケーションプールのためのIdentity="ApplicationPoolIdentity"
を持っています。
私はそれが動作するSQL ServerにIIS APPPOOL\ApplicationName
ユーザーを追加した後。
同僚が同じエラーを持っていたし、それは、IISで少し構成エラーによるものであった。
間違ったアプリケーションプールは、Webアプリケーションに割り当てられた。
確かに私たちは私たちのニーズを満たすために、特定のアイデンティティを持つカスタムアプリケーションプールを使用します。
彼のローカルIISマネージャで - >サイト - >既定のWebサイト - >当社のWebアプリケーション名 - > [基本設定... アプリケーションプールではなく、私たちのカスタムアプリケーションプールの「のDefaultAppPool」だった。
正しいアプリケーションプールを設定するには、問題を解決します。
私のために働いたのトリックは私の接続文字列からIntegrated Security
を削除し、libruaryかもしれないのUser ID=userName; Password=password
で正規App.config
あなたの接続文字列を追加するには、統合セキュリティを使用していませんでしたが、Web.config
に作成したものは!
私は私のweb.configファイルに<identity impersonate="true" />
を追加し、それがうまく働いています。
基本的にこれを解決するには、次のような設定が必要です
- ApplicationPoolIdentity で実行される Web アプリ
- 接続文字列で Windows 認証を使用し、ADO.Net 経由でデータベースに接続する Web アプリケーション
Windows 認証で使用される接続文字列には、次のいずれかが含まれます。 Trusted_Connection=Yes
属性または同等の属性 Integrated Security=SSPI
で Web.config
ファイル
データベース接続は Windows 認証モードです。そこで、単に変更することでそれを解決しました アプリケーションプール アイデンティティの起源 アプリケーションプールID 私のドメインのログイン資格情報へ ドメイン名\マイログイン ID
ステップ:
- クリック アプリケーションプール
アプリケーションの名前を選択します
に行く 詳細設定
- 拡大する プロセスモデル そしてクリックしてください 身元. 。右端に3つのドットをクリックします。
- クリック セット... ボタンとドメインログインの資格情報を提供します
私の場合は解決しました。
注記: 運用環境または IT 環境では、アプリ プール ID 用に同じドメインにサービス アカウントがある場合があります。その場合は、ログインの代わりにサービス アカウントを使用してください。
私にとっては問題が解決されました。
設定は、インターネットインフォメーションサービス(IIS 7+)>アプリケーションプール> Advanded設定>で行うことができるプロセスモデル>アイデンティティ
私たちは、同様のエラーメッセージを取得していました。これは、Analysis Servicesのインスタンスを実行するために使用されたユーザ名は、SQL Serverのセキュリティログインに追加されていなかったことが判明します。
SQL Server 2012のでは、SQL ServerとAnalysis Servicesのは、デフォルトでは、異なるユーザーとして実行するように設定されています。あなたはデフォルト値を使用して行っている場合は、必ずASのユーザーが自分のデータソースにアクセスできることを確認してください!
あなたが持っているかどうか確認します。
User Instance=true
接続文字列に。あなたの問題を解決しますそれを削除してみます。
私はまた、SQL Serverと、このエラーは、
ユーザーを認証していました私は修正のいくつかを試してみましたが、彼らは動作しませんでした。
私の場合はソリューションは、管理Studioの下で、SQL Server認証を許可するように、その「Server認証モード」を設定することでした:。プロパティ/セキュリティ
誰もが見落としているように見えるという点のみを使用すると、統合セキュリティ= trueを望むかもしれないということです。あなたはプールアカウントの下で実行されている部位を有していてもよいです。それはので、すべての罰金だし、元のユーザーの資格情報ではなく、プールのでSQLサーバーをヒットすることは可能です。これは、制約付き委任と呼ばれています。あなたがそれを有効にし、SPNのウィンドウを設定した場合、ユーザーの最後のサービスに行くのリクエストに(SQLは、ちょうどそのようなサービスである)と、プールの資格情報を翻訳します。あなたは、Webサーバー上のサービスのSQL要求のことONE AND ONLY SQLサーバーを登録する必要があります。私は正確にここで説明しようとするために、このすべてのセットアップを設定することは多すぎます。それは自分自身それを介して仕事に私にはかなり時間がかかりました。
私は問題を解決しようとすると、数時間を過ごしたと私は最終的にそれを得た - SQL Serverブラウザは、「停止」されました。この修正は、「自動」モードにそれを変更することです。
それが無効になっている場合は、、コントロールパネル - >管理に行きます [ツール] - > [サービス、およびSQL Serverエージェントを探します。右クリックして、 「プロパティ」を選択します。 「スタートアップの種類」ドロップダウンリストから、からの変更 "自動" を "無効" ます。
私は私のために働いたのConnectionStringからPersist Security Info=True
を削除、以前と同じ問題を持っていた。
私はこの問題に出くわしました。 SQLレポートサービスは、彼らはまた、新しいサーバー名のIPにリダイレクトそのためのエイリアスを作成していた古いサーバー名に接続するように構成されました。
古いIISアプリケーションのすべては別名を経由して、新しいサーバー名にリダイレクトする、働いていました。彼らはSSRSを実行していた場合は勘では、私がチェックしました。 SSRSサイトに接続しようとすると、エラーが生じた。
」サービスは、問題を解決するために、システム管理者にavailable.Contactされていないシステム管理者:レポートサーバーは、そのデータベースに接続できないことを確認データベースが実行してアクセスされていることを確認します。また、チェックすることができます。詳細については、サーバーのトレースログを報告します。「の
これは、サーバー上で実行されているが、それは古いサーバー名の別名を使用していたため、接続に失敗しました。それを修正し、古い/エイリアスの代わりに新しいサーバー名を使用するようにSSRSを再構成します。
- アプリケーション プール ID をローカル システムに変更する
- SQL管理 > セキュリティ > ログイン
- NT AUTHORITY\SYSTEM を見つけてダブルクリックします
- ユーザー マッピング > データベースを確認し、以下の役割を割り当てます。
- また、正しいパスワードを使用してセキュリティ ログイン用のユーザー データベースを作成することも忘れないでください。
私は、このエラーは次の
を使用してソリューションをテストしようとしましたstring cn = "Data Source=[servername];Integrated Security=true;Initial Catalog=[dbname];";
私は解決方法だった:私はオープンに使用したアカウントは、私の管理者アカウントではなかったため、Visual Studioのを開き、別のアカウントの下でそれを実行する必要がありました。
だからあなたの問題は私に似ている場合:タスクバーにピンVS、その後、別のユーザーとしてVSを開くことができるように、メニューを開くためにShiftキーや右クリックを使用します。 の
ここにいくつかの良い答えがあることに感謝しますが、これを解決する時間を失ったばかりなので、これが誰かを助けることができれば幸いです。
私の場合、すべてが正常に動作していましたが、質問に記載されているエラーにより明らかな理由もなく停止しました。
IIS はネットワーク サービスとして実行されており、ネットワーク サービスは以前に SQL Server 上にセットアップされていました (この投稿に対する他の回答を参照してください)。サーバーの役割とユーザーのマッピングは正しいように見えました。
問題は次のとおりです。明らかな理由はまったくありません。ネットワーク サービスは、データベースのログイン権限を「拒否」に切り替えました。
修正するには:
- [SSMS] > [セキュリティ] > [ログイン] を開きます。
- 「NT AUTHORITY ETWORK SERVICE」を右クリックし、「プロパティ」をクリックします。
- 「ステータス」タブに移動して設定します
Permission to Connect To Database Engine
「グラント」へ。