Azure SQL数据库中的SQL Server Telegraf插件需要哪些授权

ewr*_*ner 16 sql-server azure-sql-database telegraf

我正在使用SQL Server的Telegraf输入插件(https://github.com/influxdata/telegraf/tree/master/plugins/inputs/sqlserver)来收集指标并向InfluxDB报告.它适用于SQL Server,但虽然它支持Azure SQL数据库,但文档有点稀疏.

应该像这样创建数据库用户:

CREATE LOGIN [telegraf] WITH PASSWORD = N'password';
GRANT VIEW SERVER STATE TO [telegraf];
GRANT VIEW ANY DEFINITION TO [telegraf];
Run Code Online (Sandbox Code Playgroud)

这适用于SQL Server,但在Azure中它失败:

此版本的SQL Server不支持安全类"服务器".

我想知道我需要批准什么才能以最好的方式解决这个问题.我们在弹性池中的同一台服务器上运行了大量数据库,所以如果可能的话,我想使用登录主服务器的单个用户,同时收集所有数据库的指标(工作方式)与SQL Server).如果这是不可能的,我可以配置多个登录并一次处理一个数据库.

也许我可以VIEW DEFINITION在数据库级别授予,但VIEW SERVER STATE似乎根本不受支持.

那么,我应该如何使用SQL Server插件为Telegraf配置SQL数据库登录以使其正常工作?

编辑:

  • 作为服务器的超级用户运行时没有错误,但只生成master和tempdb的度量标准.我需要许多应用程序数据库的指标,但它们都缺失了.另外,作为超级用户运行并不理想.
  • 作为服务器的超级用户运行但连接到特定的应用程序数据库(在连接字符串中添加数据库)使用nil指针解除引用崩溃,并且日志抱怨数据库主机中的VIEW DATABASE STATE权限被拒绝(超级用户有权访问,但显然连接到特定数据库时没有.
  • 授予VIEW数据库和查看定义到应用程序数据库中的telegraf并直接连接到该数据库,因为telegraf崩溃时使用nil指针取消引用,并且日志显示连接已关闭.

编辑2:

创建错误报告https://github.com/influxdata/telegraf/issues/4222.

Ale*_*lok 3

答案: GRANT VIEW SERVER STATE Azure SQL 数据库不支持。

在 SQL 数据库高级层上需要数据库中的 VIEW DATABASE STATE 权限。Master中无法授予权限,但可以在用户数据库中查询视图。在 SQL 数据库标准层和基本层上,由于这些层的多租户的安全要求,需要 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];
Run Code Online (Sandbox Code Playgroud)

因此,(恕我直言),如果不更改应用程序代码,就无法使此类应用程序在 SQL Azure 中运行