

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 透過 RDS Proxy 連線至資料庫
<a name="rds-proxy-connecting"></a>

透過代理或藉由連線到資料庫來連線到 RDS 資料庫執行個體，其方式通常是相同的。如需詳細資訊，請參閱[代理端點概觀](rds-proxy-endpoints.md#rds-proxy-endpoints-overview)。

**Topics**
+ [使用資料庫登入資料連線至資料庫](#rds-proxy-connecting-native)
+ [使用 IAM 身分驗證連線至資料庫](#rds-proxy-connecting-iam)
+ [連線至 Microsoft SQL Server 的考量事項](#rds-proxy-connecting-sqlserver)
+ [連線至 PostgreSQL 的考量事項](#rds-proxy-connecting-postgresql)

## 使用資料庫登入資料連線至資料庫
<a name="rds-proxy-connecting-native"></a>

 使用下列步驟，使用資料庫登入資料連線至代理：

1.  尋找代理端點。在 中 AWS 管理主控台，您可以在對應代理的詳細資訊頁面上找到端點。透過 AWS CLI，您可以使用 [describe-db-proxies](https://docs.aws.amazon.com/cli/latest/reference/rds/describe-db-proxies.html) 命令。下列範例會顯示作法。

   ```
   # Add --output text to get output as a simple tab-separated list.
   $ aws rds describe-db-proxies --query '*[*].{DBProxyName:DBProxyName,Endpoint:Endpoint}'
   [
       [
           {
               "Endpoint": "the-proxy.proxy-demo.us-east-1.rds.amazonaws.com",
               "DBProxyName": "the-proxy"
           },
           {
               "Endpoint": "the-proxy-other-secret.proxy-demo.us-east-1.rds.amazonaws.com",
               "DBProxyName": "the-proxy-other-secret"
           },
           {
               "Endpoint": "the-proxy-rds-secret.proxy-demo.us-east-1.rds.amazonaws.com",
               "DBProxyName": "the-proxy-rds-secret"
           },
           {
               "Endpoint": "the-proxy-t3.proxy-demo.us-east-1.rds.amazonaws.com",
               "DBProxyName": "the-proxy-t3"
           }
       ]
   ]
   ```

1.  在用戶端應用程式的連線字串中指定端點做為主機參數。例如，指定代理端點做為 `mysql -h` 選項或 `psql -h` 選項的值。

1.  請提供和平常一樣的資料庫使用者名稱和密碼。

## 使用 IAM 身分驗證連線至資料庫
<a name="rds-proxy-connecting-iam"></a>

 當您搭配 RDS Proxy 使用 IAM 身分驗證時，有兩個在用戶端和代理之間進行身分驗證的選項：
+ 設定資料庫使用者以使用一般使用者名稱和密碼進行身分驗證。RDS Proxy 會從 Secrets Manager 擷取使用者名稱和密碼登入資料。從 RDS Proxy 連至底層資料庫的連線不會透過 IAM。
+ 您也可以使用end-to-end IAM 身分驗證，使用 IAM 透過代理連線到資料庫，而不需要資料庫登入資料。

 若要使用 IAM 身分驗證連線到 RDS Proxy，請使用相同的一般連線程序，搭配 RDS DB 執行個體進行 IAM 身分驗證。如需使用 IAM 的一般資訊，請參閱 [Amazon RDS 的安全性](UsingWithRDS.md)。如果您使用的是end-to-end IAM 身分驗證，請提供 IAM 身分驗證外掛程式給您的資料庫使用者。請參閱 [使用 IAM 身分驗證建立資料庫帳戶](UsingWithRDS.IAMDBAuth.DBAccounts.md)。

 RDS Proxy 的 IAM 使用方式的主要差異包含下列項目：
+ 使用標準 IAM 身分驗證，資料庫使用者在資料庫中具有一般登入資料。您設定包含這些使用者名稱和密碼的 Secrets Manager 私密，然後授權 RDS Proxy 擷取來自 Secrets Manager 的登入資料。IAM 身分驗證會套用到您用戶端程式與代理之間的連線。接著，代理會使用從 Secrets Manager 中擷取的使用者名稱和密碼登入資料，向資料庫進行身分驗證。
+ 透過end-to-end IAM 身分驗證，您不需要為資料庫登入資料設定 Secrets Manager 秘密。IAM 身分驗證適用於用戶端與代理之間的連線，以及代理與資料庫的連線。
+ 您會指定代理端點，而非執行個體、叢集或讀取器端點。如需代理端點的詳細資訊，請參閱[使用 IAM 身分驗證連接至資料庫執行個體](UsingWithRDS.IAMDBAuth.Connecting.md)。
+ 使用 IAM 身分驗證連接至 Proxy 時，請務必使用 Transport Layer Security (TLS)/Secure Sockets Layer (SSL)。

您可以透過修改 IAM 政策，授與特定使用者對代理的存取權。範例如下。

```
"Resource": "arn:aws:rds-db:us-east-2:1234567890:dbuser:prx-ABCDEFGHIJKL01234/db_user"
```

**提示**  
設定 RDS Proxy 連線的 IAM 身分驗證時，請遵循下列重要準則以避免連線問題：  
在維護相同資料庫使用者或`rds_iam`角色的一般密碼身分驗證時，請勿授予角色。
請記住，當用戶端使用 IAM 身分驗證連線至 RDS Proxy 時，RDS Proxy 一律會透過 Secrets Manager 使用密碼身分驗證連線至資料庫。
如果您經常發生連線終止和重新連線，請從使用者或角色移除任何現有的`rds_iam`授予，並僅使用密碼身分驗證。
確保您的密碼政策符合 SCRAM-SHA-256 安全字元要求。
混合相同資料庫使用者的 IAM 和密碼身分驗證方法可能會導致連線不穩定。

## 連線至 Microsoft SQL Server 的考量事項
<a name="rds-proxy-connecting-sqlserver"></a>

如需使用 IAM 身分驗證連線到代理，請不要使用密碼欄位。相反地，您可以在權杖欄位中為每種類型的資料庫驅動程式提供適當的權杖屬性。例如，針對 JDBC 使用 `accessToken` 屬性，或針對 ODBC 使用 `sql_copt_ss_access_token` 屬性。或者，針對 .NET SqlClient 驅動程式使用 `AccessToken` 屬性。您無法使用 IAM 身分驗證，搭配不支援權杖屬性的用戶端。

在某些情況下，代理無法共用資料庫連線，而是將用戶端應用程式到代理的連線鎖定為專用的資料庫連線。如需這些條件的詳細資訊，請參閱 [避免鎖定 RDS Proxy](rds-proxy-pinning.md)。

## 連線至 PostgreSQL 的考量事項
<a name="rds-proxy-connecting-postgresql"></a>

如果您建立新的 PostgreSQL 資料庫使用者以連線至 RDS Proxy，請確定您授予使用者對於資料庫的 `CONNECT` 權限。如果沒有此權限，使用者就無法建立連線。如需詳細資訊，請參閱[使用 RDS Proxy 時，將資料庫使用者新增至 PostgreSQL 資料庫](rds-proxy-new-db-user.md#rds-proxy-new-db-user-pg)。

當用戶端開始 PostgreSQL 資料庫的連線時，它會傳送啟動訊息。此訊息包含包含參數名稱和值字串的組合。如需詳細資訊，請參閱 PostgreSQL 文件的 [PostgreSQL 訊息格式](https://www.postgresql.org/docs/current/protocol-message-formats.html)中的 `StartupMessage`。

透過 RDS 代理連線時，啟動訊息可包含下列目前辨識的參數：
+  `user` 
+  `database`

 啟動訊息也可包含下列其他執行時間參數：
+ `[application\$1name](https://www.postgresql.org/docs/current/runtime-config-logging.html#GUC-APPLICATION-NAME) `
+ `[client\$1encoding](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-CLIENT-ENCODING) `
+ `[DateStyle](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-DATESTYLE) `
+ `[TimeZone](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-TIMEZONE) `
+  `[extra\$1float\$1digits](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-EXTRA-FLOAT-DIGITS) `
+  `[ search\$1path ](https://www.postgresql.org/docs/current/runtime-config-client.html#GUC-SEARCH-PATH)` 

 如需 PostgreSQL 傳訊的詳細資訊，請參閱 PostgreSQL 文件中的[前端/後端通訊協定](https://www.postgresql.org/docs/current/protocol.html)。

 針對 PostgreSQL，如果您使用的是 JDBC，建議採取下列做法以避免鎖定：
+ 將 JDBC 連線參數 `assumeMinServerVersion` 至少設為 `9.0` 以避免鎖定。這樣可防止在執行 `SET extra_float_digits = 3` 時，JDBC 驅動程式在連線啟動期間執行額外的往返。
+ 將 JDBC 連線參數 `ApplicationName` 設為 `any/your-application-name` 以避免鎖定。這麼做可防止在執行 `SET application_name = "PostgreSQL JDBC Driver"` 時，JDBC 驅動程式在連線啟動期間執行額外的往返。請注意，JDBC 參數為 `ApplicationName`，但 PostgreSQL `StartupMessage` 參數為 `application_name`。

如需詳細資訊，請參閱[避免鎖定 RDS Proxy](rds-proxy-pinning.md)。如需如何使用 JDBC 連線的詳細資訊，請參閱 PostgreSQL 文件中的[連線至資料庫](https://jdbc.postgresql.org/documentation/setup/)。