- Вопрос или проблема
- Сценарий
- Проблема
- Диагностика
- …путь к базе данных не является необязательным!
- Ответ или решение
- Проблемы с подключением к базе данных для RDS Connection Broker в режиме высокой доступности
- Введение
- Описание проблемы
- Примеры ошибок:
- Диагностика проблемы
- Что проверить:
- Решение проблемы
- 1. Укажите путь к базе данных
- 2. Настройка прав доступа
- 3. Используйте актуальные драйвера
- Заключение
Вопрос или проблема
Сценарий
Вы хотите настроить брокера подключений служб удаленного рабочего стола в режиме высокой доступности, используя (по крайней мере) Windows Server 2016.
Вы выполнили и проверили все предварительные требования:
- база данных доступна по сети (все файрволы и маршрутизация в порядке),
- разрешения базы данных в порядке (
db_creator
для группы, содержащей все целевые хосты RDS CB), - драйвер SQL установлен, а строка подключения правильная.
Вы начинаете настраивать высокую доступность либо через мастер:
либо через PowerShell:
Set-RDConnectionBrokerHighAvailability `
-ClientAccessName "rds.contoso.com" `
-DatabaseConnectionString "DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=rdscbha"
Вы пропускаете “Папку для хранения базы данных” или -DatabaseFilePath
, потому что это необязательно, и ваш MSSQL уже настроен на то, где по умолчанию хранить новые базы данных.
Проблема
Вы получаете следующее сообщение об ошибке в интерфейсе:
или следующую ошибку в PowerShell:
Указанная база данных в строке подключения DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=master недоступна с сервера брокера подключений RD RDS-01.CONTOSO.COM. Убедитесь, что сервер базы данных доступен в сети, SQL Server Native Client установлен на всех серверах брокера подключений RD, а учетные записи компьютеров серверов брокера подключений RD являются членами группы серверов управления RDS на сервере базы данных. + CategoryInfo : NotSpecified: (:) [Write-Error], RDManagementException + FullyQualifiedErrorId : SetRdmsHighAvailability,Microsoft.PowerShell.Commands.WriteErrorCommand + PSComputerName : localhost
Диагностика
Вы действительно уверены, что всё в порядке. Вы можете запустить PowerShell от имени пользователя SYSTEM
с помощью psexec -is powershell
и создать базу данных по своему усмотрению с помощью инструментов SQL PowerShell и правильного драйвера.
Ничего не работает.
Однако одно кажется странным. Вы проверяете свой файрвол с помощью мастера интерфейса или команды PowerShell, и вы видите абсолютно никаких попыток подключения к SQL серверу.
Что не так?
Несмотря на то, что говорит Microsoft в интерфейсе или в команде PowerShell…
…путь к базе данных не является необязательным!
Да. Как только вы добавляете путь к базе данных, всё начинает работать!
Волшебным образом, если вы указываете только путь к вашей базе данных, например:
C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA
если ваши журналы имеют другой путь по умолчанию, вновь созданная база данных будет создана правильно:
C:\ClusterStorage\SQL Log\MSSQL13.MSSQLSERVER\MSSQL\DATA
Эта тема может быть немного устаревшей, но мы только недавно обновили до 2016 RD Server Farm, и все другие материалы, которые я нашел при поиске в Google, не сработали; ваш ответ наконец-то указал мне на решение. Поэтому я решил поделиться дополнительной информацией, если кто-то все еще планирует обновление.
Я хотел бы добавить, что также не работало, когда я пытался использовать другой путь, отличающийся от пути к корневой директории базы данных по умолчанию. Вы можете получить ваш путь в параметрах сервера в MS SQL Server Management Studio.
В этой папке есть пользователь учетной записи службы с именем MSSQLSERVER с полными правами, брокер, по-видимому, использует его для создания базы данных. В каждой другой папке на сервере появлялась та же ошибка, описанная выше.
Дополнительная информация:
Когда вы хотите добавить второй сервер к HA брокеру, сначала нужно сопоставить группу безопасности RDS Broker как dbowner для вновь созданной базы данных. Это не происходит автоматически.
Попробуйте добавить таким образом. Это должно сработать.
DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com,1434;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;Database=RDSDB
Дело в разрешениях внутри экземпляра MS SQL. Вы должны перейти в SQL → Безопасность → Учетные записи → RemoteAppBrokersGroup → Свойства → Securables → Создать любую базу данных (вы не получите этот флажок автоматически при назначении разрешений dbcreate)
Потратил некоторое время на эту ошибку, и в моем случае проблема была с именем учетной записи входа в Windows Authentication. Общая рекомендация заключается в том, чтобы добавить сервер брокера RD в группу безопасности, но в моем случае сервер, добавленный в встроенную группу “Серверы управления RDS”, просто не был распространен на базу данных, и вновь созданная группа просто не работала по неизвестной причине. Указание имени компьютера напрямую как DOMAIN\Server$
работает даже несмотря на то, что выбор компьютера недоступен через “Обзор”.
Итак, вот правильный рабочий процесс, который сработал с Server 2016 и SQL 2019:
- Создайте пустую базу данных
- Создайте новую учетную запись и добавьте сервер брокера RD как
DOMAIN\Server$
(просто введите, не нажимайте “Поиск…”) - В учетной записи под сопоставлением пользователей выберите новую БД и роль db_owner
- На сервере брокера RD установите последнюю версию ODBC (v18 работает)
- В мастере брокера RD выберите выделенный сервер
Строка подключения:
Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;App=Remote Desktop Services Connection Broker;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;
Было подтверждено, что:
- Путь к файлам базы данных не требуется
- Нет необходимости указывать “Создать любую базу данных” в качестве securable
- Нативный SQL клиент (SNAC) не требуется и даже не возможен на Server 2016+
Вот скрипт PowerShell для тестирования строки подключения. Мастер брокера всегда показывает одну и ту же ошибку по какой-то причине (теплый привет Microsoft…), поэтому скрипт оказался полезным для выявления реальных проблем, таких как синтаксис строки или настройки шифрования на SQL сервере:
# Определить строку подключения
$connectionString = @"
Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;App=Remote Desktop Services Connection Broker;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;
"@
# Запрос для тестирования соединения
$query = "SELECT TOP 1 * FROM sys.tables"
# Создать соединение
try {
$connection = New-Object System.Data.Odbc.OdbcConnection $connectionString
$command = New-Object System.Data.Odbc.OdbcCommand $query, $connection
# Открыть соединение
$connection.Open()
Write-Host "Соединение успешно!" -ForegroundColor Green
# Выполнить запрос
$reader = $command.ExecuteReader()
if ($reader.HasRows) {
while ($reader.Read()) {
Write-Host ("Имя таблицы: {0}" -f $reader.GetValue(0))
}
} else {
Write-Host "В базе данных не найдено таблиц." -ForegroundColor Yellow
}
# Закрыть соединение
$reader.Close()
$connection.Close()
} catch {
Write-Host "Не удалось подключиться!" -ForegroundColor Red
Write-Host "Ошибка: $($_.Exception.Message)" -ForegroundColor Red
}
Ответ или решение
Проблемы с подключением к базе данных для RDS Connection Broker в режиме высокой доступности
Введение
Конфигурация службы удаленных рабочих столов (Remote Desktop Services) требует уверенности в том, что все компоненты правильно настроены для обеспечения стабильной работы. Одна из распространённых проблем, с которой сталкиваются администраторы, заключается в возникновении ошибок подключения к базе данных при настройке RD Connection Broker в режиме высокой доступности. В этой статье мы подробно рассмотрим общие ошибки, причины их возникновения и возможные решения.
Описание проблемы
При попытке настроить RD Connection Broker в режиме высокой доступности, вы можете столкнуться с сообщением об ошибке, указывающим, что "база данных, указанная в строке подключения, недоступна с сервера RD Connection Broker". Это может происходить независимо от того, что все необходимые предварительные условия, такие как доступность базы данных и корректная установка SQL-драйвера, кажутся выполненными.
Примеры ошибок:
-
Ошибка в графическом интерфейсе:
"The database specified in the database connection string is not available from the RD Connection Broker server…"
-
Ошибка в PowerShell:
"The database specified in the connection string is not available from the RD Connection Broker server RDS-01.CONTOSO.COM…"
Диагностика проблемы
Несмотря на уверенность в том, что все настройки выполнены правильно, отсутствие попыток подключения к SQL-серверу может указывать на проблему с путём к базе данных. Стандартная практика, основываясь на документации Microsoft, подразумевает, что путь к папке базы данных является необязательным параметром. Однако в реальности это может быть не так.
Что проверить:
- Убедитесь, что сервер доступен по сети (пинговка SQL-сервера).
- Проверьте, что пользовательская учетная запись, под которой работает RD Connection Broker, имеет необходимые права на создание и изменение баз данных.
- Убедитесь, что SQL-драйвер установлен на всех серверах RD Connection Broker.
Решение проблемы
1. Укажите путь к базе данных
Исходя из полученного опыта, добавление явного пути к базе данных может решать указанные проблемы. Например, даже если ваш SQL Server настроен на использование определённого пути для хранения баз данных, явно укажите его в вашей строке подключения:
Set-RDConnectionBrokerHighAvailability -ClientAccessName "rds.contoso.com" -DatabaseConnectionString "DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=rdscbha;DatabaseFilePath=C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA"
2. Настройка прав доступа
Важно, чтобы учетные записи компьютеров, на которых работает RD Connection Broker, были присоединены к группе с правами db_owner
на созданной базе данных. Если база данных уже создана, выполните следующие действия:
- Откройте SQL Server Management Studio.
- Перейдите в раздел «Безопасность» -> «Логины».
- Выберите вашу учетную запись RD Connection Broker и убедитесь, что она имеет необходимые права.
3. Используйте актуальные драйвера
Всегда следите за актуальностью установленных драйверов. Использование наиболее свежего драйвера ODBC может устранить проблемы, связанные совместимостью:
Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;
Заключение
Настройка RD Connection Broker в режиме высокой доступности может быть сложной задачей, особенно когда возникают проблемы с подключением к базе данных. Убедитесь, что все необходимые предварительные условия выполнены, и не пренебрегайте добавлением пути к базе данных в строку подключения. Настройка прав доступа и использование актуальных драйверов будут способствовать успешной интеграции с SQL Server.
При возникновении дополнительных сложностей используйте PowerShell для тестирования соединений с базой данных, что поможет выявить проблемы конфигурации.
Следуя приведенным рекомендациям, вы сможете устранить ошибки подключения и обеспечить надежную работу вашей системы удаленных рабочих столов.