Новый поставщик 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/Forms, убедитесь, что вы настроили анонимную аутентификацию 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>
person
David Browne - Microsoft
schedule
17.04.2019