Как я могу проверить параметры безопасности конечной точки SQL Server?

10

Я нахожусь в процессе создания среды TEST для наших сотрудников по разработке SQL Server.

В производственном процессе у нас есть 3 SQL-сервера, которые SQL01содержат несколько баз данных, которые зеркалируются SQL02. SQL03выступает в качестве свидетеля в режиме «высокой безопасности с автоматическим переключением при отказе» или синхронной конфигурации.

Я использовал VMWare P2V для виртуализации всех трех машин на отдельном оборудовании, перенастроил SID этих машин и вычеркнул IP-адреса наших производственных серверов с этих новых машин.

Изначально я забыл черную дыру на машине-свидетеле производства, поэтому базы данных на машинах TEST все еще использовали эту SQL03машину в качестве свидетеля. Заметив проблему, я решил перенастроить базы данных на TEST, чтобы указать на недавно виртуализированного свидетеля TEST, позвонив ему TEST03.

Чтобы перенастроить базу данных для использования нового свидетеля, я ввел следующую команду на Первичном сервере TEST01:

ALTER DATABASE [TestDB] SET WITNESS = 'TCP://TEST03.domain.inet:5022';

Ответ был неожиданным:

The ALTER DATABASE command could not be sent to the remote server instance
'TCP://TEST03.domain.inet:5022'.  The database mirroring configuration was
not changed.  Verify that the server is connected, and try again.

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

Чтобы заставить это работать, мне нужно было создать LOGINтестового свидетеля:

CREATE LOGIN [DOMAIN\SQLServiceAccount] FOR WINDOWS WITH DEFAULT_DATABASE [Master];

и GRANTэто CONNECTправа на конечную точку в вопросе:

GRANT CONNECT ON ENDPOINT::Mirroring TO [DOMAIN\SQLServiceAccount];

Затем я смог успешно указать зеркальные базы данных в среде TEST на нового свидетеля-тестера.

Как я могу проверить конечную точку свидетеля производства, чтобы увидеть, с чем связана безопасность?

Я предполагаю, что должен быть какой-то системный каталог, который я могу проверить, однако в Books-on-Line, похоже, нет ничего конкретного для конечных точек, и Bing - это хорошо, Bingless ...


Дополнительная информация:

SELECT ep.endpoint_id, p.class_desc, p.permission_name, ep.name, sp.name 
FROM sys.server_permissions p
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantee_principal_id = sp.principal_id
WHERE class = '105';

возвращает:

endpoint_id class_desc  permission_name endpoint_name   principal_name
2           ENDPOINT    CONNECT TSQL    Local Machine   public
3           ENDPOINT    CONNECT TSQL    Named Pipes     public
4           ENDPOINT    CONNECT TSQL    Default TCP     public
5           ENDPOINT    CONNECT TSQL    Default VIA     public

И:

SELECT name, endpoint_id, protocol_desc, type_desc, role_desc 
FROM sys.database_mirroring_endpoints;

Возвращает:

name        endpoint_id  protocol_desc  type_desc           role_desc 
Mirroring   65536        TCP            DATABASE_MIRRORING  WITNESS

Кажется, что нет никакой записи sys.server_permissionsдля объекта конечной точки зеркального отображения. Нет major_idи нет minor_idсовпадений 65536. Кроме того, ни одна из системных баз данных не содержит ссылок на конечную точку.

Я в растерянности.

Макс Вернон
источник

Ответы:

7

Потратив часть времени на перемещение зеркальных баз данных с сервера на сервер в нашей среде DEV в рамках подготовки к нашему переходу на SQL Server 2012, я наткнулся на этот документ MSDN, в котором объясняется, что безопасность ENDPOINT определяется исключительно на основе типа учетной записи. SQL Server работает под. Если SQL Server использует учетную запись домена, эта учетная запись автоматически получает доступ к конечной точке. Если SQL Server использует встроенную учетную запись, такую ​​как [Сетевая служба] или [Локальная система] и т. Д., Конечная точка должна быть настроена с сертификатом безопасности, и только владельцы сертификата могут получить доступ к конечной точке.

Соответствующий раздел из документа:

Определение типа аутентификации для конечной точки зеркального отображения базы данных

Важно понимать, что учетные записи служб SQL Server экземпляров вашего сервера определяют тип аутентификации, который вы можете использовать для конечных точек зеркального отображения базы данных, следующим образом:

Если каждый экземпляр сервера выполняется под учетной записью службы домена, вы можете использовать проверку подлинности Windows для конечных точек зеркального отображения базы данных. Если все экземпляры сервера работают под одной и той же учетной записью пользователя домена, правильные логины пользователей автоматически существуют в обеих основных базах данных. Это упрощает настройку безопасности для баз данных доступности и рекомендуется.

Если какие-либо экземпляры сервера, на которых размещаются реплики доступности для группы доступности, работают под разными учетными записями, то для каждой учетной записи необходимо создать учетную запись в master на другом экземпляре сервера. Затем этому имени входа должны быть предоставлены разрешения CONNECT для подключения к конечной точке зеркального отображения базы данных этого экземпляра сервера.

Если экземпляры вашего сервера используют проверку подлинности Windows, вы можете создать конечные точки зеркального отображения базы данных с помощью Transact-SQL, PowerShell или мастера создания новой группы доступности.

Примечание:

Если в экземпляре сервера, на котором размещается реплика доступности, отсутствует конечная точка зеркального отображения базы данных, мастер создания новой группы доступности может автоматически создать конечную точку зеркального отображения базы данных, использующую проверку подлинности Windows.

Если какой-либо экземпляр сервера работает под встроенной учетной записью, например, «Локальная система», «Локальная служба» или «Сетевая служба», или с учетной записью не домена, необходимо использовать сертификаты для проверки подлинности конечной точки. Если вы используете сертификаты для конечных точек зеркального отображения базы данных, системный администратор должен настроить каждый экземпляр сервера на использование сертификатов как для исходящих, так и для входящих подключений.

Не существует автоматизированного метода настройки безопасности зеркального отображения базы данных с использованием сертификатов. Вам нужно будет использовать либо инструкцию CREATE ENDPOINT Transact-SQL, либо командлет New-SqlHadrEndpoint PowerShell. Для получения дополнительной информации см. CREATE ENDPOINT (Transact-SQL).

Ремус Русану (в своем ответе) правильно определил, как определить безопасность на конечной точке зеркального отображения; как в:

SELECT ep.name, sp2.name AS Grantee, sp.name AS Grantor, p.permission_name, ep.state_desc
FROM sys.server_permissions p 
    INNER JOIN sys.endpoints ep ON p.major_id = ep.endpoint_id
    INNER JOIN sys.server_principals sp ON p.grantor_principal_id = sp.principal_id
    INNER JOIN sys.server_principals sp2 ON p.grantee_principal_id = sp2.principal_id
WHERE p.class_desc = 'ENDPOINT' AND ep.type_desc = 'DATABASE_MIRRORING'

Однако в моем случае на SQL Server 2005 исходные конечные точки зеркального отображения не отображаются в результатах этого запроса - я предполагаю, что это потому, что их безопасность по умолчанию разрешает доступ CONNECT к учетной записи, под которой работает SQL Server (как описано выше).

Таким образом, канонический ответ на вопрос, откуда вы знаете, кто имеет доступ CONNECT к ENDPOINT, представляет собой сумму запроса, приведенного выше, и учетную запись, которую использует SQL Server, а также любые возможные сертификаты, настроенные вами для доступа к конечной точке. ,

Макс Вернон
источник
4

Мне просто довелось установить это для базы данных в рабочем состоянии, и я подумал о том же, потому что мне нужно было сравнить конфигурацию с другим сеансом зеркального отображения, чтобы убедиться, что я соответствовал ей правильно.

sys.dm_db_mirroring_connectionsдолжен предоставить вам, что вы хотите. Он содержит то, principal_nameчто:

Имя логина, который был проверен для разрешений на подключение. Для аутентификации Windows это значение - имя удаленного пользователя. Для проверки подлинности сертификата это значение является владельцем сертификата.

Если вы работаете с сеансом, который приостановлен, хотя я не уверен, что он все равно вернет информацию, полагайте, что он имеет только активные соединения.


источник
Спасибо, Шон. Это, безусловно, показывает имя удаленного пользователя, фактически подключенного к конечной точке, однако на самом деле это не дает ответа на вопрос о том, какие настройки безопасности позволяют этому пользователю подключаться в рабочей среде, но не в тестовой. Я все равно ценю помощь!
Макс Вернон
3

См. Книжную онлайн-документацию для sys.database_mirroring_endpoints

Для разрешения объекта сервера вы смотрите в обычном месте sys.server_permissions. Как и в каждом случае, когда речь идет о безопасности Windows, все усложняется из-за членства в группах окон, и вам также необходимо учитывать иерархию разрешений .

Ремус Русану
источник
Я посмотрел на это, однако, что мне нужно, это список логинов, которые имеют доступ CONNECT к конечной точке. sys.database_mirroring_endpoints, кажется, не показывает это - если я что-то упустил!
Макс Вернон
1
Для разрешения объекта сервера вы смотрите в обычном месте sys.server_permissions. Как и в каждом случае, когда речь идет о безопасности Windows, все усложняется из-за членства в группах окон, и вам также необходимо учитывать иерархию разрешений .
Ремус Русану
3
Есть ли шанс, что вы могли бы уточнить это немного в самом ответе?
Jcolebrand