

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 将 Microsoft SQL 服务器与 AWS Schema Conversion Tool
<a name="CHAP_Source.SQLServer"></a>

您可以使用 AWS SCT 将架构、数据库代码对象和应用程序代码从 SQL Server 转换为以下目标：
+ Amazon RDS for MySQL
+ Amazon Aurora MySQL 兼容版
+ Amazon RDS for PostgreSQL
+ Amazon Aurora PostgreSQL 兼容版
+ Amazon RDS for SQL Server
+ Amazon RDS for MariaDB

**注意**  
AWS SCT 不支持使用适用于 SQL 服务器的 Amazon RDS 作为来源。

您可以使用创建评估报告，用于 AWS SCT 将架构、数据库代码对象和应用程序代码从 SQL Server 迁移到 Babelfish for Aurora PostgreSQL，如下所述。

**Topics**
+ [将 Microsoft SQL Server 用作源的权限](#CHAP_Source.SQLServer.Permissions)
+ [当将 Microsoft SQL Server 用作源时使用 Windows 身份验证](#CHAP_Source.SQLServer.Permissions.WinAuth)
+ [连接到作为源的 SQL Server](#CHAP_Source.SQLServer.Connecting)
+ [将 SQL Server 转换为 MySQL](CHAP_Source.SQLServer.ToMySQL.md)
+ [使用从 SQL Server 迁移到 PostgreSQL AWS Schema Conversion Tool](CHAP_Source.SQLServer.ToPostgreSQL.md)
+ [从 SQL Server 迁移到适用于 SQL Server 的 Amazon RDS AWS Schema Conversion Tool](CHAP_Source.SQLServer.ToRDSSQLServer.md)

## 将 Microsoft SQL Server 用作源的权限
<a name="CHAP_Source.SQLServer.Permissions"></a>

下面列出了将 Microsoft SQL Server 用作源所需的权限：
+ VIEW DEFINITION
+ VIEW DATABASE STATE

该`VIEW DEFINITION`权限允许具有公共访问权限的用户查看对象定义。 AWS SCT 使用`VIEW DATABASE STATE`权限检查 SQL Server 企业版的功能。

对要转换其架构的每个数据库重复以上授权。

此外，授予针对 `master` 数据库的以下权限：
+ VIEW SERVER STATE
+ VIEW ANY DEFINITION

AWS SCT 使用`VIEW SERVER STATE`权限收集服务器设置和配置。确保授予 `VIEW ANY DEFINITION` 权限以便查看端点。

要读取有关 Microsoft Analysis Services 的信息，请在 `master` 数据库上运行以下命令。

```
EXEC master..sp_addsrvrolemember @loginame = N'<user_name>', @rolename = N'sysadmin'
```

在上述示例中，将 `<user_name>` 占位符替换为您之前授予权限的用户名。

要阅读有关 SQL Server Agent 的信息，请将用户添加到 `SQLAgentUser` 角色中。在 `msdb` 数据库上运行以下命令。

```
EXEC sp_addrolemember <SQLAgentRole>, <user_name>;
```

在上述示例中，将 `<SQLAgentRole>` 占位符替换为 SQL Server Agent 角色的名称。然后将 `<user_name>` 占位符替换为您之前授予权限的用户名。有关更多信息，请参阅 *Amazon RDS SQLAgent 用户指南中的向用户*[角色添加](https://docs.aws.amazon.com/AmazonRDS/latest/UserGuide/Appendix.SQLServer.CommonDBATasks.Agent.html#SQLServerAgent.AddUser)用户。

要检测日志传输，请授予针对 `msdb` 数据库的 `SELECT on dbo.log_shipping_primary_databases` 权限。

要使用 DDL 复制的通知方法，请授予针对源数据库的 `RECEIVE ON <schema_name>.<queue_name>` 权限。在本例中，将 `<schema_name>` 占位符替换为数据库的架构名称。然后，将 `<queue_name>` 占位符替换为队列表的名称。

## 当将 Microsoft SQL Server 用作源时使用 Windows 身份验证
<a name="CHAP_Source.SQLServer.Permissions.WinAuth"></a>

如果您的应用程序在基于 Windows 的 Intranet 上运行，您可能可以使用 Windows 身份验证进行数据库访问。Windows 身份验证使用在操作系统线程上建立的当前 Windows 身份来访问 SQL Server 数据库。然后，您可以将 Windows 身份映射到 SQL Server 数据库和权限。要使用 Windows 身份验证连接到 SQL Server，您必须指定您的应用程序正在使用的 Windows 身份。您还必须向 Windows 身份授予访问 SQL Server 数据库的权限。

SQL Server 有两种访问模式：Windows 身份验证模式和混合模式。Windows 身份验证模式启用 Windows 身份验证，禁用 SQL Server 身份验证。混合模式启用 Windows 身份验证和 SQL Server 身份验证。Windows 身份验证是始终可用的，无法禁用。有关 Windows 身份验证的更多信息，请参阅 Microsoft Windows 文档。

在 TEST\$1DB 中创建用户的可能示例如下所示。

```
USE [TEST_DB]
CREATE USER [TestUser] FOR LOGIN [TestDomain\TestUser]
GRANT VIEW DEFINITION TO [TestUser]
GRANT VIEW DATABASE STATE TO [TestUser]
```

### 将 Windows 身份验证与 JDBC 连接配合使用
<a name="CHAP_Source.SQLServer.Permissions.WinAuth.JDBC"></a>

在非 Windows 操作系统上使用 JDBC 驱动程序时，驱动程序不支持 Windows 身份验证。当从非 Windows 操作系统连接到 SQL Server 时，不会自动指定 Windows 身份验证凭证，例如用户名和密码。在这种情况下，应用程序必须改而使用 SQL Server 身份验证。

在 JDBC 连接字符串中，必须指定参数 `integratedSecurity` ，才能使用 Windows 身份验证进行连接。JDBC 驱动程序通过 `integratedSecurity` 连接字符串参数在 Windows 操作系统上支持集成 Windows 身份验证。

使用集成身份验证

1. 安装 JDBC 驱动程序。

1. 将 `sqljdbc_auth.dll` 文件复制到装有 JDBC 驱动程序的计算机上的 Windows 系统路径上的目录中。

   `sqljdbc_auth.dll` 文件安装在以下位置：

   <*安装目录*>\$1sqljdbc\$1<*版本*>\$1<*语言*>\$1auth\$1

当您尝试使用 Windows 身份验证建立与 SQL Server 数据库的连接时，您可能会收到以下错误：此驱动程序未针对集成身份验证进行配置。通过执行以下操作可以解决此问题：
+ 声明两个指向 JDBC 的安装路径的变量：

   `variable name: SQLJDBC_HOME; variable value: D:\lib\JDBC4.1\enu`（sqljdbc4.jar 所在的位置）；

  `variable name: SQLJDBC_AUTH_HOME; variable value: D\lib\JDBC4.1\enu\auth\x86`（如果您运行的是 32 位操作系统）或 `D\lib\JDBC4.1\enu\auth\x64`（如果您运行的是 64 位操作系统）。这是 `sqljdbc_auth.dll` 所在的位置。
+ 复制`sqljdbc_auth.dll`到您 JDK/JRE 正在运行的文件夹。您可以复制到 lib 文件夹、bin 文件夹等。例如，您可以复制到以下文件夹。

  ```
  [JDK_INSTALLED_PATH]\bin;
  [JDK_INSTALLED_PATH]\jre\bin;
  [JDK_INSTALLED_PATH]\jre\lib;
  [JDK_INSTALLED_PATH]\lib;
  ```
+ 确保 JDBC 库文件夹中只有 SQLJDBC4 .jar 文件。从该文件夹中删除所有其他 sqljdbc\$1.jar 文件（或将这些文件复制到其他文件夹）。如果要在程序中添加驱动程序，请确保仅添加 SQLJDBC4 .jar 作为要使用的驱动程序。
+ 在您的应用程序所在的文件夹中复制 sqljdbc\$1auth.dll 文件。

**注意**  
如果您运行的是 32 位 Java 虚拟机 (JVM)，请使用 x86 文件夹中的 sqljdbc\$1auth.dll 文件，即使操作系统是 x64 版本也是如此。如果您是在 x64 处理器上运行 64 位 JVM ，请使用 x64 文件夹中的 sqljdbc\$1auth.dll 文件。

当您连接到 SQL Server 数据库时，您可以为**身份验证**选项选择 **Windows 身份验证**或 **SQL Server 身份验证**。

## 连接到作为源的 SQL Server
<a name="CHAP_Source.SQLServer.Connecting"></a>

使用 AWS Schema Conversion Tool按照以下过程连接到 Microsoft SQL Server 源数据库。

**连接到 Microsoft SQL Server 源数据库**

1. 在中 AWS Schema Conversion Tool，选择**添加来源**。

1. 选择 **Microsoft SQL Server**，然后选择**下一步**。

   此时显示**添加源**对话框。

1. 对于**连接名称**，输入数据库的名称。 AWS SCT 会在左侧面板的树中显示此名称。

1. 使用来自的数据库凭据 AWS Secrets Manager 或手动输入：
   + 要使用 Secrets Manager 中的数据库凭证，请按照以下说明进行操作：

     1. 对于 **AWS 密钥**，请选择密钥的名称。

     1. 选择**填充**可使用 Secrets Manager 中的数据库凭证自动填写数据库连接对话框中的所有值。

     有关使用 Secrets Manager 中的数据库凭证的信息，请参阅 [AWS Secrets Manager 在中配置 AWS Schema Conversion Tool](CHAP_UserInterface.SecretsManager.md)。
   + 要手动输入 Microsoft SQL Server 源数据库连接信息，请按照以下说明进行操作：  
****    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/SchemaConversionTool/latest/userguide/CHAP_Source.SQLServer.html)

1. 选择 “**测试连接**” 以验证是否 AWS SCT 可以连接到您的源数据库。

1. 选择**连接**以连接到源数据库。