Какие гранты необходимы для подключаемого модуля SQL Server Telegraf в базе данных SQL Azure

Я использую входной плагин Telegraf для SQL Server ( https://github.com/influxdata/telegraf/tree/master/plugins/inputs/sqlserver) для сбора метрик и создания отчетов для InfluxDB. Он хорошо работает для SQL Server, но, хотя он поддерживает базу данных SQL Azure, документация немного скудна.

Пользователь базы данных должен быть создан так:

CREATE LOGIN [telegraf] WITH PASSWORD = N'password';
GRANT VIEW SERVER STATE TO [telegraf];
GRANT VIEW ANY DEFINITION TO [telegraf];

Это работает на SQL Server, но в Azure происходит сбой:

Защищаемый класс 'server' не поддерживается в этой версии SQL Server.

Интересно, что мне нужно вместо этого дать, чтобы решить это наилучшим образом? У нас есть большое количество баз данных, работающих на одном сервере в эластичном пуле, поэтому, если это возможно, я бы хотел использовать одного пользователя, который входит в систему с мастером и собирает метрики для всех баз данных одновременно (как это работает) с SQL Server). Если это невозможно, я могу настроить несколько входов в систему и обрабатывать одну базу данных одновременно.

Возможно, я могу предоставить VIEW DEFINITION на уровне базы данных, но VIEW SERVER STATE похоже не поддерживается вообще.

Итак, как мне настроить логин базы данных SQL для Telegraf с помощью плагина SQL Server, чтобы он работал?

РЕДАКТИРОВАТЬ:

  • Запуск от имени суперпользователя на сервере работает без ошибок, но создает метрики только для master и tempdb. Мне нужны метрики для многих баз данных приложений, и они отсутствуют. Плюс работа в качестве супер пользователя не идеальна.
  • Запуск с правами суперпользователя на сервере, но подключение к конкретной базе данных приложения (добавление базы данных в строку подключения) приводит к сбою с разыменованием нулевого указателя, и журнал жалуется на разрешение VIEW DATABASE STATE, отклоненное в мастере базы данных (у суперпользователя есть доступ, но, по-видимому, не при подключении к специальной базе данных).
  • Предоставление VIEW DATABASE и VIEW DEFINITION телеграфу в базе данных приложения и прямое подключение к этой базе данных в случае сбоя телеграфа с разыменованием нулевого указателя и в журнале говорится, что соединение было закрыто.

РЕДАКТИРОВАТЬ 2:

Создан отчет об ошибке https://github.com/influxdata/telegraf/issues/4222.

1 ответ

Ответ: GRANT VIEW SERVER STATE не поддерживается в базе данных SQL Azure.

В SQL Database Premium Tiers требуется разрешение VIEW DATABASE STATE в базе данных. Разрешения не могут быть предоставлены в Master, но представления могут запрашиваться в пользовательских базах данных. В SQL Database Standard и Basic Tier требуется учетная запись администратора сервера базы данных SQL из-за требований безопасности, вытекающих из нескольких арендаторов этих уровней.

Причина: SQL Azure SQL - это решение PaaS, поэтому большинство "серверных" функций, DMV, настройки блокируются по назначению.

Рекомендации:

Предоставить представление состояния сервера - возможно ли, чтобы пользователь, не являющийся пользователем SA, имел доступ к Azure SQL?

SQL Azure VIEW DATABASE STATE отказано в доступе к базе данных "master"

Возможный обходной путь: (который в любом случае не работает в случае ewramner)

CREATE LOGIN [telegraf] WITH PASSWORD = N'password';

USE [yourDB]
GRANT VIEW DEFINITION TO [telegraf];
GRANT VIEW DATABASE STATE TO [telegraf];

Поэтому (ИМХО) невозможно заставить такое приложение работать в SQL Azure без изменения кода приложения.

Другие вопросы по тегам