Amazon RDS for SQL Server 中的 SQL Server Reporting Services 支持 - Amazon Relational Database Service

Amazon RDS for SQL Server 中的 SQL Server Reporting Services 支持

Microsoft SQL Server Reporting Services (SSRS) 是一个基于服务器的应用程序,用于生成和分发报告。它是 SQL Server 服务套件的一部分,其中还包括 SQL Server Analysis Services (SSAS) 和 SQL Server Integration Services (SSIS)。SSRS 是在 SQL Server 之上构建的服务。您可以使用它从各种数据源收集数据,并以易于理解和直接可供分析的方式呈现。

Amazon RDS for SQL Server 支持直接在 RDS 数据库实例上运行 SSRS。您可以将 SSR 用于现有或新的数据库实例。

RDS 在以下版本上对于 SQL Server 标准版和企业版支持 SSRS:

  • SQL Server 2019,版本 15.00.4043.16.v1 和更高版本

  • SQL Server 2017,版本 14.00.3223.3.v1 和更高版本

  • SQL Server 2016,版本 13.00.5820.21.v1 和更高版本

限制和建议

以下限制和建议适用于在 RDS for SQL Server 上运行 SSRS:

  • 您不能在具有只读副本的数据库实例上使用 SSRS。

  • 实例必须为 SSRS Web 门户和 Web 服务器身份验证使用 AWS Managed Microsoft AD。

  • 不支持从 SSRS 的其他实例导入和恢复报告服务器数据库。

    确保使用在将 SSRS 选项添加到 RDS 数据库实例时创建的数据库。有关更多信息,请参阅“报告服务器数据库”。

  • 您无法将 SSRS 配置为侦听默认 SSL 端口 (443)。允许的值为 1150–49511,但不包括 1234、1434、3260、3343、3389 和 47001。

  • 不支持通过 Microsoft Windows 文件共享进行订阅。

  • 不支持使用报告服务配置管理器。

  • 不支持创建和修改角色。

  • 不支持修改报告服务器属性。

  • 未授予系统管理员和系统用户角色。

  • 无法通过 Web 门户编辑系统级角色分配。

开启 SSRS

使用以下过程为数据库实例开启 SSRS:

  1. 创建新的选项组或选择现有的选项组。

  2. SSRS 选项添加到该选项组。

  3. 将选项组与数据库实例相关联。

  4. 允许对 SSRS 侦听器端口的 Virtual Private Cloud (VPC) 安全组进行入站访问。

为 SSRS 创建选项组

要使用 SSRS,请创建对应于计划使用的 SQL Server 引擎和数据库实例版本的选项组。为此,请使用 AWS Management Console或 AWS CLI。

注意

如果现有选项组针对的是正确的 SQL Server 引擎和版本,也可以使用现有选项组。

以下过程创建适用于 SQL Server 标准版 2017 的选项组。

创建选项组
  1. 登录AWS Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择选项组

  3. 选择创建组

  4. 创建选项组窗格中,执行以下操作:

    1. 对于 Name(名称),输入选项组的名称,该名称在 AWS 账户内具有唯一性,例如 ssrs-se-2017。此名称只能包含字母、数字和连字符。

    2. 对于描述,输入选项组的简要描述,例如 SSRS option group for SQL Server SE 2017。此说明用于显示说明。

    3. 对于引擎,选择 sqlserver-se

    4. 对于主引擎版本,选择 14.00

  5. 选择 Create (创建)

以下过程创建适用于 SQL Server 标准版 2017 的选项组。

创建选项组
  • 运行以下命令之一。

对于 Linux、macOS 或 Unix:

aws rds create-option-group \ --option-group-name ssrs-se-2017 \ --engine-name sqlserver-se \ --major-engine-version 14.00 \ --option-group-description "SSRS option group for SQL Server SE 2017"

对于 Windows:

aws rds create-option-group ^ --option-group-name ssrs-se-2017 ^ --engine-name sqlserver-se ^ --major-engine-version 14.00 ^ --option-group-description "SSRS option group for SQL Server SE 2017"

将 SSRS 选项添加到选项组

接下来,使用 AWS Management Console或 AWS CLI 将 SSRS 选项添加到您的选项组。

添加 SSRS 选项
  1. 登录AWS Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择选项组

  3. 选择刚创建的选项组,然后选择 Add Option(添加选项)。

  4. 选项详细信息下,为选项名称选择 SSRS

  5. 选项设置下,执行以下操作:

    1. 输入 SSRS 服务要侦听的端口。默认值为 8443。有关允许值的列表,请参阅 限制和建议

    2. 输入最大内存的值。

      最大内存指定阈值上限,超过该阈值后,不会允许报告服务器应用程序的新内存分配请求。该数字是占数据库实例总内存的百分比。允许的值为 10–80。

    3. 对于 Security groups (安全组),请选择要与选项关联的 VPC 安全组。使用与您数据库实例关联的相同安全组。

  6. 要使用 SSRS 电子邮件发送报告,选择 Email delivery in reporting services(报告服务中的电子邮件递送)下的 Configure email delivery options(配置电子邮件递送选项)复选框,然后执行以下操作:

    1. 对于 Sender email address(发件人电子邮件地址),在 SSRS 电子邮件发送的邮件的 From(发件人)字段中输入要使用的电子邮件地址。

      指定有权从 SMTP 服务器发送邮件的用户账户。

    2. 对于 SMTP server(SMTP 服务器),请指定要使用的 SMTP 服务器或网关。

      它可以是 IP 地址、公司内部网中计算机的 NetBIOS 名称或完全限定域名。

    3. 对于 SMTP port(SMTP 端口),输入要用于连接到邮件服务器的端口。默认值为 25。

    4. 要使用身份验证:

      1. 选择 Use authentication(使用身份验证)复选框。

      2. 对于 Secret Amazon Resource Name (ARN) [密钥 Amazon 资源名称(ARN)],输入用户凭证的 AWS Secrets Manager ARN。

        使用以下格式:

        arn:aws:secretsmanager:Region:AccountId:secret:SecretName-6RandomCharacters

        例如:

        arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3

        有关创建密钥的更多信息,请参阅使用 SSRS 电子邮件发送报告

    5. 选中 Use Secure Sockets Layer (SSL) [使用安全套接字层 (SSL)] 复选框可使用 SSL 加密电子邮件。

  7. 计划 (Scheduling) 下,选择是立即添加选项还是在下一个维护时段添加选项。

  8. 选择添加选项

添加 SSRS 选项
  1. 创建 JSON 文件,例如:ssrs-option.json

    1. 设置以下必需参数:

      • OptionGroupName – 您之前创建或选择的选项组的名称(以下示例中的 ssrs-se-2017)。

      • Port – SSRS 服务要侦听的端口。默认值为 8443。有关允许值的列表,请参阅 限制和建议

      • VpcSecurityGroupMemberships – RDS 数据库实例的 VPC 安全组成员。

      • MAX_MEMORY – 阈值上限,超过该阈值后,不会允许报告服务器应用程序的新内存分配请求。该数字是占数据库实例总内存的百分比。允许的值为 10–80。

    2. (可选)设置以下参数以使用 SSRS 电子邮件:

      • SMTP_ENABLE_EMAIL – 设置为 true 以使用 SSRS 电子邮件。默认为 false

      • SMTP_SENDER_EMAIL_ADDRESS – SSRS 电子邮件发送的邮件的 From(发件人)字段中要使用的电子邮件地址。指定有权从 SMTP 服务器发送邮件的用户账户。

      • SMTP_SERVER_NAME – 要使用的 SMTP 服务器或网关。它可以是 IP 地址、公司内部网中计算机的 NetBIOS 名称或完全限定域名。

      • SMTP_PORT – 用于连接到邮件服务器的端口。默认值为 25。

      • SMTP_USE_SSL – 设置为 true 以使用 SSL 加密电子邮件。默认为 true

      • SMTP_EMAIL_CREDENTIALS_SECRET_ARN – 用于保存用户凭证的 Secrets Manager ARN。采用以下格式:

        arn:aws:secretsmanager:Region:AccountId:secret:SecretName-6RandomCharacters

        有关创建密钥的更多信息,请参阅使用 SSRS 电子邮件发送报告

      • SMTP_USE_ANONYMOUS_AUTHENTICATION – 设置为 true,如果不想使用身份验证,则不包括 SMTP_EMAIL_CREDENTIALS_SECRET_ARN

        SMTP_ENABLE_EMAILtrue 时,原定设置值为 false

    以下示例包含使用密钥 ARN 的 SSRS 电子邮件参数。

    { "OptionGroupName": "ssrs-se-2017", "OptionsToInclude": [ { "OptionName": "SSRS", "Port": 8443, "VpcSecurityGroupMemberships": ["sg-0abcdef123"], "OptionSettings": [ {"Name": "MAX_MEMORY","Value": "60"}, {"Name": "SMTP_ENABLE_EMAIL","Value": "true"} {"Name": "SMTP_SENDER_EMAIL_ADDRESS","Value": "nobody@example.com"}, {"Name": "SMTP_SERVER_NAME","Value": "email-smtp.us-west-2.amazonaws.com"}, {"Name": "SMTP_PORT","Value": "25"}, {"Name": "SMTP_USE_SSL","Value": "true"}, {"Name": "SMTP_EMAIL_CREDENTIALS_SECRET_ARN","Value": "arn:aws:secretsmanager:us-west-2:123456789012:secret:MySecret-a1b2c3"} ] }], "ApplyImmediately": true }
  2. SSRS 选项添加到该选项组。

    对于 Linux、macOS 或 Unix:

    aws rds add-option-to-option-group \ --cli-input-json file://ssrs-option.json \ --apply-immediately

    对于 Windows:

    aws rds add-option-to-option-group ^ --cli-input-json file://ssrs-option.json ^ --apply-immediately

将选项组与数据库实例关联

使用 AWS Management Console 或 AWS CLI 将您的选项组与数据库实例关联。

如果您使用现有数据库实例,则该实例必须已经关联了 Active Directory 域和 AWS Identity and Access Management (IAM) 角色。如果您创建新实例,请指定现有的 Active Directory 域和 IAM 角色。有关更多信息,请参阅 将 Windows 身份验证与 Amazon RDS for SQL Server 数据库实例结合使用

您可将您的选项组与新的或现有的数据库实例关联:

您可将您的选项组与新的或现有的数据库实例关联。

创建使用选项组的数据库实例
  • 指定创建选项组时使用的相同数据库引擎类型和主要版本。

    对于 Linux、macOS 或 Unix:

    aws rds create-db-instance \ --db-instance-identifier myssrsinstance \ --db-instance-class db.m5.2xlarge \ --engine sqlserver-se \ --engine-version 14.00.3223.3.v1 \ --allocated-storage 100 \ --master-user-password secret123 \ --master-username admin \ --storage-type gp2 \ --license-model li \ --domain-iam-role-name my-directory-iam-role \ --domain my-domain-id \ --option-group-name ssrs-se-2017

    对于 Windows:

    aws rds create-db-instance ^ --db-instance-identifier myssrsinstance ^ --db-instance-class db.m5.2xlarge ^ --engine sqlserver-se ^ --engine-version 14.00.3223.3.v1 ^ --allocated-storage 100 ^ --master-user-password secret123 ^ --master-username admin ^ --storage-type gp2 ^ --license-model li ^ --domain-iam-role-name my-directory-iam-role ^ --domain my-domain-id ^ --option-group-name ssrs-se-2017
修改数据库实例以使用选项组
  • 运行以下命令之一。

    对于 Linux、macOS 或 Unix:

    aws rds modify-db-instance \ --db-instance-identifier myssrsinstance \ --option-group-name ssrs-se-2017 \ --apply-immediately

    对于 Windows:

    aws rds modify-db-instance ^ --db-instance-identifier myssrsinstance ^ --option-group-name ssrs-se-2017 ^ --apply-immediately

允许对 VPC 安全组的入站访问

要允许对与您数据库实例关联的 VPC 安全组的入站访问,请为指定的 SSRS 侦听器端口创建入站规则。有关设置安全组的更多信息,请参阅通过创建安全组提供对 VPC 中的数据库实例的访问

报告服务器数据库

当您的数据库实例与 SSRS 选项关联时,将在您的数据库实例上创建两个新的数据库:rdsadmin_ReportServer 和 rdsadmin_ReportServerTempDB。这些数据库充当 ReportServer 和 ReportServerTempDB 数据库。SSRS 将其数据存储在 ReportServer 数据库中,并将其数据缓存在 ReportServerTempDB 数据库中。

RDS 拥有和管理这些数据库,因此不允许对它们进行 ALTER 和 DROP 等数据库操作。但是,您可以对 rdsadmin_ReportServer 数据库执行读取操作。

SSRS 日志文件

您可以访问 ReportserverService_timestamp.log 文件。可以在 D:\rdsdbdata\Log\SSRS 目录中找到这些报表服务器日志。(D:\rdsdbdata\Log 目录也是错误日志和 SQL Server 代理日志的父目录。)

对于现有 SSRS 实例,可能需要重启 SSRS 服务才能访问报表服务器日志。可以通过更新 SSRS 选项来重启服务。

有关更多信息,请参阅使用 Microsoft SQL Server 日志

访问 SSRS Web 门户

使用以下过程访问 SSRS Web 门户:

  1. 开启安全套接字层(SSL)。

  2. 将访问权限授予域用户。

  3. 使用浏览器和域用户凭证访问 Web 门户。

在 RDS 上使用 SSL

SSRS 为其连接使用 HTTPS SSL 协议。若要使用此协议,请将 SSL 证书导入客户端计算机上的 Microsoft Windows 操作系统。

有关 SSL 证书的更多信息,请参阅使用 SSL/TLS 加密与数据库实例的连接。有关将 SSL 与 SQL Server 一起使用的更多信息,请参阅将 SSL 与 Microsoft SQL Server 数据库实例结合使用

将访问权限授予域用户

在新的 SSRS 激活中,SSRS 中没有角色分配。为了授予域用户或用户组访问 Web 门户的访问权限,RDS 提供了一个存储过程。

向 Web 门户上的域用户授予访问权限
  • 使用以下存储过程。

    exec msdb.dbo.rds_msbi_task @task_type='SSRS_GRANT_PORTAL_PERMISSION', @ssrs_group_or_username=N'AD_domain\user';

向域用户或用户组授予 RDS_SSRS_ROLE 系统角色。此角色授予了以下系统级任务:

  • 运行报告

  • 管理作业。

  • 管理共享计划

  • 查看共享计划

还授予根文件夹上 Content Manager 的项目级角色。

访问 Web 门户

SSRS_GRANT_PORTAL_PERMISSION 任务成功完成后,您具有使用 Web 浏览器访问门户的权限。Web 门户 URL 的格式如下。

https://rds_endpoint:port/Reports

在此格式中,以下项适用:

访问 Web 门户
  1. 在浏览器中输入 Web 门户网址。

    https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/Reports
  2. 使用您通过 SSRS_GRANT_PORTAL_PERMISSION 任务授予访问权限的域用户的凭证登录。

将报告部署到 SSRS

访问 Web 门户后,您可以将报告部署到其中。您可以使用 Web 门户中的上传工具来上传报告,或直接从 SQL Server Data Tools (SSDT) 部署。从 SSDT 部署时,请确保以下各项:

  • 启动 SSDT 的用户可以访问 SSRS Web 门户。

  • SSRS 项目属性中的 TargetServerURL 值设置为带 ReportServer 后缀的 RDS 数据库实例的 HTTPS 终端节点,例如:

    https://myssrsinstance.cg034itsfake.us-east-1.rds.amazonaws.com:8443/ReportServer

使用 SSRS 电子邮件发送报告

SSRS 包括 SSRS 电子邮件扩展,您可以使用它向用户发送报告。

要配置 SSRS 电子邮件,请使用 SSRS 选项设置。有关更多信息,请参阅将 SSRS 选项添加到选项组

配置 SSRS 电子邮件后,您可以在报告服务器上订阅报表。有关更多信息,请参阅 Microsoft 文档中的报告服务中的电子邮件递送

与 AWS Secrets Manager 集成是 SSRS 电子邮件在 RDS 上运行所必需的。要与 Secrets Manager 集成,您需要创建密钥。

注意

如果您稍后更改密钥,则还必须更新选项组中的 SSRS 选项。

为 SSRS 电子邮件创建密钥
  1. 按照《AWS Secrets Manager 用户指南》中创建密钥的步骤操作。

    1. 对于选择密钥类型,选择其他密钥类型

    2. 对于 Key/value pairs(键值对),输入以下内容:

      • SMTP_USERNAME – 输入有权从 SMTP 服务器发送邮件的用户。

      • SMTP_PASSWORD – 输入 SMTP 用户的密码。

    3. 对于 Encryption key(加密密钥),不要使用原定设置 AWS KMS key。使用您自己的现有密钥,或创建新密钥。

      KMS 密钥策略必须允许 kms:Decrypt 操作,例如:

      { "Sid": "Allow use of the key", "Effect": "Allow", "Principal": { "Service": [ "rds.amazonaws.com" ] }, "Action": [ "kms:Decrypt" ], "Resource": "*" }
  2. 按照《AWS Secrets Manager 用户指南》中的将权限策略附加到密钥中的步骤进行操作。权限策略将 secretsmanager:GetSecretValue 操作提供给 rds.amazonaws.com 服务主体。

    我们建议您在策略中使用 aws:sourceAccountaws:sourceArn 条件,以避免出现混淆代理人问题。将您的 AWS 账户用于 aws:sourceAccount,并将选项组 ARN 用于 aws:sourceArn。有关更多信息,请参阅防范跨服务混淆代理问题

    下面显示了一个示例权限策略。

    { "Version" : "2012-10-17", "Statement" : [ { "Effect" : "Allow", "Principal" : { "Service" : "rds.amazonaws.com" }, "Action" : "secretsmanager:GetSecretValue", "Resource" : "*", "Condition" : { "StringEquals" : { "aws:sourceAccount" : "123456789012" }, "ArnLike" : { "aws:sourceArn" : "arn:aws:rds:us-west-2:123456789012:og:ssrs-se-2017" } } } ] }

    有关更多示例,请参阅《AWS Secrets Manager 用户指南》中的权限策略示例

撤销系统级权限

RDS_SSRS_ROLE 系统角色没有足够的权限来删除系统级角色分配。要从 RDS_SSRS_ROLE 中删除用户或用户组,请使用在授予角色时使用的相同存储过程,但使用 SSRS_REVOKE_PORTAL_PERMISSION 任务类型。

撤消域用户对 Web 门户的访问权限
  • 使用以下存储过程。

    exec msdb.dbo.rds_msbi_task @task_type='SSRS_REVOKE_PORTAL_PERMISSION', @ssrs_group_or_username=N'AD_domain\user';

执行此操作将从 RDS_SSRS_ROLE 系统角色中删除用户。如果用户有 Content Manager 项目级角色,则还会从其中删除该用户。

监控任务的状态

要跟踪您的授予或撤消任务的状态,请调用 rds_fn_task_status 函数。它获取两个参数。第一个参数应该始终为 NULL,因为它不适用于 SSRS。第二个参数接受任务 ID。

要查看所有任务的列表,请将第一个参数设置为 NULL,将第二个参数设置为 0,如以下示例所示。

SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,0);

要获取特定任务,请将第一个参数设置为 NULL,将第二个参数设置为任务 ID,如以下示例所示。

SELECT * FROM msdb.dbo.rds_fn_task_status(NULL,42);

rds_fn_task_status 函数将返回以下信息。

输出参数

描述

task_id

任务的 ID。

task_type

对于 SSRS,任务可以具有以下任务类型:

  • SSRS_GRANT_PORTAL_PERMISSION

  • SSRS_REVOKE_PORTAL_PERMISSION

database_name

不适用于 SSRS 任务。

% complete

用百分比表示的任务进度。

duration (mins)

在任务上花费的时间 (以分钟为单位)。

lifecycle

任务的状态。有以下可能状态:

  • CREATED 调用 SSRS 存储过程之一后,将创建一个任务并将状态设置为 CREATED

  • IN_PROGRESS – 任务开始后,状态将设置为 IN_PROGRESS。要将状态从 CREATED 更改为 IN_PROGRESS 可能需要最多 5 分钟的时间。

  • SUCCESS – 任务完成后,状态将设置为 SUCCESS

  • ERROR – 如果任务失败,状态将设置为 ERROR。有关错误的更多信息,请参阅 task_info 列。

  • CANCEL_REQUESTED – 在您调用 rds_cancel_task 存储过程后,任务的状态将设置为 CANCEL_REQUESTED

  • CANCELLED – 在成功取消任务后,任务的状态将设置为 CANCELLED

task_info

有关任务的其他信息。如果在处理过程中发生错误,则此列包含有关错误的信息。

last_updated

上次更新任务状态的日期和时间。

created_at

任务的创建日期和时间。

S3_object_arn

不适用于 SSRS 任务。

overwrite_S3_backup_file

不适用于 SSRS 任务。

KMS_master_key_arn

不适用于 SSRS 任务。

filepath

不适用于 SSRS 任务。

overwrite_file

不适用于 SSRS 任务。

task_metadata

与 SSRS 任务关联的元数据。

关闭 SSRS

要关闭 SSRS,请从其选项组中删除 SSRS 选项。删除该选项不会删除 SSRS 数据库。有关更多信息,请参阅删除 SSRS 数据库

您可以通过重新添加 SSRS 选项以再次开启 SSRS。如果您还删除了 SSRS 数据库,则在同一数据库实例上重新添加此选项会创建新的报告服务器数据库。

从其选项组中删除 SSRS 选项
  1. 登录AWS Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/

  2. 在导航窗格中,选择选项组

  3. 选择具有 SSRS 选项的选项组(在前面的示例中为 ssrs-se-2017)。

  4. 选择 Delete option (删除选项)

  5. 删除选项下,为待删除的选项选择 SSRS

  6. Apply immediately (立即应用) 下,选择 Yes (是) 可立即删除选项,选择 No (否) 可在下次维护时段时删除。

  7. 选择 Delete(删除)。

从其选项组中删除 SSRS 选项
  • 运行以下命令之一。

    对于 Linux、macOS 或 Unix:

    aws rds remove-option-from-option-group \ --option-group-name ssrs-se-2017 \ --options SSRS \ --apply-immediately

    对于 Windows:

    aws rds remove-option-from-option-group ^ --option-group-name ssrs-se-2017 ^ --options SSRS ^ --apply-immediately

删除 SSRS 数据库

删除 SSRS 选项不会删除报告服务器数据库。要删除数据库,请使用以下存储过程。

要删除报表服务器数据库,请务必先删除 SSRS 选项。

删除 SSRS 数据库
  • 使用以下存储过程。

    exec msdb.dbo.rds_drop_ssrs_databases