

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

# 使用链接服务器从亚马逊 EC2 上的微软 SQL Server 访问本地微软 SQL Server 表
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers"></a>

*Tirumala Dasari 和 Eduardo Valentim，Amazon Web Services*

## Summary
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-summary"></a>

此模式描述了如何使用链接服务器从运行或托管在亚马逊弹性计算云 (亚马逊 EC2) Windows 或 Linux 实例上的微软 SQL Server 数据库访问在微软 Windows 上运行的本地微软 SQL Server 数据库表。

## 先决条件和限制
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-prereqs"></a>

**先决条件**
+ 一个有效的 Amazon Web Services account
+ 在亚马逊 EC2 Linux AMI（亚马逊机器映像）上运行微软 SQL Server 的亚马逊
+ 本地微软 SQL Server (Windows) 服务器和 Windows 或 Linux EC2 实例之间的 AWS Direct Connect

**产品版本**
+ SQL Server 2016 或更高版本

## 架构
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-architecture"></a>

**源技术堆栈**
+ 在 Windows 上运行的本地 Microsoft SQL Server 数据库
+ 亚马逊 EC2 的微软 SQL Server 在 Windows AMI 或 Linux AMI 上运行

**目标技术堆栈**
+ 亚马逊 EC2 ，微软 SQL Server 在亚马逊 Linux AMI 上运行
+ 亚马逊 EC2 搭载微软 SQL Server 在 Windows AMI 上运行

**源数据库和目标数据库架构**

![\[AWS Cloud architecture with VPC, availability zones, and hybrid environment connecting to on-premises database.\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/images/pattern-img/8e4a3222-0850-4980-8028-c710dcdb9186/images/fa157992-0ed9-46e1-8059-0cbbb74a98ec.png)


## 工具
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-tools"></a>
+ [Microsoft SQL Server Management Studio (SSMS)](https://learn.microsoft.com/en-us/sql/ssms/download-sql-server-management-studio-ssms?view=sql-server-ver16) 是用于管理 SQL Server 基础结构的集成环境。它提供了用户界面和一组工具，其中包含与 SQL Server 交互的丰富脚本编辑器。

## 操作说明
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-epics"></a>

### 在 Windows SQL Server 中将 SQL Server 的身份验证模式更改为 Windows
<a name="change-authentication-mode-to-windows-for-sql-server-in-windows-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过 SSMS 连接到 Windows SQL Server。 |  | 数据库管理员 | 
| 从 Windows SQL Server 实例的上下文（右键单击）菜单中将身份验证模式更改为 SQL Server 中的 Windows。 |  | 数据库管理员 | 

### 重新启动 Windows MSSQL 服务
<a name="restart-the-windows-mssql-service"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 重新启动 SQL 服务。 | [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/prescriptive-guidance/latest/patterns/access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers.html) | 数据库管理员 | 

### 在 Windows SQL Server 中创建新登录名并选择要访问的数据库
<a name="create-new-login-and-choose-databases-to-access-in-windows-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在“安全”选项卡中，打开“登录”的上下文（右键单击）菜单，然后选择新的登录名。 |  | 数据库管理员 | 
| 在“常规”选项卡中，选择“SQL Server 身份验证”，输入用户名，输入密码，然后确认密码并清除用于在下次登录时更改密码的选项。 |  | 数据库管理员 | 
| 在“服务器角色”选项卡中，选择“公共”。 |  | 数据库管理员 | 
| 在“用户映射”选项卡中，选择要访问的数据库和架构，然后突出显示该数据库以选择数据库角色。 | 选择“public”和“db\$1datareader”以访问数据库表中的数据。 | 数据库管理员 | 
| 选择“确定”以创建用户。 |  | 数据库管理员 | 

### 将 Windows SQL Server IP 添加到 Linux SQL Server 主机文件
<a name="add-windows-sql-server-ip-to-linux-sql-server-host-file"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 通过终端窗口连接到 Linux SQL Server 框。 |  | 数据库管理员 | 
| 打开 /etc/hosts 文件，并使用 SQL Server 添加 Windows 计算机的 IP 地址。 |  | 数据库管理员 | 
| 保存主机文件。 |  | 数据库管理员 | 

### 在 Linux SQL Server 上创建链接服务器
<a name="create-linked-server-on-linux-sql-server"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 使用存储过程 master.sys.sp\$1addlinkedserver 和 master.dbo.sp\$1addlinkedsrvlogin 创建链接服务器。 | 有关使用这些存储过程的详细信息，请参阅*其他信息*部分。 | 数据库管理员、开发人员 | 

### 验证在 SSMS 中创建的链接服务器和数据库
<a name="verify-the-created-linked-server-and-databases-in-ssms"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 SSMS 的 Linux SQL Server 中，转到“链接服务器”并刷新。 |  | 数据库管理员 | 
| 在左窗格中展开创建的链接服务器和目录。 | 您将看到选定的 SQL Server 数据库以及表和视图。 | 数据库管理员 | 

### 验证是否可以访问 Windows SQL Server 数据库表
<a name="verify-that-you-can-access-windows-sql-server-database-tables"></a>


| Task | 说明 | 所需技能 | 
| --- | --- | --- | 
| 在 SSMS 查询窗口中，运行查询：“select top 3 \$1 from [sqllin].dms\$1sample\$1win.dbo.mlb\$1data”。 | 请注意，FROM 子句使用由四部分组成的语法：computer.database.schema.table（例如，从 [sqllin] .master.sys.databases 中选择名称 “数据库”SQL2 ）。在我们的示例中，我们在主机文件 SQL2 中为创建了别名，因此您无需在方括号之间输入实际的 NetBIOS 名称。如果您使用实际的 NetBIOS 名称，请注意，AWS 默认使用 Win-xxxx 等 NetBIOS 名称，并且 SQL Server 要求使用方括号作为带破折号的名称。 | 数据库管理员、开发人员 | 

## 相关资源
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-resources"></a>
+ [Linux 上的 SQL Server 发行说明](https://docs.microsoft.com/en-us/sql/linux/sql-server-linux-release-notes?view=sql-server-2017) 

 

## 附加信息
<a name="access-on-premises-microsoft-sql-server-tables-from-microsoft-sql-server-on-amazon-ec2-using-linked-servers-additional"></a>

**使用存储过程创建链接服务器**

SSMS 不支持为 Linux SQL Server 创建链接服务器，因此必须使用以下存储过程来创建它们：

```
EXEC master.sys.sp_addlinkedserver @server= N'SQLLIN' , @srvproduct= N'SQL Server'    
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'SQLLIN',@useself=N'False',@locallogin=NULL,@rmtuser=N'username',@rmtpassword='Test123$'
```

注 1：在存储过程 `master.dbo.sp_addlinkedsrvlogin` 中输入您之前在 Windows SQL Server 中创建的登录凭据。

注 2：`@server` 名称 `SQLLIN` 和主机文件条目名称 `172.12.12.4 SQLLIN` 应相同。

 您可以使用此过程为以下方案创建链接服务器：
+ Linux SQL Server 通过链接服务器到 Windows SQL Server（在此模式中指定）
+ Windows SQL Server 通过链接服务器到 Linux SQL Server
+ Linux SQL Server 通过链接服务器连接到另一个 Linux SQL Server