[英]Implicit local connection (passwordless) using CLI SQLDriverConnect fails with SQL30082N reason 3 PASSWORD MISSING
我正在使用 Db2 CLI/ODBC API 接口進行編碼。 Windows 10
如果我在連接字符串中提供用戶名和密碼(UID / PWD)密鑰,我可以使SQLDriverConnect function 正常工作,並且可以連接到任何本地或遠程數據庫。 這部分工作正常。
前任。 如果我的連接字符串類似於"DSN=SAMPLE;UID=xxxxx;PWD=yyyyy"
,則連接工作正常。
但是根據文檔,Db2 應該支持隱式本地連接(當應用程序與數據庫服務器在同一主機上運行時),並且您應該能夠在不提供用戶/密碼信息的情況下連接到本地數據庫。
服務器代碼檢測連接是本地的還是遠程的。 對於本地連接,當驗證是 SERVER 時,驗證成功不需要用戶 ID 和密碼。
在本地,使用 CLP CONNECT 命令,它也可以隱式地工作db2 connect to sample
而不傳遞密碼。 這證明服務器配置正確。 (身份驗證設置為 SERVER)
但是,當使用應用程序 CLI 代碼嘗試相同的方法時,如果我只在連接字符串中提供 DSN(數據庫名稱),我會收到 SQL30082N 原因 3 PASSWORD MISSING 錯誤。 我嘗試了幾種變體,例如:
DSN=SAMPLE;
DSN=SAMPLE;UID=;PWD=;
DSN=SAMPLE=UID=;
DSN=SAMPLE=UID='';PWD='';
DSN=sample; UID=; PWD=; AUTOCOMMIT=0; CONNECTTYPE=1;
它們都以相同的 SQL 狀態失敗。 密碼丟失。
我錯過了什么?
--- PS ----
只是為了測試,我可以使用不同的編程接口使這項工作正常,例如使用 IBM.Data.Db2.Net 提供程序的 Powershell
# $dbFactory = [System.Data.Common.DbProviderFactories]::GetFactory('IBM.Data.DB2')
# $connection = $dbFactory.CreateConnection()
# $connection.ConnectionString = "Database=SAMPLE"
# $connection.Open()
# $connection
...
ConnectionString : Database=SAMPLE
Database : SAMPLE
IsOpen : True
...
DataSource : SAMPLE
UserId : Samuel
ClientUser :
ClientWorkStation : Samuel-ALW
InternalClientWorkStation : Samuel-ALW
...
我來自 powershell 的隱式連接在 db2 db 中列為應用程序:
# db2 list applications for db sample
Auth Id Application Appl. Application Id DB # of
Name Handle Name Agents
-------- -------------- ---------- -------------------------------------------------------------- -------- -----
SAMUEL powershell.exe 5316 *LOCAL.DB2.210103171916 SAMPLE 1
為什么使用SQLDriverConnect在CLI中不起作用?
它對我來說可以正常工作(Db2-LUW v11.5.5.0)。
它也可以在帶有 Db2-LUW v11.5.4.0 的 Win10 上正常工作。
我使用了與 IBM 提供的示例程序dbconn.c
中相同的代碼(在 github 上可用,來自 Db2-知識中心的示例目錄) 它顯示了三種方法,包括SQLDriverConnect
(這是我在本地測試的一種)。
我注意到printf()
報告的連接字符串何時起作用,例如: DSN=sample; UID=; PWD=; AUTOCOMMIT=0; CONNECTTYPE=1;
DSN=sample; UID=; PWD=; AUTOCOMMIT=0; CONNECTTYPE=1;
因此,我對您的建議是嘗試構建並運行 IBM 示例程序( samples/cli/dbconn.c
- 可能需要對文件/構建進行輕微修改,因為 IBM 似乎不會在示例目錄中保持其示例代碼為最新,也許github上的不同)。 IBM 提供示例腳本來構建位於同一目錄樹中的這些程序( bldapp
等)。
要進行故障排除,請仔細檢查您要連接的別名是如何定義的。 專門檢查目錄和(對於 IBM 提供的驅動程序) db2dsdriver.cfg
內容,必要時手動創建后者。 SQL30082N 原因 3 將導致非本地數據庫。
您還可以使用 CLI 跟蹤來觀察幕后發生的事情,請參閱 Db2 知識中心了解運行db2trc
命令的詳細信息,轉儲其 output,將其二進制 Z78E6221F6393D135DZ681DB33 格式化為可讀文本等。
第一,感謝@mao 的幫助。 我在另一個工作站上執行了另一個全新安裝,它在那里工作。 因此,我的原始系統出現了“錯誤”。
幾天/幾小時后,我終於在@Mitchell Waite 的幫助下找到了問題
cli 驅動程序為此數據庫提供了默認用戶名,但沒有密碼,因此出現PASSWORD MISSING錯誤。
默認 UID 來自具有以下內容的db2cli.ini文件:
[SAMPLE]
DBALIAS=SAMPLE
UID=samuel
我不記得手動創建它,但我想這是在我玩 ODBC DSN windows GUI 進行一些測試時到達那里的。
不管怎樣,從這個條目中刪除UID ,或者刪除整個 [SAMPLE] 部分,它再次開始工作,正如預期的那樣!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.