6

MongoDB 用户认证及操作 - rxliuli blog

 3 years ago
source link: https://blog.rxliuli.com/p/13b0e6026a7942c29c2784508bd77526/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

如果还没有安装 MongoDB 可以参考:Windows 下 MongoDB 便携版安装与初始化

启动 mongodmongo shell 服务

1
2
3
4
5
# 启动 mongodb 服务
mongod --port 27017 --dbpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\data" --logpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\log\mongodb.log"

# 启动 mongo shell
mongo --port 27017

注:mongodb 的默认 port 就是 27017,所以也可以省略不写

创建管理员用户

1
2
3
4
5
6
7
8
9
10
11
12
# 切换到 admin 数据库
use admin;
# 创建用户 root, 密码是 root 的 admin 账号了
db.createUser(
{
user: "root",
pwd: "root",
roles: [
{role: "root", db: "admin"}
]
}
)

验证用户登录

  1. 重启一下 mongod 服务
1
2
# 这里的 --auth 选项就代表着启用身份认证
mongod --auth --port 27017 --dbpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\data" --logpath "D:\Program\mongodb-win32-x86_64-2008plus-ssl-4.0.1\mongodb_data\log\mongodb.log"
  1. 测试 root 用户是否能正常登录
  • 使用用户名/密码认证连接 mongodb
    1
    2
    # 这里添加了 --authenticationDatabase 设置认证的数据库
    mongo --port 27017 -u "root" -p "root" --authenticationDatabase "admin"
  • 连接到 mongo 客户端后验证
    1
    2
    3
    mongo --port 27017
    use admin;
    db.auth("root", "root");

    创建普通用户

1
2
3
4
5
6
7
8
9
10
11
12
13
# 切换到 test 数据库
use test;
# 创建用户 test, 密码是 test 的普通账号了
# 主要变化在于 role,修改为对数据库 [test] 拥有 [可读写] 权限
db.createUser(
{
user: "test",
pwd: "test",
roles: [
{ role: "readWrite", db: "yapi" }
]
}
)

使用 test 这个普通用户在登陆后能看到的也只有自己的数据库呢(如果数据库存在的话)

下面是一些常用的权限

  • Read:允许用户读取指定数据库
  • readWrite:允许用户读写指定数据库
  • dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile
  • userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户
  • clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  • readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限
  • readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限
  • userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限
  • dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。
  • root:只在 admin 数据库中可用。超级账号,超级权限

使用 url 访问

1
2
3
4
# 不使用用户认证
mongodb://ip:port/db
# 使用用户认证
mongodb://username:password@ip:port/db
  • 查看全局的所有账号

    1
    2
    use admin;
    db.system.users.find().pretty()
  • 查看当前库下的用户

    1
    2
    use admin;
    show users;
  • 1
    2
    3
    4
    5
    # 给用户 test 追加新的权限
    db.grantRolesToUser(
    "test",
    [{role:"readWrite", db:"test"}]
    )
  • 1
    2
    3
    4
    5
    6
    7
    8
    9
    # 替换用户 test 的权限
    db.updateUser(
    "test",
    {
    roles: [
    {role:"read", db:"test"}
    ]
    }
    )

删除掉名为 test 的用户

1
db.dropUser('test')

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK