MongoDB 用户、角色和认证

  1. 创建数据库
  2. 用户管理
    1. 创建用户
    2. 修改用户密码
    3. 删除用户
    4. 修改用户权限
    5. 删除权限
    6. 查看用户
  3. 角色
  4. 认证

创建数据库

查看所有数据库

show dbs

mongodb是没有创建数据库的命令的,一般是这么做:

# 使用 use 命令切换到 myTest 数据库,若没有系统会自动创建
# 如果我们什么也不干,数据库会被系统回收掉
> use myTest
# 创建一个集合,并创建数据
> db.myuser.insert({"name":"test", age:24})
# 上面这条命令我们并没有显式创建集合 myuser
# mongodb 会自动帮我们创建。
# 这样数据库和一个集合(类似于表的概念)我们就创建好了

用户管理

https://docs.mongodb.com/manual/reference/method/js-user-management/

创建用户

use admin
db.createUser(
  {
    user: 'admin',
    customData:{description:"superuser"},  // 描述,非必需
    pwd: 'password',
    roles: [ { role: 'userAdminAnyDatabase', db: 'admin' } ]
  }
);

修改用户密码

> use admin
switched to db admin
> db.auth("admin", "password")
1
> db.changeUserPassword("admin", "123456")

删除用户

# 从当前数据库中删除指定用户
> db.dropUser("admin2")
true
# 从当前数据库中删除所有用户。
db.dropAllUsers( {w: "majority", wtimeout: 5000} )

修改用户权限

# 为用户授予其他角色。追加权限。
db.grantRolesToUser( "admin", [ { role: "readWrite", db: "my" } ] )

替换用户权限

# 语法
db.updateUser(
   "<username>",
   {
     customData : { <any information> },
     roles : [
       { role: "<role>", db: "<database>" } | "<role>",
       ...
     ],
     pwd: "<cleartext password>",
     authenticationRestrictions: [
        {
          clientSource: ["<IP>" | "<CIDR range>", ...],
          serverAddress: ["<IP>", | "<CIDR range>", ...]
        },
        ...
     ],
     mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ], # New in version 4.0
     passwordDigestor: "<server|client>" # New in version 4.0
   },
   writeConcern: { <write concern> }
)

# 示例
db.updateUser( "appClient01",
{
   customData : { employeeId : "0x3039" },
   roles : [
      { role : "read", db : "assets"  }
   ]
} )

删除权限

# { role: "readWrite", db: "my" } 删除其他数据库的角色
# "readWrite" 删除当前数据库的角色
db.revokeRolesFromUser( "admin",
                        [ { role: "readWrite", db: "my" }, "readWrite" ],
                        { w: "majority" }
                      )

查看用户

> db.getUser("admin")
{
        "_id" : "admin.admin",
        "userId" : UUID("dae54e25-4636-4968-95bf-e83971220178"),
        "user" : "admin",
        "db" : "admin",
        "roles" : [
                {
                        "role" : "readWrite",
                        "db" : "my"
                },
                {
                        "role" : "readWrite",
                        "db" : "readWriteAnyDatabase"
                },
                {
                        "role" : "userAdminAnyDatabase",
                        "db" : "admin"
                }
        ],
        "mechanisms" : [
                "SCRAM-SHA-1",
                "SCRAM-SHA-256"
        ]
}

查看所有用户

> db.getUsers({ filter: { mechanisms: "SCRAM-SHA-256" } })
[
        {
                "_id" : "admin.admin",
                "userId" : UUID("dae54e25-4636-4968-95bf-e83971220178"),
                ...
        }
]
show users
# 或者
db.system.users.find()

角色

角色管理介绍:https://docs.mongodb.com/manual/reference/method/js-role-management/

Built-In Roles(内置角色):https://docs.mongodb.com/manual/reference/built-in-roles/index.html

  1. 数据库用户角色:read、readWrite;
  2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
  3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  4. 备份恢复角色:backup、restore;
  5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  6. 超级用户角色:root
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  7. 内部角色:__system
  • read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
  • userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root:只在 admin 数据库中可用。超级账号,超级权限

https://www.jianshu.com/p/ca08e63fd587

认证

修改配置文件/usr/local/mongodb/bin/mongodb.conf,增加一行 auth = true

Windows 下 修改 C:\Program Files\MongoDB\Server\4.0\bin\mongod.cfg 文件,添加

# https://docs.mongodb.com/manual/reference/configuration-options/#security.authorization
security:
  authorization: enabled

配置文件说明:https://docs.mongodb.com/manual/reference/configuration-options/

使用用户名密码登录

C:\Program Files\MongoDB\Server\4.0\bin>mongo
MongoDB shell version v4.0.9
connecting to: mongodb://127.0.0.1:27017/?gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("388b9f73-24e0-4bec-b2fd-96b957449be7") }
MongoDB server version: 4.0.9
> use admin
switched to db admin
> db.auth("admin", "123456")
1

或者

mongo localhost:27017/admin --authenticationDatabase admin -u admin -p 123456

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 bin07280@qq.com

文章标题:MongoDB 用户、角色和认证

文章字数:1.1k

本文作者:Bin

发布时间:2019-05-28, 13:56:42

最后更新:2019-08-06, 00:07:35

原始链接:http://coolview.github.io/2019/05/28/MongoDB/MongoDB%20%E7%94%A8%E6%88%B7%E3%80%81%E8%A7%92%E8%89%B2%E5%92%8C%E8%AE%A4%E8%AF%81/

版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

目录