Новый поставщик Microsoft OleDb для SQL Server (MSOLEDBSQL) не поддерживает AlwaysEncrypted (в настоящее время).Вам придется использовать ODBC, а это означает, что поставщик OleDb должен быть поставщиком Microsoft OleDb для ODBC (MSDASQL).Таким образом, вы можете настроить системный DSN с помощью Microsoft® ODBC Driver 17 для SQL Server со строкой подключения, например:
cnn = "Provider=MSDASQL;DSN=testdb;"
, или встроить все параметры драйвера ODBC в «Расширенные свойства» строки подключения MSDASQL.,Как
cnn = "Provider=MSDASQL;Extended Properties=""Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=testdb;Trusted_Connection=yes;ColumnEncryption=Enabled;"" "
Вот пошаговое руководство, использующее первый VBScript для тестирования перед тестированием с ASP.
Начиная с:
create database testdb
go
use testdb
create table tbl1(id int, Enc varchar(200))
insert into tbl1(id,enc) values (1,'Hello')
Затем выполняется мастер шифрования столбцов в SSMS, который хранит сертификат для текущего пользователя на машине с SSMS:
Затем перечисление query.vbs:
cnn = "Provider=MSDASQL;Extended Properties=""Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=testdb;Trusted_Connection=yes;ColumnEncryption=Enabled;"" "
Set oDB = CreateObject( "ADODB.Connection" )
oDB.Open cnn
set oCmd = CreateObject("ADODB.Command")
oCmd.ActiveConnection = cnn
oCmd.CommandText = "SELECT top 10 ID, Enc FROM tbl1"
set rst = oCmd.Execute()
rst.MoveFirst()
msgbox( cstr(rst("Enc")) )
Который можно запустить из командной строки с помощью:
cscript .\query.vbs
Чтобы сделать это из ASP, вам дополнительно нужно будет поместить сертификат в хранилище пользовательских сертификатов учетной записи пула приложений IIS, в соответствии сдокументы здесь .Обратите внимание, что относительный путь к сертификату должен быть одинаковым для всех пользователей.Вы не можете сохранить его в хранилище компьютеров в окне IIS, если изначально настроили его для хранения в хранилище сертификатов пользователя.SQL Server хранит key_path
ключа и указывает клиентам, где найти сертификат, например, CurrentUser/my/388FF64065A96DCF0858D84A88E1ADB5A927DECE
.
. Так что найдите путь к ключу главного ключа столбца
select name, key_path from sys.column_master_keys
Затем экспортируйте сертификат с компьютера, на котором он установлен:
PS C:\Windows> $path = "cert:\CurrentUser\My\388FF64065A96DCF0858D84A88E1ADB5A927DECE"
PS C:\Windows> $mypwd = ConvertTo-SecureString -String "xxxxxxx" -Force -AsPlainText
PS C:\Windows> Export-PfxCertificate -Cert $path -FilePath c:\temp\myexport.pfx -ChainOption EndEntityCertOnly -Password $mypwd
Работая от имени пользователя пула приложений на сервере IIS, импортируйте его
PS C:\WINDOWS> $mypwd = ConvertTo-SecureString -String "xxxxxxx" -Force -AsPlainText
PS C:\WINDOWS> Import-PfxCertificate -FilePath C:\temp\myexport.pfx -CertStoreLocation Cert:\LocalMachine\My -Password $mypwd
И если вы используете Anonymous/ Формирует проверку подлинности, что вы настроили анонимную проверку подлинности IIS для запуска под удостоверением пула приложений, а не по умолчанию IUSR.
Вот ASP-страница для тестирования:
<!DOCTYPE html>
<html>
<body>
<p>Output :</p>
<%
Set objNetwork = CreateObject("Wscript.Network")
Response.write("The current user is " & objNetwork.UserName)
cnn = "Provider=MSDASQL;Extended Properties=""Driver={ODBC Driver 17 for SQL Server};Server=localhost;Database=testdb;Trusted_Connection=yes;ColumnEncryption=Enabled;"" "
Set oDB = CreateObject( "ADODB.Connection" )
oDB.Open cnn
set oCmd = CreateObject("ADODB.Command")
oCmd.ActiveConnection = cnn
oCmd.CommandText = "SELECT top 10 ID, Enc FROM tbl1"
set rst = oCmd.Execute()
rst.MoveFirst()
Response.write(cstr(rst("Enc")) )
%>
</body>
</html>