
# 通过命令创建数据库账户
#### 操作场景
创建文档数据库实例时，系统会同步创建默认账户rwuser。您可以根据业务需要，通过默认账户rwuser创建其他数据库账户，之后您可以使用默认账户rwuser或已创建的其他账户对数据库中的数据如库、表、索引等进行操作。
#### 使用须知
- 为目标实例创建数据库账户时，建议您开启SSL通道，提高数据的安全性。
- 对于已有的3.2版本的文档数据库实例，不支持创建数据库账户，仅可更改管理员账户rwuser的密码。
- 在创建数据库账户时，要指定命令参数passwordDigestor:"server"，具体操作请参见[官方文档](https://docs.mongodb.com/manual/reference/method/db.createUser/#mongodb-method-db.createUser)。
 
#### 前提条件
成功连接文档数据库实例，请参见《文档数据库服务用户指南》各实例类型下，通过内网和公网连接实例的内容。
#### 账户说明
- 为了给文档数据库实例提供管理服务，您在创建数据库实例时，文档数据库服务会自动为实例创建根账户root（或admin）、监控账户monitor和备份账户backup，这些账户属于华为云实例管理平台，您不能操作或者使用。如果试图删掉、重命名、修改这些账户的密码和权限，会导致出错。
- 对于数据库管理员账户rwuser，以及您所创建的账户，允许修改账户的密码。
- 默认账户rwuser以及通过rwuser创建的账户，对系统库admin和config权限受限，无法进行正常操作。对自身创建的库表，具有充分的操作权限。
- MongoDB的User一般是在某个固定的认证库下创建的。连接数据库时，需要通过参数--authenticationDatabase来明确指定对应的认证库。
- DDS实例中，默认的rwuser用户的认证库，是admin。
- 账户密码连续5次输入错误，账户会被锁定10s。
 
#### 账户密码等级设置
- 文档数据库服务在控制台侧管理员密码的安全策略：
  - 密码长度为8～32个字符。
  
  - 密码必须为英文大小写字母、数字、特殊字符\~!@#%\^\*-_=+?()$的组合。
   
- 文档数据库对在客户端新创的数据库用户，设置了密码安全策略：
  - 密码长度为8～32个字符。
  
  - 密码为英文大小写字母、数字、特殊字符\~@#%-_!\*+=\^?()$的组合。
   
创建实例数据库以及设置密码时，安全起见，为用户提供了密码复杂度校验，如果不满足要求，请根据提示信息调整密码复杂度。
#### 创建账户
1. 选择admin数据库。 
   **use admin**
   
   
2. 以user1账户为例，创建数据库账户。 
   **db.createUser({user: "user1", pwd: "** *\*\*\*\** **", passwordDigestor:"** **server** **", roles:\[{role: "root", db: "admin"}\]})**
   - "*server*"是指在服务端加密密码，为固定值，无需修改。
   
   - "*\*\*\*\**"是新密码，长度8～32位，且必须为英文大小写字母、数字以及特殊字符\~@#%-_!\*+=\^?()$任意3种类型的组合。
   
   - "roles"限制了该账户所具有的权限。若指定一个空数组，表示该账户不具有任何权限。
   
   
   
   
3. 查看创建结果。 
   显示如下信息，说明创建成功。
   ```
   Successfully added user: {
           "user" : "user1",
           "passwordDigestor" : "server",
           "roles" : [
                   {
                           "role" : "root",
                           "db" : "admin"
                   }
           ]
   }
   ```
   
   
 
#### 更改账户的密码
1. 选择admin数据库。 
   **use admin**
   
   
2. 以user1账户为例，修改账户的密码。 
   **db.updateUser("user1", {passwordDigestor:"server",pwd:"newPasswd12#"})**
   - "*server*"是指在服务端加密密码，为固定值，无需修改。
   
   - "*newPasswd12#*"是新密码，长度8～32位，且必须为英文大小写字母、数字以及特殊字符\~@#%-_!\*+=\^?()$任意3种类型的组合。
   
   - 如果密码用在mongodb url中且密码包含@ / % ? # , 则需要进行URL特殊字符转义，替换为对应的十六进制的URL编码（ASCII码）。
   
   
   
   
3. 查看修改结果。显示如下信息，说明修改成功。 
   - 集群
     ```
     mongos>
     ```
     
   
   - 副本集
     ```
     replica:PRIMARY>
     ```
     
   
   - 单节点
     ```
     replica:PRIMARY>
     ```
     
   
   
   
   
 
#### 使用创建的账户连接数据库
数据库账户创建后，可用于连接数据库，操作详情如下：
- [通过Mongo Shell连接集群实例（内网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0314.html)
- [通过Mongo Shell连接集群实例（公网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0319.html)
- [通过Mongo Shell连接副本集实例（内网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0332.html)
- [通过Mongo Shell连接副本集实例（公网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0337.html)
- [通过Mongo Shell连接单节点实例（内网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0350.html)
- [通过Mongo Shell连接单节点实例（公网连接）](https://support.huaweicloud.com/usermanual-dds/dds_03_0354.html)
 
