在 Amazon RDS 上使用 SSAS - Amazon Relational Database Service

在 Amazon RDS 上使用 SSAS

部署 SSAS 项目后,您可以直接在 SSMS 上处理 OLAP 数据库。

在 RDS 上使用 SSAS
  1. 在 SSMS 中,使用 Active Directory 域的用户名和密码连接到 SSAS。

  2. 展开 Databases (数据库)。此时将显示新部署的 SSAS 数据库。

  3. 找到连接字符串,再更新用户名和密码,以便有权访问源 SQL 数据库。处理 SSAS 对象必须要执行此操作。

    1. 针对表格模式执行以下操作:

      1. 展开 Connections(连接)选项卡。

      2. 打开连接对象的上下文(右键单击)菜单,然后选择 Properties(属性)。

      3. 更新连接字符串中的用户名和密码。

    2. 针对多维模式执行以下操作:

      1. 展开 Data Sources(数据源)选项卡。

      2. 打开数据源对象的上下文(右键单击)菜单,然后选择 Properties(属性)。

      3. 更新连接字符串中的用户名和密码。

  4. 打开您创建的 SSAS 数据库的上下文(右键单击)菜单,然后选择 Process Database (处理数据库)

    根据输入数据的大小,处理操作可能需要几分钟时间才能完成。

为 SSAS 设置经 Windows 身份验证的用户

主管理员用户(有时也被称为主用户)可以使用以下代码示例设置经 Windows 身份验证的登录并授予所需的过程权限。执行此操作可向域用户授予权限以运行 SSAS 客户任务、使用 S3 文件传输过程、创建凭证以及使用 SQL Server Agent 代理。有关更多信息,请参阅 Microsoft 文档中的凭证(数据库引擎)创建 SQL Server Agent 代理

您可以根据需要向经 Windows 身份验证的用户授予以下部分或所有权限。

-- Create a server-level domain user login, if it doesn't already exist USE [master] GO CREATE LOGIN [mydomain\user_name] FROM WINDOWS GO -- Create domain user, if it doesn't already exist USE [msdb] GO CREATE USER [mydomain\user_name] FOR LOGIN [mydomain\user_name] GO -- Grant necessary privileges to the domain user USE [master] GO GRANT ALTER ANY CREDENTIAL TO [mydomain\user_name] GO USE [msdb] GO GRANT EXEC ON msdb.dbo.rds_msbi_task TO [mydomain\user_name] with grant option GRANT SELECT ON msdb.dbo.rds_fn_task_status TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_task_status TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_cancel_task TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_download_from_s3 TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_upload_to_s3 TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_delete_from_filesystem TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_gather_file_details TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_add_proxy TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_update_proxy TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_grant_login_to_proxy TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_revoke_login_from_proxy TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_delete_proxy TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_enum_login_for_proxy to [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.sp_enum_proxy_for_subsystem TO [mydomain\user_name] with grant option GRANT EXEC ON msdb.dbo.rds_sqlagent_proxy TO [mydomain\user_name] with grant option ALTER ROLE [SQLAgentUserRole] ADD MEMBER [mydomain\user_name] GO

添加域用户作为数据库管理员

您可以通过以下方式,将域用户添加为 SSAS 数据库管理员:

  • 数据库管理员可以使用 SSMS 创建具有 admin 权限的角色,然后将用户添加到该角色。

  • 您可以使用以下存储过程。

    exec msdb.dbo.rds_msbi_task @task_type='SSAS_ADD_DB_ADMIN_MEMBER', @database_name='myssasdb', @ssas_role_name='exampleRole', @ssas_role_member='domain_name\domain_user_name';

    以下参数为必需参数:

    • @task_type – MSBI 任务的类型,在此例中为 SSAS_ADD_DB_ADMIN_MEMBER

    • @database_name – 要向其授予管理员特权的 SSAS 数据库的名称。

    • @ssas_role_name – SSAS 数据库管理员角色名称。如果角色尚不存在,则会创建它。

    • @ssas_role_member – 要添加到管理员角色的 SSAS 数据库用户。

创建 SSAS 代理

要先创建 SSAS 凭证和 SSAS 代理,才能使用 SQL Server Agent 来安排 SSAS 数据库处理。以经 Windows 身份验证的用户身份运行这些过程。

创建 SSAS 凭证
  • 为代理创建凭证。为此,您可以使用 SSMS 或以下 SQL 语句。

    USE [master] GO CREATE CREDENTIAL [SSAS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret' GO
    注意

    IDENTITY 必须是经域身份验证的登录名。将 mysecret 替换为经域身份验证的登录的密码。

创建 SSAS 代理
  1. 使用以下 SQL 语句创建代理。

    USE [msdb] GO EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSAS_Proxy',@credential_name=N'SSAS_Credential',@description=N'' GO
  2. 使用以下 SQL 语句向其他用户授予对代理的访问权限。

    USE [msdb] GO EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSAS_Proxy',@login_name=N'mydomain\user_name' GO
  3. 使用以下 SQL 语句向代理授予 SSAS 子系统访问权限。

    USE [msdb] GO EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS' GO
查看代理和代理上的授权
  1. 使用以下 SQL 语句查看代理的被授权者。

    USE [msdb] GO EXEC sp_help_proxy GO
  2. 使用以下 SQL 语句查看子系统授权。

    USE [msdb] GO EXEC msdb.dbo.sp_enum_proxy_for_subsystem GO

使用 SQL Server Agent 安排 SSAS 数据库处理

创建凭证和代理并向 SSAS 授予对代理的访问权限后,您可以创建 SQL Server Agent 任务来安排 SSAS 数据库处理。

安排 SSAS 数据库处理
  • 使用 SSMS 或 T-SQL 创建 SQL Server Agent 任务。以下示例使用 T-SQL。您可以通过 SSMS 或 T-SQL 进一步配置其任务计划。

    • @command 参数概述了将由 SQL Server Agent 任务运行的 XML for Analysis (XMLA) 命令。此示例配置了 SSAS 多维数据库处理。

    • @server 参数概述了 SQL Server Agent 任务的目标 SSAS 服务器名称。

      要在 SQL Server Agent 任务所在的同一 RDS 数据库实例中调用 SSAS 服务,请使用 localhost:2383

      要从 RDS 数据库实例外部调用 SSAS 服务,请使用 RDS 端点。如果 RDS 数据库实例是由同一个域联接,则还可以使用 Kerberos Active Directory (AD) 端点 (your-DB-instance-name.your-AD-domain-name)。对于外部数据库实例,请确保正确配置与 RDS 数据库实例关联的 VPC 安全组,以便实现安全连接。

    您可以进一步编辑查询来支持各种 XMLA 操作。可以直接修改 T-SQL 查询进行编辑,也可以在创建 SQL Server Agent 任务后使用 SSMS UI 进行编辑。

    USE [msdb] GO DECLARE @jobId BINARY(16) EXEC msdb.dbo.sp_add_job @job_name=N'SSAS_Job', @enabled=1, @notify_level_eventlog=0, @notify_level_email=0, @notify_level_netsend=0, @notify_level_page=0, @delete_level=0, @category_name=N'[Uncategorized (Local)]', @job_id = @jobId OUTPUT GO EXEC msdb.dbo.sp_add_jobserver @job_name=N'SSAS_Job', @server_name = N'(local)' GO EXEC msdb.dbo.sp_add_jobstep @job_name=N'SSAS_Job', @step_name=N'Process_SSAS_Object', @step_id=1, @cmdexec_success_code=0, @on_success_action=1, @on_success_step_id=0, @on_fail_action=2, @on_fail_step_id=0, @retry_attempts=0, @retry_interval=0, @os_run_priority=0, @subsystem=N'ANALYSISCOMMAND', @command=N'<Batch xmlns="http://schemas.microsoft.com/analysisservices/2003/engine"> <Parallel> <Process xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ddl2="http://schemas.microsoft.com/analysisservices/2003/engine/2" xmlns:ddl2_2="http://schemas.microsoft.com/analysisservices/2003/engine/2/2" xmlns:ddl100_100="http://schemas.microsoft.com/analysisservices/2008/engine/100/100" xmlns:ddl200="http://schemas.microsoft.com/analysisservices/2010/engine/200" xmlns:ddl200_200="http://schemas.microsoft.com/analysisservices/2010/engine/200/200" xmlns:ddl300="http://schemas.microsoft.com/analysisservices/2011/engine/300" xmlns:ddl300_300="http://schemas.microsoft.com/analysisservices/2011/engine/300/300" xmlns:ddl400="http://schemas.microsoft.com/analysisservices/2012/engine/400" xmlns:ddl400_400="http://schemas.microsoft.com/analysisservices/2012/engine/400/400" xmlns:ddl500="http://schemas.microsoft.com/analysisservices/2013/engine/500" xmlns:ddl500_500="http://schemas.microsoft.com/analysisservices/2013/engine/500/500"> <Object> <DatabaseID>Your_SSAS_Database_ID</DatabaseID> </Object> <Type>ProcessFull</Type> <WriteBackTableCreation>UseExisting</WriteBackTableCreation> </Process> </Parallel> </Batch>', @server=N'localhost:2383', @database_name=N'master', @flags=0, @proxy_name=N'SSAS_Proxy' GO

从代理撤消 SSAS 访问权限

您可以使用以下存储过程撤消对 SSAS 子系统的访问权限并删除 SSAS 代理。

撤消访问权限并删除代理
  1. 撤消子系统访问权限。

    USE [msdb] GO EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS' GO
  2. 撤消代理上的授权。

    USE [msdb] GO EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSAS_Proxy',@name=N'mydomain\user_name' GO
  3. 删除代理。

    USE [msdb] GO EXEC dbo.sp_delete_proxy @proxy_name = N'SSAS_Proxy' GO