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 [Microsoft]の[ODBC SQL Serverドライバー] [SQL Server]オペランドタイプ衝突: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が適用されないMS Accessアプリケーションであるため、これは、SQL Serverの
のために二つの技術
- .NET
- ODBC 13.1のいずれかが必要です。
私は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=*********
私はこの問題を解決するか、常に自分のアプリケーションに適し暗号化されていないことができる方法上の任意のアイデアを?