Прежде всего, привет, я пытаюсь получить доступ к данным из базы данных, которая всегда зашифрована, я объясню шаг за шагом, что я сделал, шаг первый: я открываю сервер SQL и включаю шифрование столбцов для таблицы, которую я хочу. шаг второй: я пробовал, работает ли он нормально в БД или нет, и в результате он работает нормально, если я включу параметр «всегда шифровать», он вернет расшифрованные данные. шаг третий: напишите мой код, и это мой код
<?php
$hostname_DB= "localhost";
$database_DB= "test";
$username_DB= "***";
$password_DB= "***";
try {
$connection = new PDO("sqlsrv:Server=$hostname_DB;Database=$database_DB;ColumnEncryption = Enabled;LoginTimeout=100000", $username_DB, $password_DB);
$connection->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$connection->setAttribute(PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 1000000);
$query = "select TOP (10) second_name_a FROM employees";
$stmt = $connection->query($query);
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
print_r($row);echo'<br>';
}
} catch (PDOException $e) {
die("Connection failed: " . $e->getMessage());
}
?>
шаг четвертый: я резервирую эту ошибку (ошибка подключения: SQLSTATE [CE100]: [Microsoft] [драйвер ODBC 17 для SQL Server] [SQL Server] система не может найти указанный файл.) но когда я запускаю тот же код в CMD, он работает нормально, на двух изображениях первое без параметра ColumnEncryption, а второе - с параметром ColumnEncryption
введите здесь описание изображения
введите здесь описание изображения
примечание: (я использую IIS (Internet Information Services) с PHP 8.0.6, и я установил драйверы Microsoft для PHP для SQL Server (php_pdo_sqlsrv_80_ts_x64.dll/php_sqlsrv_80_ts.dll) и включил расширение из php.ini);
Я пытаюсь обновить SQL (MSSQlSERVER), включить именованные каналы и проверить настройку состояния пользователя (разрешение на подключение к ядру базы данных), это Grant, и войдите в систему, чтобы включить
В итоге ждем расшифрованных данных и спасибо за помощь
Обновление (15.05.2023): Я пробовал в другой БД, и она работает нормально, я думаю, что проблема в сортировке, потому что первая (с которой у меня проблема) должна сопоставлять Arabic_CI_AS, а вторая (отлично работает) должна сопоставлять SQL_Latin1_General_CP1_CI_AS. но я не могу преобразовать подборку для первого. что мне делать, чтобы шифрование всегда работало с подборкой Arabic_CI_AS? примечание: при постоянном шифровании сортировка для столбца будет изменена с Arabic_CI_AS на Arabic_BIN2
Обновление (17.05.2023): Ошибка изменилась на набор ключей connot find
Используете ли вы точно такие же учетные данные (имя пользователя и пароль) в версии кода IIS, что и при успешном выполнении в CLI? Вошедшая в систему учетная запись должна иметь права доступа к базе данных VIEW ANY COLUMN MASTER KEY DEFINITION и VIEW ANY COLUMN ENCRYPTION KEY DEFINITION, а также доступ к CMK и CEK, которые защищают зашифрованные столбцы. Ссылка: Использование Always Encrypted с драйверами PHP для SQL Server
да, у меня есть драйвер ODBC 17 для SQL Server на моем устройстве, я пробовал в другой БД, и он отлично работает, также я даю всем разрешение на доступ к сертификату
Вы можете попробовать использовать расширение SQLSRV вместо PDO. SQLSRV — это расширение PHP, предоставляющее драйверы для подключения к базам данных Microsoft SQL Server. Расширение SQLSRV разработано специально для Microsoft SQL Server и обеспечивает лучшую совместимость, чем универсальное расширение PDO.
та же проблема, он не вернул данные (second_name_a)
Пожалуйста, уточните вашу конкретную проблему или предоставьте дополнительную информацию, чтобы выделить именно то, что вам нужно. Как сейчас написано, трудно точно сказать, о чем вы спрашиваете.
Я хочу использовать всегда зашифрованный на своем веб-сайте, когда я его включил, в ssms нет проблем, данные будут возвращены в расшифрованном виде, но когда я делаю тот же запрос в PHP, у меня возникает эта ошибка (ошибка подключения: SQLSTATE [CE100]: [Microsoft] [Драйвер ODBC 17 для SQL Server] [SQL Server] Системе не удается найти указанный файл.). Я пробовал каждое решение в Интернете, но это не сработало. Я хочу расшифровать данные, поступающие из БД, используя всегда шифрование






Вы должны изменить анонимную аутентификацию в IIS с IUSR на свою учетную запись пользователя, вы можете узнать свою учетную запись, открыв CMD, и введите эту команду (whoiam).

У вас установлен этот драйвер? Драйвер ODBC 17 для SQL Server. Если нет, то скачайте и установите скачать