web-dev-qa-db-ja.com

古いODBCアプリがWindows 10で「sspiコンテキストを生成できません」をスローする

古いAccess 2003 .adpプロジェクトは現在Windows 7マシンで実行されていますが、SQL Server 2008はバックエンドにあります。アプリがWindows 10マシンに移動されたため、アプリは「SSPIコンテキストを生成できません」エラーをトリガーします。

インターネット上には 考えられる理由と解決策を説明 へのメッセージがたくさんあります。

私たちのケースでは、コマンドラインからMsaccess.exeを実行する問題を克服できます。

runas /netonly /user:userdomain\useralias "C:\Program Files\<path-to-office-folder>Msaccess.exe"

欠点は、ショートカットが使用されるたびにユーザーがパスワードの入力を求められることです。

編集:

奇妙な事実は、プログラムが実行されているコンテキストは、Windows 10ユーザーがドメインリソースにアクセスするための適切な資格情報を持っている(サーバー側のネットワーク共有に正しくアクセスできる)ことと、SQLサーバー構成内に資格情報があることと明らかに同じです。証拠として、Windows 7では、同じ資格情報がエラーなしで使用されています。

enter image description here

Windows 10のアプリが、userdomain\useralias .....の代わりにcomputername\useraliasの資格情報をSQL Serverに誤って渡しているようです。

アプリ(またはWindows 10)がドメインユーザー名を正しくアドレス指定してエラーを回避するようにこれを修正する方法はありますか?

2
Riccardo

「runas」コマンドを使用してアプリを起動すると、一部のドメインユーザーが使用され、そのユーザーはSQLサーバーにWindowsログインを持っています。または、そのドメインユーザーは、SQL ServerでWindowsログインを持ついくつかのADグループの一部です

「runas」コマンドなしでアプリを起動すると、アプリは実行されますが、異なるセキュリティコンテキスト(異なるWindowsユーザーの下)で実行されますよね?この場合、SQL ServerでこのドメインユーザーのWindowsログインを作成し、いくつかの権限を付与して、別のWindowsユーザーがSQL Serverに接続できるようにする必要があります。それは「SSPIコンテキストを生成できません」エラーを解決します

Edit 1:質問を再度読んだ後-Windows 7マシンがSQL Serverにログインしている可能性があります(例: "yourdomain/win7machine $")。接続できるようになり、アプリをWindows 10マシンに移動すると、そのマシンはコンピュータアカウント( "yourdomain/win10machine $")はSQL Serverにログインしていません...このログインを作成するだけです

Edit 2: Win 7マシン上のアプリがSQL Serverに接続されているときに、WindowsログインアプリがSQL Serverへの接続に使用しているものを見つけるには、SQL Serverで以下のコマンドを実行します。

select * from sys.dm_exec_sessions

列を見るHost_name(Win 7マシンになります)とlogin_name(アプリケーションがSQL Serverへの接続に使用している実際のログインになります)

次に、Windows 10マシンでアプリを起動してみます。 「SSPIコンテキストを生成できません」エラーをスローするようにします。 SQL Serverマシンに移動し、イベントビューアを起動して、アプリケーションログに移動します。 MSSQLSERVERからの新しいログオンイベントはありますか?その場合、「ユーザーのログインに失敗しました...」と表示されますか?はいの場合、SQL Serverに接続するためにWin 10マシンのどのログインアプリが使用しているかが表示されます

2
Aleksey Vitsko