

# 使用 SSIS
<a name="SSIS.Use"></a>

将 SSIS 项目部署到 SSIS 目录中后，您可以直接从 SSMS 运行程序包或使用 SQL Server Agent 安排这些程序包。您必须使用经 Windows 身份验证的登录名来执行 SSIS 程序包。有关更多信息，请参阅“[为 SSIS 设置经 Windows 身份验证的用户](SSIS.Permissions.md#SSIS.Use.Auth)”。

**Topics**
+ [为 SSIS 项目设置数据库连接管理器](#SSIS.Use.ConnMgrs)
+ [创建 SSIS 代理](#SSIS.Use.Proxy)
+ [使用 SQL Server Agent 安排 SSIS 程序包](#SSIS.Use.Schedule)
+ [从代理撤消 SSIS 访问权限](#SSIS.Use.Revoke)

## 为 SSIS 项目设置数据库连接管理器
<a name="SSIS.Use.ConnMgrs"></a>

在使用连接管理器时，可以使用以下类型的身份验证：
+ 对于使用 AWS Managed Active Directory 的本地数据库连接，您可以使用 SQL 身份验证或 Windows 身份验证。对于 Windows 身份验证，请使用 `DB_instance_name.fully_qualified_domain_name` 作为连接字符串的服务器名称。

  以 `myssisinstance.corp-ad.example.com` 为例，其中 `myssisinstance` 是数据库实例名称，`corp-ad.example.com` 是完全限定域名。
+ 对于远程连接，请始终使用 SQL 身份验证。
+ 对于使用自托管式 Active Directory 的本地数据库连接，您可以使用 SQL 身份验证或 Windows 身份验证。对于 Windows 身份验证，请使用 `.` 或 `LocalHost` 作为连接字符串的服务器名称。

## 创建 SSIS 代理
<a name="SSIS.Use.Proxy"></a>

您需要创建 SSIS 凭证和 SSIS 代理，才能使用 SQL Server Agent 安排 SSIS 程序包。以经 Windows 身份验证的用户身份运行这些过程。

**创建 SSIS 凭证**
+ 为代理创建凭证。为此，您可以使用 SSMS 或以下 SQL 语句。

  ```
  USE [master]
  GO
  CREATE CREDENTIAL [SSIS_Credential] WITH IDENTITY = N'mydomain\user_name', SECRET = N'mysecret'
  GO
  ```
**注意**  
`IDENTITY` 必须是经域身份验证的登录名。将 `mysecret` 替换为经域身份验证的登录的密码。  
每当更改 SSISDB 主机时，请更改 SSIS 代理凭证以允许新主机访问它们。

**创建 SSIS 代理**

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

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

1. 使用以下 SQL 语句向其他用户授予对代理的访问权限。

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

1. 使用以下 SQL 语句向代理授予 SSIS 子系统访问权限。

   ```
   USE [msdb]
   GO
   EXEC msdb.dbo.rds_sqlagent_proxy @task_type='GRANT_SUBSYSTEM_ACCESS',@proxy_name='SSIS_Proxy',@proxy_subsystem='SSIS'
   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 安排 SSIS 程序包
<a name="SSIS.Use.Schedule"></a>

创建凭证和代理并向 SSIS 授予对代理的访问权限后，您可以创建 SQL Server Agent 作业来安排 SSIS 程序包。

**安排 SSIS 程序包**
+ 您可以使用 SSMS 或 T-SQL 创建 SQL Server Agent 作业。以下示例使用 T-SQL。

  ```
  USE [msdb]
  GO
  DECLARE @jobId BINARY(16)
  EXEC msdb.dbo.sp_add_job @job_name=N'MYSSISJob',
  @enabled=1,
  @notify_level_eventlog=0,
  @notify_level_email=2,
  @notify_level_page=2,
  @delete_level=0,
  @category_name=N'[Uncategorized (Local)]',
  @job_id = @jobId OUTPUT
  GO
  EXEC msdb.dbo.sp_add_jobserver @job_name=N'MYSSISJob',@server_name=N'(local)'
  GO
  EXEC msdb.dbo.sp_add_jobstep @job_name=N'MYSSISJob',@step_name=N'ExecuteSSISPackage',
  @step_id=1,
  @cmdexec_success_code=0,
  @on_success_action=1,
  @on_fail_action=2,
  @retry_attempts=0,
  @retry_interval=0,
  @os_run_priority=0,
  @subsystem=N'SSIS',
  @command=N'/ISSERVER "\"\SSISDB\MySSISFolder\MySSISProject\MySSISPackage.dtsx\"" /SERVER "\"my-rds-ssis-instance.corp-ad.company.com/\"" 
  /Par "\"$ServerOption::LOGGING_LEVEL(Int16)\"";1 /Par "\"$ServerOption::SYNCHRONIZED(Boolean)\"";True /CALLERINFO SQLAGENT /REPORTING E',
  @database_name=N'master',
  @flags=0,
  @proxy_name=N'SSIS_Proxy'
  GO
  ```

## 从代理撤消 SSIS 访问权限
<a name="SSIS.Use.Revoke"></a>

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

**撤消访问权限并删除代理**

1. 撤消子系统访问权限。

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

1. 撤消代理上的授权。

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

1. 删除代理。

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