

# Amazon RDS での SSAS の使用
<a name="SSAS.Use"></a>

SSAS プロジェクトをデプロイすると、SSMS で OLAP データベースを直接処理できます。

**RDS で SSAS を使用するには**

1. SSMS で、Active Directory ドメインのユーザー名とパスワードを使用して SSAS に接続します。

1. [**データベース**] を展開します。新しくデプロイした SSAS データベースが表示されます。

1. 接続文字列を見つけて、ユーザー名とパスワードを、ソース SQL データベースにアクセスできるように更新します。この操作は、SSAS オブジェクトを処理するために必要です。

   1. 表形式モードの場合、次の操作を行います。

      1. **[Connections]** (接続) タブを展開します。

      1. 右クリックで接続オブジェクトのメニューを開き、**[Properties]** (プロパティ) を選択します。

      1. 接続文字列のユーザー名とパスワードを更新します。

   1. 多次元モードの場合、次の操作を行います。

      1. **[Data Sources]** (データソース) タブを展開します。

      1. 右クリックでデータソースオブジェクトのメニューを開き、**[Properties]** (プロパティ) を選択します。

      1. 接続文字列のユーザー名とパスワードを更新します。

1. 作成した SSAS データベースのコンテキスト (右クリック) メニューを開き、[**データベースの処理**] を選択します。

   入力データのサイズによっては、処理オペレーションが完了するまでに数分かかる場合があります。

**Topics**
+ [

## SSAS 用の Windows 認証ユーザーの設定
](#SSAS.Use.Auth)
+ [

## データベース管理者としてのドメインユーザーの追加
](#SSAS.Admin)
+ [

## SSAS プロキシの作成
](#SSAS.Use.Proxy)
+ [

## SQL Server エージェントを使用した SSAS データベース処理のスケジュール
](#SSAS.Use.Schedule)
+ [

## プロキシからの SSAS アクセスの取り消し
](#SSAS.Use.Revoke)

## SSAS 用の Windows 認証ユーザーの設定
<a name="SSAS.Use.Auth"></a>

メイン管理者ユーザー (マスターユーザーと呼ばれることもあります) は、以下のコード例を使用して、Windows 認証ログインを設定し、必要な手順に対するアクセス許可を付与できます。これにより、ドメインユーザーに SSAS カスタマータスクの実行、S3 ファイル転送手順の使用、認証情報の作成、および SQL Server エージェントプロキシの操作を行うアクセス許可が付与されます。詳細については、Microsoft ドキュメントの「[Credentials (Database Engine)](https://docs.microsoft.com/en-us/sql/relational-databases/security/authentication-access/credentials-database-engine?view=sql-server-ver15)」および「[Create a SQL Server Agent 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 プロキシの作成
<a name="SSAS.Use.Proxy"></a>

SQL Server エージェントを使用して SSAS データベース処理をスケジュールできるようにするには、SSAS 認証情報と 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
   ```

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 サブシステムにプロキシへのアクセスを許可します。

   ```
   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 エージェントを使用した SSAS データベース処理のスケジュール
<a name="SSAS.Use.Schedule"></a>

認証情報とプロキシを作成し、SSAS にプロキシへのアクセスを許可したら、SQL Server エージェントジョブを作成して SSAS データベース処理をスケジュールできます。

**SSAS データベース処理をスケジュールするには**
+ SSMS または T-SQL を使用して、SQL Server エージェントジョブを作成します。以下の例では T-SQL を使用しています。SSMS または T-SQL を使用して、ジョブスケジュールをさらに設定できます。
  + `@command` パラメータは、SQL Server エージェントジョブによって実行される XML for Analysis (XMLA) コマンドの概要を示します。この例では、SSAS 多次元データベース処理を設定します。
  + `@server` パラメータは、SQL Server エージェントジョブのターゲット SSAS サーバー名の概要を示しています。

    SQL Server エージェントジョブが存在する同じ RDS DB インスタンス内で SSAS サービスを呼び出すには、`localhost:2383` を使用します。

    RDS DB インスタンスの外部から SSAS サービスを呼び出すには、RDS エンドポイントを使用します。RDS DB インスタンスが同じドメインで参加している場合、Kerberos Active Directory (AD) エンドポイント (`your-DB-instance-name.your-AD-domain-name`) も使用できます。外部 DB インスタンスの場合は、RDS DB インスタンスに関連付けられた VPC セキュリティグループをセキュアな接続用に適切に設定してください。

  クエリをさらに編集して、さまざまな XMLA オペレーションをサポートできます。T-SQL クエリを直接変更するか、SQL Server エージェントジョブの作成後に 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 アクセスの取り消し
<a name="SSAS.Use.Revoke"></a>

以下のストアドプロシージャを使用して、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
   ```

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