Я оцениваю, будет ли SQL Server 2016 Always Encrypted работать с существующим приложением MS Access 2010, которое я поддерживаю.
Вот мой текущий контрольный пункт:
Мое приложение вызывает множество хранимых процедур 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 [Microsoft] [Драйвер ODBC SQL Server] [SQL Server] Конфликт типов операндов: varchar несовместим> с nvarchar (255), зашифрованным с помощью (encryption_type = 'DETERMINISTIC', encryption_algorithm_name = 'AEAD_AES_256_CBC_HMAC_SHA_utoption_name', column_encryption_name = column_encryption_name 'песочница')
Я провел небольшое расследование по параметризации Always Encrypted Parameterization. Требуется одна из двух технологий
- .СЕТЬ
- 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=*********
Есть идеи, как я могу решить эту проблему или Always Encrypted не подходит для моего приложения?