• mongo对用户简单操作


    开启 MongoDB 服务后,默认是没有权限验证的。直接通过 IP 加端口就可以远程访问数据库,并对 数据库进行任意操作。下面介绍一下如何开启 docker 中 MongoDB 的权限认证。

    安装完 MongoDB 服务后默认有一个 admin 数据库,此时 admin 数据库是空的,没有记录任何权 限相关的信息。当 admin.system.users 一个用户都没有时,即使 MongoDB 启动时添加了--auth 参数,如果没有在 admin 数据库中添加用户,此时不进行任何认证还是可以做任何操作(不管是否以 --auth 参数启动),直到在 admin.system.users 中添加一个用户。因此要开启 MongoDB 的权限 认证需要满足两点条件: admin.system.users 中添加用户 MongoDB 以--auth 启动

    实践进入相应的 docker 容器: docker exec -it mongo /bin/bash

    进入 MongoDB 交互式命令行并切换到 admin 数据库 mongo use admin MongoDB 自带一个数据库叫 admin,可以在这个数据库中创建管理员账号。 所有创建的用户都会存储在 system.users 集合中。 db.getCollectionNames() // [ "system.users", "system.version" ] 创建管理员,赋予 root 权限 db.createUser({user:"admin",pwd:"123456",roles:[{role: 'root', db: 'admin'}]}) /*Successfully added user: { "user" : "admin", "roles" : [ {"role" : "root", "db" : "admin" }]}*/

    认证当前用户管理员 db.auth('admin', ‘123456’) // 返回 1 就是认证成功

    创建普通用户 切换到目标数据库: use iot 创建用户角色,并赋予读写权限

    db.createUser({ user: 'iot', pwd: '123456', roles: [{role: 'readWrite', db: 'iot'}] })

    /*Successfully added user: { "user" : "iot", "roles" : [ {"role" : "readWrite", "db" : "iot" }]}*/

    认证试试: db.auth('iot', '123456') 注意: 用户只能在创建该用户时所在的数据库进行认证。认证成功后,就可以对该数据库执行权限范围内的 操作。

    exit mongo 127.0.0.1/iot -u iot -p db.iot.insert({"name":"菜鸟"})

    连接数据库时,指定用户和密码 mongodb_uri = 'mongodb://iot:123456@localhost:27017/iot?authSource=iot&authMechanism=SCRA M-SHA-1' MongoDB

    连接 URL 可以参考: https://api.mongodb.com/python/current/examples/authentication.html 其他命令: 删除用户:db.dropUser('username') MongoDB 目前内置了 7 个角色。 数据库用户角色:read、readWrite; 数据库管理角色:dbAdmin、dbOwner、userAdmin; 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager; 备份恢复角色:backup、restore; 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、 dbAdminAnyDatabase 超级用户角色:root;这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、 userAdmin、userAdminAnyDatabase) 内部角色:__system 这些角色对应的作用如下: Read:允许用户读取指定数据库 readWrite:允许用户读写指定数据库 dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问 system.profile userAdmin:允许用户向 system.users 集合写入,可以找指定数据库里创建、删除和管理用户 clusterAdmin:只在 admin 数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。 readAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读权限 readWriteAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的读写权限 userAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 userAdmin 权限 dbAdminAnyDatabase:只在 admin 数据库中可用,赋予用户所有数据库的 dbAdmin 权限。 root:只在 admin 数据库中可用。超级账号,超级权限

    修改密码
    方法1:db.changeUserPassword("usertest","changepass");
    方法2:db.updateUser("usertest",{pwd:"changepass1"});
    修改权限
    db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})
    注:updateuser它是完全替换之前的值,如果要新增或添加roles而不是代替它
    则使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()
    db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])   # 修改权限
    db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])   # 删除权限
    删除用户db.dropUser('usertest')

  • 相关阅读:
    Spring系列之访问数据库
    (转载)Java反射机制
    Spring系列之IOC容器
    SpringMVC系列之基本配置
    Java中Comparable和Comparator区别小结
    计算机网络知识点回顾
    Java内部类
    Java接口回调机制
    linux mysql-bin.000001占用磁盘空间过大解决方法
    linux mysql数据库登录密码忘记了怎么办
  • 原文地址:https://www.cnblogs.com/innocenter/p/13889605.html
Copyright © 2020-2023  润新知