

# Amazon RDS 的数据库身份验证
<a name="database-authentication"></a>

 Amazon RDS 支持多种对数据库用户进行身份验证的方法。

密码、Kerberos 和 IAM 数据库身份验证使用不同的方法对数据库进行身份验证。因此，特定用户只能使用一种身份验证方法登录到数据库。

对于 PostgreSQL，仅为特定数据库的用户使用以下角色设置之一：
+ 要使用 IAM 数据库身份验证，请为用户分配 `rds_iam` 角色。
+ 要使用 Kerberos 数据库身份验证，请为用户分配 `rds_ad` 角色。
+ 要使用密码身份验证，请勿为用户分配 `rds_iam` 或 `rds_ad` 角色。

不要通过嵌套的授予访问权限直接或间接地将 `rds_iam` 和 `rds_ad` 角色分配给 PostgreSQL 数据库的用户。如果将 `rds_iam` 角色添加到主用户，IAM 身份验证优先于密码身份验证，因此主用户必须以 IAM 用户身份登录。

**重要**  
我们强烈建议不要直接在应用程序中使用主用户。请遵守使用数据库用户的最佳实践，按照您的应用程序所需的最少权限创建用户。

**Topics**
+ [密码验证](#password-authentication)
+ [IAM 数据库身份验证](#iam-database-authentication)
+ [Kerberos 身份验证](#kerberos-authentication)

## 密码验证
<a name="password-authentication"></a>

使用*密码身份验证*，数据库将执行用户账户的所有管理。您可以使用 `CREATE USER` 等 SQL 语句创建用户，其中包含数据库引擎指定密码所需的适当子句。例如，在 MySQL 中，语句为 `CREATE USER` *名称* `IDENTIFIED BY` *密码*，而在 PostgreSQL 中，语句为 `CREATE USER` *名称* `WITH PASSWORD` *密码*。

使用密码身份验证，数据库可控制和验证用户账户。如果数据库引擎具有强大的密码管理功能，那么可以增强安全性。当您拥有较小的用户社区时，使用密码身份验证可能更易于管理数据库身份验证。因为在这种情况下会生成明文密码，因此与 AWS Secrets Manager 集成可以增强安全性。

有关将 Secrets Manager 与 Amazon RDS 结合使用的信息，请参阅《AWS Secrets Manager User Guide》**中的 [Creating a basic secret](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_create-basic-secret.html) 和 [Rotating secrets for supported Amazon RDS databases](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-rds.html)。有关以编程方式在自定义应用程序中检索密钥的信息，请参阅 *AWS Secrets Manager 用户指南*中的[检索密钥值](https://docs.aws.amazon.com/secretsmanager/latest/userguide/manage_retrieve-secret.html)。

## IAM 数据库身份验证
<a name="iam-database-authentication"></a>

您可以使用 AWS Identity and Access Management（IAM）数据库身份验证对数据库实例进行身份验证。利用此身份验证方法，您在连接到数据库实例时将无需使用密码。而是使用身份验证令牌。

有关 IAM 数据库身份验证的更多信息，包括特定数据库引擎的可用性信息，请参阅[适用于 MariaDB、MySQL 和 PostgreSQL 的IAM 数据库身份验证](UsingWithRDS.IAMDBAuth.md)。

## Kerberos 身份验证
<a name="kerberos-authentication"></a>

 Amazon RDS 支持使用 Kerberos 和 Microsoft Active Directory 对数据库用户进行外部身份验证。Kerberos 是一种网络身份验证协议，它使用票证和对称密钥加密，而不再需要通过网络传输密码。Kerberos 已内置到 Active Directory 中，用于在网络资源（如数据库）中对用户进行身份验证。

 Amazon RDS 支持 Kerberos 和 Active Directory，从而为数据库用户提供单一登录和集中身份验证的好处。您可以将用户凭证保存在 Active Directory 中。Active Directory 提供了一个集中位置，以存储和管理多个数据库实例的凭证。

要使用来自自行管理的 Active Directory 的凭证，您需要针对数据库实例加入的 Microsoft Active Directory 设置与 Directory Service 的信任关系。

 RDS for PostgreSQL 和 RDS for MySQL 通过全林性身份验证或选择性身份验证，支持单向和双向林信任关系。

在某些情况下，可以通过外部信任关系配置 Kerberos 身份验证。这要求自行管理的 Active Directory 具有更多设置。这包括但不限于 [Kerberos Forest Search Order](https://learn.microsoft.com/en-us/troubleshoot/windows-server/active-directory/kfso-not-work-in-external-trust-event-is-17)。

Microsoft SQL Server 和 PostgreSQL 数据库实例支持单向和双向林信任关系。Oracle 数据库实例支持单向和双向外部和林信任关系。有关更多信息，请参阅 *Directory Service 管理指南* 中的[何时创建信任关系](https://docs.aws.amazon.com/directoryservice/latest/admin-guide/setup_trust.html)。

有关针对特定数据库引擎的 Kerberos 身份验证的信息，请参阅以下内容：
+  [将 AWS Managed Active Directory 用于 RDS for SQL Server](USER_SQLServerWinAuth.md) 
+  [对 Amazon RDS for MySQL 进行 Kerberos 身份验证](mysql-kerberos.md) 
+  [为 Amazon RDS for Oracle 配置 Kerberos 身份验证](oracle-kerberos.md) 
+  [在 Amazon RDS for PostgreSQL 中使用 Kerberos 身份验证](postgresql-kerberos.md) 
+  [将 Kerberos 身份验证用于 Amazon RDS for Db2](db2-kerberos.md) .

**注意**  
目前，MariaDB 数据库实例不支持 Kerberos 身份验证。