我正在評估SQL Server 2016 Always Encrypted是否可以與我支持的現有MS Access 2010應用程序一起使用。MS Access SQL Server始終加密參數化
這是我目前的障礙:
我的應用程序調用需要的參數很多SQL Server存儲過程。我用下面的功能,使這些電話:
Public Function ExecuteSPWithParamsQuery(poQDFStub As DAO.QueryDef, psParameterString As String) As DAO.Recordset
'-------------------------------------------------------------------------------------------------
' Purpose : Execute an SQL pass-through query that calls a stored procedures requiring parameters.
'
' Params : poQDFStub: pass through query with name of SPROC
' : psParameterString : one or more parameters to be appended to poQDFStub
'
' Returns : Dao.Recordset(dbOpenSnapshot)
'-------------------------------------------------------------------------------------------------
'
If G_HANDLE_ERRORS Then On Error GoTo ErrorHandler
Dim rstResult As DAO.Recordset
'db interface
Dim dbs As DAO.Database: Set dbs = CurrentDb
Dim qdfResult As DAO.QueryDef: Set qdfResult = dbs.CreateQueryDef(vbNullString)
'setup pass through
With qdfResult
.Connect = poQDFStub.Connect
.SQL = poQDFStub.SQL & " " & psParameterString
.ODBCTimeout = 0
.ReturnsRecords = True
End With
'setup result
Set rstResult = qdfResult.OpenRecordset(dbOpenSnapshot, dbSQLPassThrough + dbReadOnly + dbFailOnError)
ExitHere:
'housekeeping
On Error Resume Next
'add cleanup here
Set qdfResult = Nothing
Set dbs = Nothing
'exit protocol
On Error GoTo 0
Set ExecuteSPWithParamsQuery = rstResult
Set rstResult = Nothing
Exit Function
ErrorHandler:
Err.Source = "SQLStoredProcedureHelper.ExecuteSPWithParamsQuery"
HandleError
Resume ExitHere
End Function
調用該函數現在將包括在數據庫加密值的明文版本的參數。
發生這種情況時,出現以下錯誤。
206 [微軟] [ODBC SQL Server程序] [SQL服務器]操作數類型衝突:VARCHAR是不相容>使用爲nvarchar(255)與(將encryption_type = 'DETERMINISTIC',encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_256' 加密,column_encryption_key_name = 'CEK_Auto1', column_encryption_key_database_name = '沙箱')
我已經做了始終加密參數一番調查。它需要兩個技術之一
- .NET
- ODBC 13.1對於SQL Server
因爲這是一個MS Access應用程序,.NET是不適用的。
我安裝了ODBC 13.1,但我猜測我的查詢傳遞繞過了參數化。
這裏是我的ODBC設置:
[ODBC]
DRIVER=ODBC Driver 13 for SQL Server
ColumnEncryption=Enabled
TrustServerCertificate=No
DATABASE=sandbox
WSID=********
APP=Microsoft Office 2010
Trusted_Connection=Yes
SERVER=*********
我如何能解決這個問題,或者是始終處於加密狀態不爲我的應用合適的任何想法?