

# 连接到 Amazon RDS 数据库实例
<a name="CHAP_CommonTasks.Connect"></a>

 在连接到数据库实例之前，您必须先创建数据库实例。有关信息，请参阅 [创建 Amazon RDS 数据库实例](USER_CreateDBInstance.md)。在 Amazon RDS 预调配数据库实例后，使用标准客户端应用程序或实用程序将数据库引擎连接到数据库实例。在连接字符串中，指定数据库实例端点中的 DNS 地址作为主机参数。此外，还可以将数据库实例端点中的端口号指定为端口参数。

有关查找 Amazon RDS 数据库实例的连接信息或访问 VPC 中数据库实例的场景的更多信息，请参阅以下主题。
+ [查找 Amazon RDS 数据库实例的连接信息](CHAP_CommonTasks.Connect.EndpointAndPort.md)
+ [在 VPC 中访问数据库实例的方案](CHAP_CommonTasks.Connect.ScenariosForAccess.md)

# 查找 Amazon RDS 数据库实例的连接信息
<a name="CHAP_CommonTasks.Connect.EndpointAndPort"></a>

数据库实例的连接信息包括其端点、端口和有效数据库用户，如主用户。例如，对于 MySQL 数据库实例，假设端点值是 `mydb.123456789012.us-east-1.rds.amazonaws.com`。在这种情况下，端口值是 `3306`，数据库用户是 `admin`。鉴于此信息，您可以在连接字符串中指定以下值：
+ 对于主机或主机名或 DNS 名称，请指定 `mydb.123456789012.us-east-1.rds.amazonaws.com`。
+ 对于端口，请指定 `3306`。
+ 对于用户，请指定 `admin`。

端点对于每个数据库实例都是唯一的，端口和用户的值可能会有所不同。以下列表显示了每个数据库引擎的最常见端口：
+ Db2 – 50000
+ MariaDB – 3306
+ Microsoft SQL Server – 1433
+ MySQL – 3306
+ Oracle – 1521
+ PostgreSQL – 5432

要连接到数据库实例，请使用数据库引擎的任何客户端。例如，您可以使用 mysql 实用程序连接到 MariaDB 或 MySQL 数据库实例。您可以使用 Microsoft SQL Server Management Studio 连接到 SQL Server 数据库实例。您可以使用 Oracle SQL Developer 连接到 Oracle 数据库实例。类似地，可以使用 psql 命令行实用程序连接到 PostgreSQL 数据库实例。

要查找数据库实例的连接信息，请使用 AWS 管理控制台。还可以使用 AWS Command Line Interface（AWS CLI）[describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令或 RDS API [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作。

## 控制台
<a name="CHAP_CommonTasks.Connect.EndpointAndPort.Console"></a>

**在 AWS 管理控制台 中查找数据库实例的连接信息**

1. 登录AWS 管理控制台并通过以下网址打开 Amazon RDS 控制台：[https://console.aws.amazon.com/rds/](https://console.aws.amazon.com/rds/)。

1. 在导航窗格中，选择 **数据库** 以显示数据库实例的列表。

1. 选择数据库实例的名称以显示其详细信息。

1. 在**连接和安全性**选项卡上，复制端点。另请注意端口号。您需要端点和端口号才能连接到数据库实例。  
![\[数据库实例的端点和端口\]](http://docs.aws.amazon.com/zh_cn/AmazonRDS/latest/UserGuide/images/endpoint-port.png)

1. 如果需要查找主用户名，请选择 **Configuration (配置)** 选项卡并查看 **Master username (主用户名)** 值。

## AWS CLI
<a name="CHAP_CommonTasks.Connect.EndpointAndPort.CLI"></a>

要使用 AWS CLI 查找数据库实例的连接信息，请调用 [describe-db-instances](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-instances.html) 命令。在调用中，查询数据库实例 ID、端点、端口和主用户名。

对于 Linux、macOS 或 Unix：

```
aws rds describe-db-instances \
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

对于 Windows：

```
aws rds describe-db-instances ^
  --query "*[].[DBInstanceIdentifier,Endpoint.Address,Endpoint.Port,MasterUsername]"
```

您的输出应类似于以下内容。

```
[
    [
        "mydb",
        "mydb.123456789012.us-east-1.rds.amazonaws.com",
        3306,
        "admin"
    ],
    [
        "myoracledb",
        "myoracledb.123456789012.us-east-1.rds.amazonaws.com",
        1521,
        "dbadmin"
    ],
    [
        "mypostgresqldb",
        "mypostgresqldb.123456789012.us-east-1.rds.amazonaws.com",
        5432,
        "postgresadmin"
    ]
]
```

## RDS API
<a name="CHAP_CommonTasks.Connect.EndpointAndPort.API"></a>

要使用 Amazon RDS API 查找数据库实例的连接信息，请调用 [DescribeDBInstances](https://docs.aws.amazon.com/AmazonRDS/latest/APIReference/API_DescribeDBInstances.html) 操作。在输出中，找到端点地址、端点端口和主用户名的值。

# 在 VPC 中访问数据库实例的方案
<a name="CHAP_CommonTasks.Connect.ScenariosForAccess"></a>

利用 Amazon Virtual Private Cloud (Amazon VPC)，您可以在 Virtual Private Cloud (VPC) 中启动AWS资源，如 Amazon RDS 数据库实例。使用 Amazon VPC 时，您的虚拟联网环境完全由您控制。您可以选择自己的 IP 地址范围、创建子网以及配置路由和访问控制列表。

VPC 安全组控制 VPC 内的数据库实例的访问权限。每个 VPC 安全组规则都允许特定的源访问 VPC 中与此 VPC 安全组关联的数据库实例。源可以是一个地址范围 (例如，203.0.113.0/24) 或另一个 VPC 安全组。指定作为源的 VPC 安全组后，就可以允许从使用此源 VPC 安全组的所有实例 (通常为应用程序服务器) 中传入流量。

在尝试连接到您的数据库实例之前，请为您的使用案例配置 VPC。以下是在 VPC 中访问数据库实例的常见方案：
+ **VPC 中的数据库实例被同一 VPC 中的 Amazon EC2 实例访问** – 数据库实例在 VPC 中的常见用途是与在同一 VPC 中的 EC2 实例中运行的应用程序服务器共享数据。EC2 实例可能会使用与数据库实例交互的应用程序运行 Web 服务器。
+ **不同 VPC 中的 EC2 实例访问 VPC 中的数据库实例** – 在某些情况下，您的数据库实例与用于访问该实例的 EC2 实例位于不同的 VPC 中。如果是这样，您可以使用 VPC 对等连接访问该数据库实例。
+ **客户端应用程序通过互联网访问 VPC 中的数据库实例** – 要通过互联网从客户端应用程序访问 VPC 中的数据库实例，您可配置包含一个公有子网的 VPC。还要配置一个互联网网关以实现通过互联网通信。

  要从 VPC 外部连接到数据库实例，该数据库实例必须可公开访问。此外，必须使用数据库实例安全组的入站规则授予访问权限，并且必须满足其他要求。有关更多信息，请参阅 [无法连接到 Amazon RDS 数据库实例](CHAP_Troubleshooting.md#CHAP_Troubleshooting.Connecting)。
+ **私有网络访问的 VPC 中的数据库实例** - 如果您的数据库实例不可公开访问，则可以使用以下选项之一从私有网络访问它：
  + AWS Site-to-Site VPN 连接
  + Direct Connect 连接
  + AWS Client VPN 连接

有关更多信息，请参阅 [在 VPC 中访问数据库实例的场景](USER_VPC.Scenarios.md)。

## 使用 AWS 驱动程序连接到数据库实例
<a name="RDS.Connecting.Drivers"></a>

借助 AWS 驱动程序套件，可显著缩短切换和故障转移时间，并支持使用 AWS Secrets Manager、AWS Identity and Access Management（IAM）和联合身份进行身份验证。AWS 驱动程序依靠监控数据库实例状态和了解实例拓扑，来确定新的主实例。这种方法将切换和故障转移时间缩短到几秒钟，而开源驱动程序的切换和故障转移时间则为几十秒。

下表列出了每个驱动程序支持的功能。随着新服务功能的推出，使用 AWS 驱动程序套件可为这些服务功能提供内置支持。


| 功能 | [AWS JDBC 驱动程序](https://github.com/awslabs/aws-advanced-jdbc-wrapper) | [AWS Python 驱动程序](https://github.com/awslabs/aws-advanced-python-wrapper) | [适用于 MySQL 的 AWS ODBC 驱动程序](https://github.com/aws/aws-mysql-odbc) | 
| --- | --- | --- | --- | 
| 失效转移支持 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheFailoverPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheFailoverPlugin.md)\$1 | [是](https://github.com/aws/aws-mysql-odbc/blob/main/docs/using-the-aws-driver/UsingTheAwsDriver.md#failover-process)\$1 | 
| 增强了失效转移监控功能 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheHostMonitoringPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheHostMonitoringPlugin.md)\$1 | [是](https://github.com/aws/aws-mysql-odbc/blob/main/docs/using-the-aws-driver/HostMonitoring.md#enhanced-failure-monitoring)\$1 | 
| 读/写分离 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheReadWriteSplittingPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheReadWriteSplittingPlugin.md)\$1 | 否 | 
| 驱动程序元数据连接 | [可以](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheDriverMetadataConnectionPlugin.md)。 | 不适用 | 不适用 | 
| 遥测 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/Telemetry.md) | [是](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/Telemetry.md)\$1 | 否 | 
| Secrets Manager | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheAwsSecretsManagerPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheAwsSecretsManagerPlugin.md)\$1 | [是](https://github.com/aws/aws-mysql-odbc/blob/main/docs/using-the-aws-driver/UsingTheAwsDriver.md#secrets-manager-authentication)\$1 | 
| IAM 身份验证 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheIamAuthenticationPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheIamAuthenticationPlugin.md)\$1 | [是](https://github.com/aws/aws-mysql-odbc/blob/main/docs/using-the-aws-driver/UsingTheAwsDriver.md#iam-authentication)\$1 | 
| 联合身份验证（AD FS） | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheFederatedAuthPlugin.md) | [是](https://github.com/awslabs/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/using-plugins/UsingTheFederatedAuthenticationPlugin.md)\$1 | 否 | 
| 联合身份（Okta） | [可以](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/using-plugins/UsingTheFederatedAuthPlugin.md)。 | 否 | 否 | 
| 多可用区数据库集群 | [支持](https://github.com/awslabs/aws-advanced-jdbc-wrapper/blob/main/docs/using-the-jdbc-driver/SupportForRDSMultiAzDBCluster.md) | [是](https://github.com/aws/aws-advanced-python-wrapper/blob/main/docs/using-the-python-driver/SupportForRDSMultiAzDBCluster.md)\$1 | 否 | 

有关 AWS 驱动程序的更多信息，请参阅 [RDS for MariaDB](MariaDB.Connecting.Drivers.md#MariaDB.Connecting.JDBCDriver)、[RDS for MySQL](MySQL.Connecting.Drivers.md#MySQL.Connecting.JDBCDriver) 或 [RDS for PostgreSQL](PostgreSQL.Connecting.JDBCDriver.md) 数据库实例的相应语言驱动程序。

**注意**  
RDS for MariaDB 支持的唯一功能是使用 AWS Secrets Manager、AWS Identity and Access Management（IAM）和联合身份进行身份验证。

## 连接到运行特定数据库引擎的数据库实例
<a name="CHAP_CommonTasks.Connect.DBEngine"></a>

要了解如何连接到运行特定数据库引擎的数据库实例，请按照数据库引擎的说明操作：
+ [RDS for Db2](USER_ConnectToDb2DBInstance.md)
+ [RDS for MariaDB](USER_ConnectToMariaDBInstance.md)
+ [RDS for SQL Server](USER_ConnectToMicrosoftSQLServerInstance.md)
+ [RDS for MySQL](USER_ConnectToInstance.md)
+ [RDS for Oracle](USER_ConnectToOracleInstance.md)
+ [RDS for PostgreSQL](USER_ConnectToPostgreSQLInstance.md)

## 使用 RDS Proxy 管理连接
<a name="CHAP_CommonTasks.Connect.RDSProxy"></a>

还可以使用 Amazon RDS 代理管理与 RDS for MariaDB、RDS for Microsoft SQL Server、RDS for MySQL 和 RDS for PostgreSQL 数据库实例的连接。RDS Proxy 允许应用程序池化和共享数据库连接，以提高可扩展性。有关更多信息，请参阅 [Amazon RDS 代理](rds-proxy.md)。

## 数据库身份验证选项
<a name="CHAP_CommonTasks.Connect.DatabaseAuthentication"></a>

Amazon RDS 支持以下对数据库用户进行身份验证的方法：
+ **密码身份验证** – 数据库实例将执行用户账户的所有管理。您可以使用 SQL 语句创建用户并指定密码。您可以使用的 SQL 语句取决于数据库引擎。
+ **AWS Identity and Access Management（IAM）数据库身份验证** – 您在连接到数据库实例时无需使用密码。而是使用身份验证令牌。
+ **Kerberos 身份验证** – 使用 Kerberos 和 Microsoft Active Directory 对数据库用户进行外部身份验证。Kerberos 是一种网络身份验证协议，它使用票证和对称密钥加密，而不再需要通过网络传输密码。Kerberos 已内置到 Active Directory 中，用于在网络资源（如数据库）中对用户进行身份验证。

IAM 数据库身份验证和 Kerberos 身份验证仅适用于特定的数据库引擎和版本。

有关更多信息，请参阅“[Amazon RDS 的数据库身份验证](database-authentication.md)”。

## 加密连接
<a name="CHAP_CommonTasks.Connect.EncryptedConnections"></a>

您可以使用应用程序中的安全套接字层 (SSL) 或传输层安全 (TLS) 来加密与数据库实例的连接。每个数据库引擎都有自己的用于实施 SSL/TLS 的过程。有关更多信息，请参阅 [使用 SSL/TLS 加密与数据库实例或集群的连接](UsingWithRDS.SSL.md)。