难以将安全字符串传递到system.data.odbc.odbcconnection对象



我试图将一个安全字符串传递给odbc连接对象,以避免通过网络传递普通密码,但我无法完全弄清楚。请参阅下面我的脚本的当前迭代。

$encryptedPassword = Get-Content "<encrypted password.txt>"  
$runPassword = [Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString $encryptedPassword)))
$Db2Connection = new-object system.data.odbc.odbcconnection
$Db2Connection.connectionstring = "DSN=<dsn>;Userid=<user>;Password=$runPassword"
$Db2Connection.open()
$SqlQuery = @"
SELECT *
FROM <database>.<table>
"@
$SqlCmd = New-Object system.Data.Odbc.OdbcCommand($SqlQuery,$Db2Connection)
$DataAdapter = New-Object system.Data.Odbc.OdbcDataAdapter($SqlCmd)
$DataTable = New-Object system.Data.datatable
$RowCount = $DataAdapter.fill($DataTable)
$DataAdapter = new-object System.Data.odbc.odbcDataAdapter($SqlCmd) 
$DataSet = new-object System.Data.DataSet 
$DataAdapter.Fill($DataSet)
$result = $DataSet.Tables[0].Rows[4]
$result

正如你所看到的,当我有加密在休息时,凭据将使用下面的明文处理。

[Runtime.InteropServices.Marshal]::PtrToStringAuto([Runtime.InteropServices.Marshal]::SecureStringToBSTR((ConvertTo-SecureString $encryptedPassword)))

如有任何想法或建议,将不胜感激

由于您使用的是IBM提供的Db2驱动程序,因此在传输之前处理密码加密的是Db2驱动程序本身。

Db2驱动程序对应用程序透明地进行加密,并且应用程序在传输之前将明文密码提供给加密的Db2驱动。Db2服务器平台(Z/OS、i-series、Linux/Unix/Windows(确定加密密码的配置详细信息。

因此,应用程序无法向Db2驱动程序提供已加密的密码。

这种透明的密码加密需要Db2服务器身份验证设置的正确配置,以及工作站上合适的(意味着:最新的和补丁维护的(Db2驱动程序。除了密码加密之外,Db2客户端还支持传输中的数据加密,但这是另一回事。

作为连接尝试的一部分,Db2驱动程序将从Db2服务器获得Db2服务器可以支持的可用加密算法的名称,并且Db2客户端选择(默认情况下(它可以执行的最安全的算法,该算法也在Db2服务器上可用。您可以通过Db2知识中心中记录的进一步配置来影响此选择。

如果您有特殊要求,您也可以编写自己的安全相关插件。

相关内容

最新更新