Azure: как правильно использовать веб-задание PHP для внесения изменений в базу данных SQL?

ЦЕЛЬ: использовать веб-задание PHP для подключения и изменения таблицы базы данных SQL в Azure.

Я пытаюсь загрузить .zip файл, содержащий файлы .php и .json, в настройки веб-заданий внутри службы приложений, которую я использую в Azure.

Я считаю, что что-то не так с тем, как я кодирую соединение PDO-SQL внутри файла PHP, когда я загружаю веб-задание как .zip в веб-задания, статус всегда «Ожидает перезапуска».

Вот что у меня в .php файле:

<?php

$conn = new PDO ( "sqlsrv:server = mydb.database.windows.net,1433; Database = myappservices");
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
catch ( PDOException $e ) {
  print( "Error connecting to SQL Server." );
}
$connectionInfo = array("Database" => "myappservices");
$serverName = "mydb.database.windows.net,1433";
$conn = sqlsrv_connect($serverName, $connectionInfo);

if ($conn) {
  $stf = $conn->prepare("INSERT INTO MyTable
                        VALUES ('boom', 1, 2);");
  $stf->execute();
}

?>

Тогда мой .json файл - это просто планировщик:

{
    "schedule": "0 */5 * * * *"
}

Это единственные два файла в моем .zip файле, который я загружаю.

Чтобы объяснить код PHP, я пытаюсь подключиться через проверку подлинности Windows (нет необходимости в user / pass). Может, я тоже делаю это не так.

У кого-нибудь есть способы сделать это? Я был бы очень признателен за пошаговые инструкции или предложения относительно того, как изменить мой код, чтобы эта веб-задача действительно работала.


person LatentDenis    schedule 09.09.2016    source источник


Ответы (1)


Рассмотрим этот job.php:

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

try {
    // DON'T HARDCODE CREDENTIALS, pull from Application Settings.
    // In Azure App Service, Application Settings are exposed as
    // environment variables.
    //
    // i.e. $db_user = getenv("DB_USER");
    //
    $conn = new PDO ("sqlsrv:server = poqfsXXXX.database.windows.net,1433;
                     Database = MobileApp_db",
                     "Username", "P@ssw0rd");
    $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
}
catch (PDOException $e) {
    print("Error connecting to SQL Server: " + $e);
}

$stmt = $conn->prepare("select * from todoitems");
$stmt->execute();
while ($row = $stmt->fetch()) {
    print_r($row);
}

unset($conn);
unset($stmt);

?>    

Ожидаемый результат:
(Вы можете протестировать в Kudu: https: // {sitename} .scm.azurewebsites.net / DebugConsole)

d:\home\site\tests> "d:\program files (x86)\php\v5.6\php.exe" job.php

Array
(
    [Id] => d4657cff-09a2-4a8a-b1d2-462c2c42a9f0
    [0] => d4657cff-09a2-4a8a-b1d2-462c2c42a9f0
    [Text] => From Azure SQL
    [1] => From Azure SQL
    [Complete] => 0
    [2] => 0
    [Version] => 0000000000001825
    [3] => 0000000000001825
    [CreatedAt] => 2016-06-17 10:11:17.1167267 +00:00
    [4] => 2016-06-17 10:11:17.1167267 +00:00
    [UpdatedAt] => 2016-06-17 10:11:17.1167267 +00:00
    [5] => 2016-06-17 10:11:17.1167267 +00:00
    [Deleted] => 0
    [6] => 0
)
Array
(
    ...
)
...

Чтобы объяснить код PHP, я пытаюсь подключиться через проверку подлинности Windows (нет необходимости в user / pass). Может, я тоже делаю это не так.

Хотя Azure SQL действительно поддерживает проверку подлинности Windows, я не совсем понимаю, что вы имеете в виду под «нет необходимости в пользователе / ​​проходе». Аутентификация Windows означает «взять учетные данные того, от кого запущен этот процесс, и попытаться выполнить аутентификацию на сервере SQL». Поскольку вы запускаете веб-задание от имени случайного пользователя, предоставленного песочницей, проверка подлинности Windows не имеет особого смысла.

Из программы Kudu Process Explorer:

Обозреватель процессов

Вот один допустимый сценарий для проверки подлинности Windows с помощью Azure SQL:

У вас есть локальное размещенное приложение, которое использует Active Directory для аутентификации на вашем локальном сервере SQL. У вас есть требование перейти на Azure SQL. У вас нет возможности изменить метод аутентификации для SQL. Итак, вы dirsync свой каталог в Azure AD и используете проверку подлинности Windows для подключения к Azure SQL.

Подробнее об аутентификации Windows в Azure SQL:
https://azure.microsoft.com/en-us/documentation/articles/sql-database-aad-authentication/

person evilSnobu    schedule 10.09.2016
comment
Спасибо за отличный ответ, у меня есть еще один вопрос, если вы готовы его решить: stackoverflow.com/questions/39430631 / - person LatentDenis; 11.09.2016