Windows

以程式方式將 ODBC DSN 添加到 Windows 上的 ODBC 管理器的問題

  • December 2, 2021

我正在嘗試自動化一些配置,作為其中的一部分,我們需要通過腳本添加 ODBC DSN。我嘗試使用的驅動程序是 Cloudera Impala ODBC 連接器,從這裡下載。它將執行的所有機器都將執行 Windows,其中大多數是 Windows 8.1 或 10。我已經在 Windows 7(如果可能)和 Windows 10 上測試了以下所有內容,結果相同。我可以在這台機器上手動創建一個 DSN,所以驅動程序似乎安裝正確。我還用使用者 DSN 和系統 DSN 嘗試了所有這些,但沒有運氣。

根據這裡,有三種方法可以做到這一點。第一個是直接弄亂系統資料庫,如果可能的話,我想避免這種情況。

第二個是使用odbcconf。問題是,當我在 Windows 7 和 Windows 10 上執行以下命令時,它會出現一個 ODBC Administrator 的配置視窗,但我指定的值都沒有填寫。如果我為 SQL Server 創建一個 DSN,這個但是,確實有效,因此它似乎是特定於驅動程序的。我已經仔細檢查過我設置正確,但甚至名稱都沒有設置。請參閱下面的螢幕截圖以了解它的外觀。

odbcconf CONFIGSYSDSN "Cloudera ODBC Driver for Impala" "DSN=Testing|Server=server"

打開的視窗的螢幕截圖

第三種是使用Powershell CmdLet,Add-OdbcDsn。當我為 SQL Server 或 Cloudera Impala 執行以下命令時,它只是掛起,即使 10 分鐘後也不會返回。Powershell 的資源使用量基本上為 0,而且我沒有看到系統上有任何活動。沒有 DSN 顯示在 ODBC 管理器中。

Add-OdbcDsn -Name "testing" -Driver "SQL Server" -DsnType "System"

關於如何解決其中任何一個問題以便我繼續前進的任何想法?

因此,由於沒有人回答這個問題,我將繼續填寫我最終在下面所做的事情,供@gimpy 等可能正在尋找類似答案的人使用。

我最終只是使用系統資料庫項的路線,執行一個 .reg 文件以添加正確的 ODBC 資訊。請參閱下面的範例,了解我在 .reg 文件中放置的內容以使其工作。

我將把這個答案標記為解決方案,直到/如果有人能夠給我一個回答上述其他兩種方法之一的答案,我會覺得這是更可取的。

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\ODBC Data Sources] 

"Non-Prod Impala Connection"="Cloudera ODBC Driver for Impala" 



[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC.INI\Non-Prod Impala Connection] 

"AllowHostNameCNMismatch"="1" 

"AllowSelfSignedServerCert"="1" 

"AsyncExecPollInterval"="10" 

"AuthMech"="1" 

"AutoReconnect"="1" 

"CheckCertRevocation"="1" 

"DelegateKrbCreds"="1" 

"DelegationUID"="" 

"DESCRIPTION"="" 

"Driver"="Cloudera ODBC Driver for Impala" 

"EnableSimulatedTransactions"=0 

"Host"="<ImpalaHost>" 

"KrbFQDN"="_HOST" 

"KrbRealm"="<Domain>" 

"KrbServiceName"="impala" 

"LCaseSspKeyName"="" 

"Port"="21050" 

"RowsFetchedPerBlock"="10000" 

"Schema"="<Database>" 

"ServicePrincipalCanonicalization"="1" 

"SocketTimeout"="30" 

"SSL"="1" 

"StringColumnLength"="32767" 

"TrustedCerts"="<CertificatePath>\rootca.cert.pem" 

"TSaslTransportBufSize"="1000" 

"UID"="" 

"UseKeytab"="0" 

"UseNativeQuery"="0" 

"UseOnlySSPI"="0" 

"UseSASL"="1" 

"UseSQLUnicodeTypes"="0" 

"UseSystemTrustStore"="1" 

引用自:https://serverfault.com/questions/885612