古い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では、同じ資格情報がエラーなしで使用されています。
Windows 10のアプリが、userdomain\useralias .....の代わりにcomputername\useraliasの資格情報をSQL Serverに誤って渡しているようです。
アプリ(またはWindows 10)がドメインユーザー名を正しくアドレス指定してエラーを回避するようにこれを修正する方法はありますか?
「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マシンのどのログインアプリが使用しているかが表示されます