

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

# 管理 Amazon DocumentDB 使用者
<a name="security.managing-users"></a>

在 Amazon DocumentDB 中，使用者搭配密碼對叢集進行驗證。每個叢集都有在叢集建立期間建立的主要登入憑證。

**注意**  
 所有在 **2020 年 3 月 26 日**之前建立的新使用者均獲授予 `dbAdminAnyDatabase`、`readWriteAnyDatabase` 和 `clusterAdmin` 角色。建議您重新評估所有使用者並視需要修改角色，以對叢集中所有使用者強制執行最低權限。  
如需詳細資訊，請參閱[使用角色型存取控制進行資料庫存取](role_based_access_control.md)。

## 主要和`serviceadmin`使用者
<a name="security.managing-users-master"></a>

新建立的 Amazon DocumentDB 叢集有兩個使用者：主要使用者和`serviceadmin`使用者。

*主要使用者*是單一的特權使用者，可執行管理任務，並建立具有 角色的其他使用者。當您第一次連線到 Amazon DocumentDB 叢集時，您必須使用主要登入憑證進行身分驗證。主要使用者會在建立叢集時收到 Amazon DocumentDB 叢集的這些管理許可，並獲授予 的角色`root`。

建立叢集時，會隱含地建立 `serviceadmin` 使用者。每個 Amazon DocumentDB 叢集都有一個`serviceadmin`使用者，可提供管理叢集 AWS 的能力。您無法以 `serviceadmin` 身分進行登入、捨棄、重新命名、變更密碼或變更許可。任何這麼做的嘗試都會造成錯誤。

**注意**  
無法刪除 Amazon DocumentDB 叢集的主要和`serviceadmin`使用者，且主要`root`使用者的角色無法撤銷。  
如果您忘記主要使用者密碼，您可以使用 AWS 管理主控台 或 來重設 AWS CLI。

## 建立其他使用者
<a name="security.managing-users-creating"></a>

以主要使用者 （或任何具有角色 的使用者`createUser`) 身分連線之後，您可以建立新的使用者，如下所示。

```
db.createUser(
    {
        user: "sample-user-1",
        pwd: "password123",
        roles: 
            [{"db":"admin", "role":"dbAdminAnyDatabase" }]
    }
)
```

若要檢視使用者詳細資訊，您可以使用 `show users` 命令，如下所示。您另外可以使用 `dropUser` 命令移除使用者。如需詳細資訊，請參閱[常見命令](role_based_access_control.md#role_based_access_control-common_commands)。

```
show users
{ 
    "_id" : "serviceadmin",
    "user" : "serviceadmin",
    "db" : "admin",
    "roles" : [
    	{
            "role" : "root",
            "db" : "admin"
        }
    ]
},

{ 
    "_id" : "myPrimaryUser",
    "user" : "myPrimaryUser",
    "db" : "admin",
    "roles" : [
    	{
            "role" : "root",
            "db" : "admin"
        }
    ]
},

{
    "_id" : "sample-user-1",
    "user" : "sample-user-1",
    "db" : "admin",
    "roles" : [
    	{
            "role" : "dbAdminAnyDatabase",
            "db" : "admin"
    	}
    ]
}
```

在此範例中，新使用者 `sample-user-1` 歸屬於 `admin` 資料庫。新使用者一律如此。Amazon DocumentDB 沒有 的概念，`authenticationDatabase`因此所有身分驗證都會在`admin`資料庫的內容中執行。

建立使用者時，如果您在指定角色時省略 `db` 欄位，Amazon DocumentDB 會隱含地將角色歸因於發出連線的資料庫。例如，如果您的連線是針對資料庫 `sample-database` 發出，並執行以下命令，則使用者 `sample-user-2` 將建立於 `admin` 資料庫中，並將具有資料庫 `sample-database` 的 `readWrite` 許可。

```
db.createUser(
    {
        user: "sample-user-2", 
        pwd: "password123", 
        roles: 
            ["readWrite"]
    }
)
```

建立具有所有資料庫範圍的角色的使用者 (例如，`readInAnyDatabase`) 時，您必須在建立使用者時位於 `admin` 資料庫內容中，或是在建立使用者時明確地陳述角色的資料庫。

要切換資料庫的內容，您可以使用下面的命令。

```
use admin
```

若要進一步了解以角色為基礎的存取控制，以及在叢集中的使用者之間強制執行最低權限，請參閱[使用角色型存取控制進行資料庫存取](role_based_access_control.md)。

## 自動輪換 Amazon DocumentDB 的密碼
<a name="security.managing-users-rotating-passwords"></a>

使用 時 AWS Secrets Manager，您可以使用向 Secrets Manager 發出的 API 呼叫取代程式碼中的硬式編碼登入資料 （包括密碼），以程式設計方式擷取秘密。這有助於確保不讓某人研究您的程式碼而盜用秘密，因為秘密根本不在程式碼中。此外，您可以設定 Secrets Manager，根據您指定的排程自動輪換秘密。這可讓您以短期秘密取代長期秘密，有助於大幅降低洩漏風險。

使用 Secrets Manager，您可以使用 Secrets Manager 提供的 AWS Lambda 函數自動輪換 Amazon DocumentDB 密碼 （即*秘密*)。

如需 AWS Secrets Manager 和 Amazon DocumentDB 原生整合的詳細資訊，請參閱以下內容：
+ [部落格：如何在 Secrets Manager 中 AWS 輪換 Amazon DocumentDB 和 Amazon Redshift 登入資料](https://aws.amazon.com/blogs/security/how-to-rotate-amazon-documentdb-and-amazon-redshift-credentials-in-aws-secrets-manager/)
+ [什麼是 AWS Secrets Manager？](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html)
+ [輪換 AWS Secrets Manager 秘密](https://docs.aws.amazon.com/secretsmanager/latest/userguide/rotating-secrets-documentdb.html)
+ [Secrets Manager 中的 Amazon DocumentDB 登入資料](https://docs.aws.amazon.com/secretsmanager/latest/userguide/reference_secret_json_structure.html#reference_secret_json_structure_docdb)