ローカルネットワーク上のSQL EXPRESSサーバにリモート接続し、
VBAでデータベースにアクセスしようとすると
「SSPIコンテキストを生成できません。」
というエラーが表示されてしまいます。
この状況を解決するにはどうすればよいでしょうか?
分かる方がいらしたら教えていただければ幸いです。
よろしくお願いいたします。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答1件
0
ベストアンサー
Windows 認証で SQL Server に接続しようとした際に認証エラーになっているものと思われます。
SQL Server 認証の構成にて接続できるか試してみるのは如何でしょうか?
■ 「SSPI コンテキストを生成できません」の解決方法
https://social.msdn.microsoft.com/Forums/aspnet/ja-JP/c7e396b1-2678-4db0-b528-8c7426aa8daa/12300sspi
投稿2022/02/09 13:49
総合スコア4693
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
返信ありがとうございます。
上記のエラーはSQL認証で発生します。
記載忘れていまい申し訳ありません。
下記に一般的な DB 接続のトラブルシューティングについて記載されています。
順を追って確認するのが良いかと思います。
■ SQL Server データベース エンジンへの接続のトラブルシューティング
https://docs.microsoft.com/ja-jp/sql/database-engine/configure-windows/troubleshoot-connecting-to-the-sql-server-database-engine?view=sql-server-ver15
■ エラーの例
・名前付きインスタンスで構成されているが、SQL Server Browser サービスを無効化している(インスタンスが見つからない)
→ 名前付きインスタンスの場合、SQL Server Browser サービスが有効化されていることを確認下さい。
・SQL Server ネットワークの構成で「TCP/IP」プロトコルが有効化されていない
→ TCP/IP プロトコルが有効化されていることを確認ください。
・ファイアウォールでポートを空けていない
→ TCP 1433, UDP 1434 ポートを空けて下さい。
返信ありがとうございます。
全て行ったのですが、解消されませんでした。
このサイト
https://docs.microsoft.com/ja-jp/sql/relational-databases/security/choose-an-authentication-mode?view=sql-server-ver15
を見たところ、SQL Server 認証ではKerberos セキュリティ プロトコルを使用できないことが分かりました。
VBAでSQLサーバに接続しようとすると「SSPIコンテキストを生成できません。」というエラーが表示されるということはおそらくKerberos認証でアクセスしようとしているため(間違っていたらすみません)、このようなエラーが表示されるということでしょうか?
接続文字列に「Integrated Security=True」や「Integrated Security=SSPI」を指定した場合は、
SQL Server 認証ではなく、Windows 認証として接続しようとします。
SQL Server 認証で接続する場合は「Integrated Security~」の替わりに「User ID=xxxx;Password=yyyy;」を指定してみてください。
もしくは、ADO での接続の場合は、Connection オブジェクトの Open メソッドの第2、第3引数で、ID/PWDを指定することができます。その場合、SQL Server 認証で接続されます。
--------------------------------------------
Dim cn
Set cn = CreateObject("ADODB.Connection")
cn.Open "PROVIDER=SQLOLEDB;SERVER=IPAddress\インスタンス名;DATABASE=master;", "sa", "******"
Dim rs
Set rs = cn.Execute("SELECT @@version")
WScript.Echo rs(0)
--------------------------------------------
Dim PROVIDER As String
PROVIDER = "SQLOLEDB"
Dim DATA_SOURCE As String
DATA_SOURCE = "入力済み" 'サーバ名
Dim DATABASE As String
DATABASE = "入力済み" 'データベース名
Dim USER_ID As String
USER_ID = "入力済み" 'ユーザID
Dim PASSWORD As String
PASSWORD = "入力済み" 'ユーザパスワード
Dim strSQL As String
Dim cn As New ADODB.Connection
'--------------------------------
' データベース接続
'--------------------------------
'SQL Server認証
cn.ConnectionString = "Provider=" & PROVIDER _
& ";Data Source=" & DATA_SOURCE _
& ";Initial Catalog=" & DATABASE _
& ";Trusted_Connection=Yes"
cn.Open
cn.Close
これで実行した場合に質問したエラーが出てしまします。
接続文字列の「Trusted_connection=yes」は「Integrated Security=SSPI」と同等の意味になります。
「;Trusted_connection=yes」を除去して、かわりに「;User ID=xxxx;Password=yyyy;」を指定してみてください。
User ID/Passwordは、SQL Server 認証のID/PWD を入れて下さい。
無事に解決することができました!
本当にありがとうございます!!

あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。