17

我正在使用 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];

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

此版本的 SQL Server 不支持安全类“服务器”。

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

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

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

编辑:

  • 以超级用户身份运行服务器可以正常工作,但只会为 master 和 tempdb 生成指标。我需要许多应用程序数据库的指标,但它们丢失了。加上以超级用户身份运行并不理想。
  • 以服务器的超级用户身份运行但连接到特定应用程序数据库(在连接字符串中添加数据库)崩溃并导致 nil 指针取消引用,并且日志抱怨数据库主服务器中的 VIEW DATABASE STATE 权限被拒绝(超级用户有权访问,但显然不是在连接到特定数据库时)。
  • 将 VIEW DATABASE 和 VIEW DEFINITION 授予应用程序数据库中的 telegraf 并直接连接到该数据库,因为 telegraf 因 nil 指针取消引用而崩溃,并且日志显示连接已关闭。

编辑2:

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

编辑 3:

从最新版本开始,如果使用服务器管理员帐户,该插件可以工作,因此问题已得到解决。在 Azure DB 中仍然无法使用特权较低的帐户运行。

4

1 回答 1

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 权限在数据库“主”中被拒绝

可能的解决方法:(也就是说,无论如何在 ewramner 情况下都不起作用)

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

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

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

于 2018-06-04T12:57:21.113 回答