Чтобы создать отдельную базу данных на портале Azure с помощью этого краткого руководства, перейдите на страницу SQL Azure.
Перейдите на страницу Выберите вариант развертывания SQL.
В разделе Базы данных SQL оставьте для параметра Тип ресурса значение Отдельная база данных и нажмите кнопку Создать.
На вкладке Основные сведения формы Создание базы данных SQL в разделе Сведения о проекте выберите нужную подписку Azure.
В разделе Группа ресурсов выберите Создать, введите myResourceGroup и нажмите кнопку OK.
В поле Имя базы данных введите demo.
В разделе Сервер выберите Создать. Заполните форму для создания сервера, указав следующую информацию.
- Имя сервера: Введите mysqlserver и добавьте еще символы, чтобы имя было уникальным. Мы не можем указать точное имя сервера, так как имена всех серверов в Azure должны быть глобально уникальными, а не только в рамках подписки. Вы можете ввести, например, mysqlserver12345 и узнать на портале, доступно ли это имя.
- Имя для входа администратора сервера. Введите azureuser.
- Пароль: введите пароль, соответствующий требованиям. Затем повторите его в поле Подтверждение пароля.
- Расположение. Выберите расположение из раскрывающегося списка.
- Выберите параметр Разрешить службам Azure доступ к этому серверу, чтобы разрешить доступ к хранилищу дайджестов.
Нажмите ОК.
Оставьте для параметра Хотите использовать Эластичный пул SQL? значение Нет.
В разделе Вычисления и хранение выберите Настроить базы данных.
В этом кратком руководстве используется бессерверная база данных, поэтому выберите Бессерверное, а затем нажмите кнопку Применить.
На вкладке Сеть в разделе Метод подключения выберите Общедоступная конечная точка.
В разделе Правила брандмауэра установите переключатель Добавить текущий IP-адрес клиента в положение Да. Оставьте значение Нет для параметра Разрешить доступ к серверу службам и ресурсам Azure.
Выберите Далее: безопасность доступа в нижней части страницы.
На вкладке Безопасность в разделе Книга учета выберите параметр Настроить книгу учета.
В области Настройка книги учета в разделе Книга учета установите флажок Включить для всех будущих таблиц в этой базе данных. Этот параметр гарантирует, что все будущие таблицы в базе данных будут таблицами реестра. Благодаря этому для всех данных в базе можно будет легко обнаружить любые попытки незаконного изменения. По умолчанию новые таблицы будут создаваться как обновляемые таблицы книги учета, даже если вы не укажете LEDGER = ON
в выражении CREATE TABLE. Вы также можете не выбирать этот параметр. В этом случае вам потребуется включать функции реестра для каждой новой таблицы при ее создании с помощью Transact-SQL.
В разделе Хранилище дайджеста автоматически выбирается параметр Включить автоматическое хранение дайджеста. Затем создается новая учетная запись службы хранилища Microsoft Azure и контейнер, где хранятся дайджесты.
Выберите Применить.
В нижней части страницы выберите Review + create (Проверить и создать).
На странице Просмотр и создание после проверки нажмите кнопку Создать.
Вы создадите группу ресурсов, логический сервер базы данных, одну базу данных реестра, а также настроите отправку хэш-кодов реестра с помощью Azure CLI.
Запуск Azure Cloud Shell
Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.
Чтобы открыть Cloud Shell, выберите Попробовать в правом верхнем углу блока кода. Cloud Shell можно также запустить в отдельной вкладке браузера, перейдя на страницу https://shell.azure.com. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить его.
Установка значений параметра
Следующие значения используются в последующих командах для создания базы данных и требуемых ресурсов. Имена серверов и учетных записей хранения должны быть глобально уникальными в пределах Azure, поэтому для создания имени сервера и учетной записи хранения используется функция $RANDOM.
Имя ресурса должно быть уникальным в пределах вашей подписки. Замените <your resource group name>
уникальным именем, а <your subscription ID>
— идентификатором подписки.
Замените значения 0.0.0.0 в диапазоне IP-адресов в соответствии с конкретной средой.
Замените westeurope названием предпочтительного региона Azure.
resourceGroupName="<your resource group name>"
location="westeurope"
serverName="mysqlserver"-$RANDOM
databaseName="myLedgerDatabase"
storageAccountName="mystorage"$RANDOM
subscription="<your subscription ID>"
adminLogin=azureuser
adminPassword=Azure1234567!
serverResourceId="/subscriptions/$subscription/resourceGroups/$resourceGroupName/providers/Microsoft.Sql/servers/$serverName"
# The ip address range that you want to allow to access your server
startIP=0.0.0.0
endIP=0.0.0.0
# Set variables for your digest storage location
storageAccountName="mystorage"$RANDOM
storageAccountURL1="https://"
storageAccountURL3=".blob.core.windows.net"
storageAccountURL=$storageAccountURL1$storageAccountName$storageAccountURL3
storageAccountResourceId="/subscriptions/$subscription/resourceGroups/$resourceGroupName/providers/Microsoft.Storage/storageAccounts/$storageAccountName"
# Show resource names
echo "Resource group name is" $resourceGroupName
echo "Server name is" $serverName
echo "Database name is" $databaseName
echo "Storage account name is" $storageAccountName
Создание или изменение группы ресурсов
Создайте группу ресурсов с помощью команды az group create. Группа ресурсов Azure является логическим контейнером, в котором происходит развертывание ресурсов Azure и управление ими.
az group create --name $resourceGroupName --location $location
Создание сервера с управляемым удостоверением
Создайте сервер с помощью команды az sql server create. С помощью этой команды создается сервер с назначенным ему управляемым удостоверением.
az sql server create \
--name $serverName \
--resource-group $resourceGroupName \
--location $location \
--admin-user $adminLogin \
--admin-password $adminPassword \
--assign-identity
Эта команда сохраняет идентификатор в переменной, которая позже будет использоваться для предоставления серверу разрешений на отправку хэш-кодов реестра.
# Retrieves the assigned identity to be used when granting the server access to the storage account
principalId=`az sql server show \
--name $serverName \
--resource-group $resourceGroupName \
--query identity.principalId \
--output tsv`
Создайте правило брандмауэра с помощью команды az sql server firewall-rule create.
az sql server firewall-rule create \
--resource-group $resourceGroupName \
--server $serverName \
-n AllowYourIp \
--start-ip-address $startIP \
--end-ip-address $endIP
Создание отдельной базы данных реестра
Создайте базу данных реестра с помощью команды az sql db create. Следующая команда создает бессерверную базу данных с включенным реестром.
az sql db create \
--resource-group $resourceGroupName \
--server $serverName \
--name $databaseName \
--edition GeneralPurpose \
--family Gen5 \
--capacity 2 \
--compute-model Serverless \
--ledger-on
Создание учетной записи хранилища
Создайте учетную запись хранения для хранения хэш-кодов реестра с помощью команды az storage account create.
az storage account create \
--name $storageAccountName \
--resource-group $resourceGroupName \
--location $location \
--sku Standard_GRS \
--kind StorageV2
Предоставление серверу разрешений на запись хэш-кодов реестра
Назначьте управляемое удостоверение сервера роли Участник данных BLOB-объектов хранилища с помощью команды az role assignment create. Это даст серверу SQL необходимые разрешения на публикацию хэш-кодов базы данных в учетной записи хранения.
az role assignment create \
--assignee-object-id $principalId \
--assignee-principal-type "ServicePrincipal" \
--role "Storage Blob Data Contributor" \
--scope $storageAccountResourceId
Включение отправки хэш-кодов базы данных
Обновите базу данных, чтобы начать отправку хэш-кодов реестра в учетную запись хранения, используя команду az sql db ledger-digest-uploads enable.
az sql db ledger-digest-uploads enable \
--name $databaseName \
--resource-group $resourceGroupName \
--server $serverName \
--endpoint $storageAccountURL
Чтобы защитить хэш-коды от удаления или обновления, рекомендуется настроить в контейнере sqldbledgerdigests политику хранения на основе времени, используя команды az storage container immutability-policy create и az storage container immutability-policy lock. Политика должна разрешать защищенные операции записи для добавочных BLOB-объектов. Таким образом, сервер базы данных сможет добавлять к существующему BLOB-объекту блоки, содержащие новые хэш-коды, а удаление или обновление хэш-кодов будет запрещено в течение указанного периода неизменяемости.
Внимание
В приведенном ниже примере используется значение периода неизменяемости, равное 1 дню. В рабочей среде это значение должно быть гораздо больше.
Примечание.
После отправки хэш-кодов базы данных в учетную запись хранения вы не сможете удалить ее, пока не истечет срок действия политики неизменяемости. Если вы планируете очистить ресурсы сразу после этого краткого руководства, можно пропустить политику неизменяемости.
Дополнительные сведения о политике хранения контейнеров на основе времени см. в статье Настройка политик неизменяемости для контейнеров.
az storage container immutability-policy create \
--resource-group $resourceGroupName \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--period 1 \
--allow-protected-append-writes true
# Retrieves the etag value of the policy to be used when the policy is locked
etag=`az storage container immutability-policy show \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--query etag \
--output tsv`
etag="${etag/$'\r'/}"
az storage container immutability-policy lock \
--resource-group $resourceGroupName \
--account-name $storageAccountName \
--container-name sqldbledgerdigests \
--if-match $etag
Вы создадите группу ресурсов, логический сервер базы данных, одну базу данных реестра, а также настроите отправку хэш-кодов реестра с помощью Windows PowerShell.
Запуск Azure Cloud Shell
Azure Cloud Shell — это бесплатная интерактивная оболочка, с помощью которой можно выполнять действия, описанные в этой статье. Она включает предварительно установленные общие инструменты Azure и настроена для использования с вашей учетной записью.
Чтобы открыть Cloud Shell, выберите Попробовать в правом верхнем углу блока кода. Cloud Shell можно также запустить в отдельной вкладке браузера, перейдя на страницу https://shell.azure.com. Нажмите кнопку Копировать, чтобы скопировать блоки кода. Вставьте код в Cloud Shell и нажмите клавишу ВВОД, чтобы выполнить его.
Установка значений параметра
Следующие значения используются в последующих командах для создания базы данных и требуемых ресурсов. Имена серверов и учетных записей хранения должны быть глобально уникальными в Azure, поэтому для создания имени сервера и учетной записи хранения используется командлет Get-Random.
Имя ресурса должно быть уникальным в пределах вашей подписки. Замените <your resource group name>
уникальным именем.
Замените значения 0.0.0.0 в диапазоне IP-адресов в соответствии с конкретной средой.
Замените westeurope названием предпочтительного региона Azure.
# Set variables for your server and database
$resourceGroupName = "<your resource group name>"
$location = "westeurope"
$serverName = "mysqlserver-$(Get-Random)"
$databaseName = "myLedgerDatabase"
$storageAccountName = "mystorage$(Get-Random)"
# The ip address range that you want to allow to access your server
$startIP = "0.0.0.0"
$endIP = "0.0.0.0"
# Show resource names
Write-host "Resource group name is" $resourceGroupName
Write-host "Server name is" $serverName
Write-host "Storage account name is" $storageAccountName
Создание или изменение группы ресурсов
Создайте группу ресурсов Azure с помощью командлета New-AzResourceGroup. Группа ресурсов — это логический контейнер, в котором происходит развертывание ресурсов Azure и управление ими.
Write-host "Creating resource group..."
$resourceGroup = New-AzResourceGroup `
-Name $resourceGroupName `
-Location $location
$resourceGroup
Создание сервера
Создайте сервер с помощью командлета New-AzSqlServer.
Этот командлет создаст сервер с назначенным ему управляемым удостоверением, которое потребуется позднее для предоставления серверу разрешений на отправку хэш-кодов реестра.
При появлении запроса введите имя и пароль администратора SQL.
Write-host "Creating primary server..."
$server = New-AzSqlServer `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-Location $location `
-AssignIdentity `
-SqlAdministratorCredentials (Get-Credential)
$server
Создание правила брандмауэра
Создайте правило брандмауэра сервера с помощью командлета New-AzSqlServerFirewallRule.
Write-host "Configuring server firewall rule..."
$serverFirewallRule = New-AzSqlServerFirewallRule -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-FirewallRuleName "AllowedIPs" -StartIpAddress $startIP -EndIpAddress $endIP
$serverFirewallRule
Создание отдельной базы данных реестра
Создайте отдельную базу данных реестра с помощью командлета New-AzSqlDatabase.
В приведенном ниже примере создается бессерверная база данных.
Write-host "Creating a gen5 2 vCore serverless ledger database..."
$database = New-AzSqlDatabase -ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Edition GeneralPurpose `
-ComputeModel Serverless `
-ComputeGeneration Gen5 `
-VCore 2 `
-MinimumCapacity 2 `
-EnableLedger
$database
Создание учетной записи хранилища
Создайте учетную запись хранения для хранения хэш-кодов реестра с помощью командлета New-AzStorageAccount.
Write-host "Creating a storage account for ledger digests..."
$storage = New-AzStorageAccount -ResourceGroupName $resourceGroupName `
-Name $storageAccountName `
-Location $location `
-SkuName Standard_RAGRS `
-Kind StorageV2 `
-AccessTier Hot
$storage
Предоставление серверу разрешений на запись хэш-кодов реестра
Назначьте управляемое удостоверение сервера роли Участник данных BLOB-объектов хранилища с помощью командлета New-AzRoleAssignment. Это даст серверу SQL необходимые разрешения на публикацию хэш-кодов базы данных в учетной записи хранения.
Write-host "Granting the server access to the storage account..."
$assignment = New-AzRoleAssignment `
-ObjectId $server.Identity.PrincipalId `
-RoleDefinitionName "Storage Blob Data Contributor" `
-ResourceGroupName $resourceGroupName `
-ResourceType "Microsoft.Storage/storageAccounts" `
-ResourceName $storageAccountName
$assignment
Включение отправки хэш-кодов базы данных
Обновите базу данных, чтобы начать отправку хэш-кодов реестра в учетную запись хранения, используя командлет Enable-AzSqlDatabaseLedgerDigestUpload. Сервер базы данных создаст в учетной записи хранения новый контейнер с именем sqldbledgerdigests и начнет записывать в него хэш-коды реестра.
Write-host "Enabling ledger digest upload..."
$ledgerDigestUploadConfig = Enable-AzSqlDatabaseLedgerDigestUpload `
-ResourceGroupName $resourceGroupName `
-ServerName $serverName `
-DatabaseName $databaseName `
-Endpoint $storage.PrimaryEndpoints.Blob
$ledgerDigestUploadConfig
Чтобы защитить хэш-коды от удаления или обновления, рекомендуется настроить в контейнере sqldbledgerdigests политику хранения на основе времени, используя командлеты Set-AzRmStorageContainerImmutabilityPolicy и Lock-AzRmStorageContainerImmutabilityPolicy. Политика должна разрешать защищенные операции записи для добавочных BLOB-объектов. Таким образом, сервер базы данных сможет добавлять к существующему BLOB-объекту блоки, содержащие новые хэш-коды, а удаление или обновление хэш-кодов будет запрещено в течение указанного периода неизменяемости.
Внимание
В приведенном ниже примере используется значение периода неизменяемости, равное 1 дню. В рабочей среде это значение должно быть гораздо больше.
Примечание.
В течение указанного периода неизменяемости вы не сможете удалить контейнер или учетную запись хранения.
Дополнительные сведения о политике хранения контейнеров на основе времени см. в статье Настройка политик неизменяемости для контейнеров.
Write-host "Configuring a time-based retention policy..."
$immutabilityPerdiod = 1
$containerName = "sqldbledgerdigests"
$policy = Set-AzRmStorageContainerImmutabilityPolicy `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName `
-ContainerName $containerName `
-AllowProtectedAppendWrite $true `
-ImmutabilityPeriod $immutabilityPerdiod
Lock-AzRmStorageContainerImmutabilityPolicy `
-ResourceGroupName $resourceGroupName `
-StorageAccountName $storageAccountName `
-ContainerName $containerName `
-Etag $policy.Etag
Вы можете сохранить группу ресурсов, сервер и одну базу данных для последующих действий. Вы узнаете, как различными способами использовать функцию реестра в базе данных.
Завершив работу с этими ресурсами, удалите созданную вами группу ресурсов. Это действие также приведет к удалению содержащихся в ней сервера и отдельной базы данных, а также учетной записи хранения.
Узнайте, как создавать подключения и выполнять запросы к базе данных с использованием разных средств и языков: