

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 在 Amazon RDS 上使用 SSAS
<a name="SSAS.Use"></a>

部署 SSAS 專案之後，您可以在 SSMS 上直接處理 OLAP 資料庫。

**在 RDS 上使用 SSAS**

1. 在 SSMS 中，使用 Active Directory 網域的使用者名稱和密碼連線到 SSAS。

1. 展開 **Databases** (資料庫)。新部署的 SSAS 資料庫隨即出現。

1. 找到連線字串，更新使用者名稱和密碼，為來源 SQL 資料庫提供存取權。這是處理 SSAS 物件的必要操作。

   1. 若使用表格模式，請執行下列操作：

      1. 展開 **Connections** (連線) 索引標籤。

      1. 開啟連線物件的內容 (按一下滑鼠右鍵) 選單，然後選擇 **Properties** (屬性)。

      1. 檢查連線字串中的使用者名稱和密碼。

   1. 若使用多維度模式，請執行下列操作：

      1. 展開 **Data Sources** (資料來源 索引標籤)

      1. 開啟資料來源的內容 (按一下滑鼠右鍵) 選單，然後選擇 **Properties** (屬性)。

      1. 檢查連線字串中的使用者名稱和密碼。

1. 開啟您所建立之 SSAS 資料庫的內容 (按一下滑鼠右鍵) 功能表，然後選擇 **Process Database (處理資料庫)**。

   視輸入資料的大小而定，處理作業可能需要幾分鐘才能完成。

**Topics**
+ [為 SSAS 設定通過 Windows 驗證的使用者](#SSAS.Use.Auth)
+ [新增網域使用者做為資料庫管理員](#SSAS.Admin)
+ [建立 SSAS Proxy](#SSAS.Use.Proxy)
+ [使用 SQL Server Agent 排程 SSAS 資料庫處理作業](#SSAS.Use.Schedule)
+ [從 Proxy 撤銷 SSAS 存取權](#SSAS.Use.Revoke)

## 為 SSAS 設定通過 Windows 驗證的使用者
<a name="SSAS.Use.Auth"></a>

主要管理員使用者 (又稱為主要使用者) 可以使用下列程式碼範例，設定通過 Windows 驗證的登入資料，並授予必要的程序許可。這樣做會為網域使用者授予許可，允許執行 SSAS 客戶任務、使用 S3 檔案傳輸程序、建立憑證以及使用 SQL Server Agent Proxy。如需詳細資訊，請參閱[登入資料 (資料庫引擎)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15) 和 Microsoft 文件中的[建立 SQL Server 代理程式 Proxy](https://docs.microsoft.com/en-us/sql/ssms/agent/create-a-sql-server-agent-proxy?view=sql-server-ver15)。

您可以視需要授予部分或全部下列許可給 Windows 驗證的使用者。

**Example**  

```
-- 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
```

## 新增網域使用者做為資料庫管理員
<a name="SSAS.Admin"></a>

您可以使用下列方式，將網域使用者新增為 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 Proxy
<a name="SSAS.Use.Proxy"></a>

需先建立 SSAS 憑證和 SSAS Proxy，才能使用 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 Proxy**

1. 使用下面的 SQL 陳述式來建立代理。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_add_proxy @proxy_name=N'SSAS_Proxy',@credential_name=N'SSAS_Credential',@description=N''
   GO
   ```

1. 使用下列 SQL 陳述式可將代理伺服器的存取權授予其他使用者。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_grant_login_to_proxy @proxy_name=N'SSAS_Proxy',@login_name=N'mydomain\user_name'
   GO
   ```

1. 使用下列 SQL 陳述式來提供 SSAS 子系統 Proxy 的存取權。

   ```
   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
   ```

1. 使用下列 SQL 陳述式來檢視子系統授予。

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

## 使用 SQL Server Agent 排程 SSAS 資料庫處理作業
<a name="SSAS.Use.Schedule"></a>

建立憑證和 Proxy，並授予 SSAS Proxy 的存取權後，就可以建立 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 作業。SQL Server Agent 任務建立後，可直接修改 T-SQL 查詢或使用 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
  ```

## 從 Proxy 撤銷 SSAS 存取權
<a name="SSAS.Use.Revoke"></a>

您可以撤銷 SSAS 子系統的存取權，並使用下列預存程序刪除 SSAS Proxy。

**撤銷存取權並刪除代理伺服器**

1. 撤銷子系統存取權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='REVOKE_SUBSYSTEM_ACCESS',@proxy_name='SSAS_Proxy',@proxy_subsystem='SSAS'
   GO
   ```

1. 撤銷代理上的授權。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.sp_revoke_login_from_proxy @proxy_name=N'SSAS_Proxy',@name=N'mydomain\user_name'
   GO
   ```

1. 刪除代理。

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