私はこれに2日間苦労していましたが、解決策に近づくことはありませんでした。私は20〜30のスレッドを少なくとも読みましたが、それでも解決できません。
私を助けてください。
匿名認証を無効にし、asp.netの偽装を有効にします。
私が追加しました <identity impersonate = "true" />
接続しようとしているデータベースに接続しているセキュリティログインにユーザーを追加しました
これは私が使用する接続文字列です:
Data Source=IPTOSERVER;Initial Catalog=Phaeton;User Id=User;Password=Password;
エラーメッセージ:
ログインで要求されたデータベース「Phaeton.mdf」を開けません。ログインに失敗しました。
ユーザー 'NT AUTHORITY\NETWORK SERVICE'のログインに失敗しました。
受信しているエラーメッセージは、アプリケーションがsqlサーバーではなく、sqlexpress dbへの接続に失敗したことを示しています。 sqlサーバーでdbの名前を変更し、それに応じて接続文字列を更新して、もう一度試してみます。
エラーメッセージには次のように表示されます。
Cannot open database "Phaeton.mdf" requested by the login. The login failed.
あなたはまだファイルベースのデータベースに接続しようとしていますが、名前「Phaeton.mdf」は新しいSQLデータベース名「Phaeton」と一致しません。
お役に立てれば。
Windowsイベントビューアで次のようなエラーメッセージが表示されていました。
ユーザー 'NT AUTHORITY\NETWORK SERVICE'のログインに失敗しました。理由:明示的に指定されたデータベースを開くことができませんでした。 [クライアント:ローカルマシン]
私の問題を解決した解決策は次のとおりです。
上記のスクリーンショットは次のとおりです。
エラーメッセージが
「ユーザー 'NT AUTHORITY\NETWORK SERVICE'のログインに失敗しました。」その後、 'NT AUTHORITY\NETWORK SERVICE'のログイン許可を付与します。
を使用して
"sp_grantlogin 'NT AUTHORITY\NETWORK SERVICE'"
エラーメッセージが次のような場合
「ログインで要求されたデータベース「Phaeton.mdf」を開けません。ログインに失敗しました。ユーザー「NT AUTHORITY\NETWORK SERVICE」のログインに失敗しました。」
使ってみて
"EXEC sp_grantdbaccess 'NT AUTHORITY\NETWORK SERVICE'"
「Phaeton」データベースの下。
私はJedのソリューションが好きでしたが、問題はデバッグモードでプロジェクトをビルドするたびにデータベースプロジェクトがデプロイされ、ユーザーが再び削除されることでした。そのため、このMySQLスクリプトを配置後スクリプトに追加しました。 Jedが言ったことを実際に行いますが、デプロイするたびにユーザーを作成します。
CREATE USER [NT AUTHORITY\NETWORK SERVICE]
FOR LOGIN [NT AUTHORITY\NETWORK SERVICE]
WITH DEFAULT_SCHEMA = dbo;
Go
EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\NETWORK SERVICE'
必要なSQL ServerログインはDOMAIN\machinename$
。これは、呼び出し元NT AUTHORITY\NETWORK SERVICE
はSQL Server(およびファイルサーバーなど)に表示されます
SQLでは、
CREATE LOGIN [XYZ\Gandalf$] FROM WINDOWS
あなたは、SQL Expressエディションを使用しているときにうまく機能すると言っていました。デフォルトでは、Express Editionは名前付きインスタンスを作成し、NT Authority\Network Serviceで実行します。
SQL Server STDは、デフォルトでデフォルトのインスタンスをインストールし、NT Authority\SYSTEMで実行します。
同じマシンに完全なSQLエディションとExpressエディションの両方がインストールされていますか?
接続文字列が、フルバージョンによって作成されたデフォルトのインスタンスではなく、名前付きインスタンス「SQLEXPRESS」をまだ参照している可能性があります。
また、接続文字列はどこで定義されていますか? IISまたはあなたのコード?多くの場所で定義されている場合、すべてが同じSQLインスタンスとデータベースを指していることを確認してください。
また、SQL Serverエラーログにある詳細なエラーを確認してください。セキュリティ上の理由により、イベントログに記録されたエラーは完全ではありません。これは、正しいSQL Serverへの接続が行われたかどうかを知るのにも役立ちます。
また、SQLがインストールされているマシンがアクセス可能であることを確認してください。IISは同じマシンにアクセスしようとしています。 SQLがインストールされており、クエリが間違ったSQL Serverに到達している。
データベースがSQL Serverに存在することを確認してください。 SQL Management Studioのデータベースの下に表示される名前は、接続文字列の名前と一致する必要があります。
最適な方法は、アプリケーションのユーザーを作成し、そのユーザーに適した権限を割り当てることです。 「NT AUTHORITY\NETWORK SERVICE」を使用しないでください。ユーザーには独自の脆弱性があり、OSレベルで非常に多くの権限を持っているユーザーです。この組み込みユーザーには近づかないでください。
Entity Frameworkを使用してデータベースを再作成しているため、データベースを生成するたびにユーザーが上書きされます。
これで、新しいDBContextをロードするたびにこれを実行します。
cnt.Database.ExecuteSqlCommand("EXEC sp_addrolemember 'db_owner', 'NT AUTHORITY\\NETWORK SERVICE'");