mongodb用户权限管理配置

Posted charon2

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb用户权限管理配置相关的知识,希望对你有一定的参考价值。

 

MongoDB常用命令

[[email protected] ~]# ps -ef|grep mongod
[[email protected] ~]# mongo --host=127.0.0.1 --port=27017
MongoDB shell version: 3.2.7
connecting to: 127.0.0.1:27017/test
 
> show dbs  #显示数据库列表 
> show collections  #显示当前数据库中的集合(类似关系数据库中的表)
> show users  #显示用户
> use <db name>  #切换当前数据库,如果数据库不存在则创建数据库。 
> db.help()  #显示数据库操作命令,里面有很多的命令 
> db.foo.help()  #显示集合操作命令,同样有很多的命令,foo指的是当前数据库下,一个叫foo的集合,并非真正意义上的命令 
> db.foo.find()  #对于当前数据库中的foo集合进行数据查找(由于没有条件,会列出所有数据) 
> db.foo.find( { a : 1 } )  #对于当前数据库中的foo集合进行查找,条件是数据中有一个属性叫a,且a的值为1

 

其他命令

> db.dropDatabase()  #删除当前使用数据库
> db.cloneDatabase("127.0.0.1")   #将指定机器上的数据库的数据克隆到当前数据库
> db.copyDatabase("mydb", "temp", "127.0.0.1")  #将本机的mydb的数据复制到temp数据库中
> db.repairDatabase()  #修复当前数据库
> db.getName()  #查看当前使用的数据库,也可以直接用db
> db.stats()  #显示当前db状态
> db.version()  #当前db版本
> db.getMongo()  #查看当前db的链接机器地址
> db.serverStatus()  #查看数据库服务器的状态

需求

用户权限设置

网上总结了四条

  1. MongoDB是没有默认管理员账号,所以要先添加管理员账号,再开启权限认证。
  2. 切换到admin数据库,添加的账号才是管理员账号。
  3. 用户只能在用户所在数据库登录,包括管理员账号。
  4. 管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。

创建管理员账号

In the admin database, add a user with the userAdminAnyDatabase role. 
For example, the following creates the user myUserAdmin in the admin 
database:

在admin数据库中,添加一个用户并赋予userAdminAnyDatabase角色。 
例如,下面是在admin数据库中创建一个名为myUserAdmin用户。

 

注意: The database where you create the user (in this example, admin) is the user’s authentication database. Although the user would authenticate to this database, the user can have roles in other databases; i.e. the user’s authentication database does not limit the user’s privileges.

注意:你创建用户的这个数据库(这里就是admin数据库)是用户认证数据库。 
尽管用户是在这个数据库认证,而用户又有其他数据库的角色;即,用户认证数据库不限制用户权限。

 创建用户命令:

db.createUser(user, writeConcern);

db.createUser({ 
    user: "<name>",
    pwd: "<cleartext password>",
    customData: { <any information> },
    roles: [
        { role: "<role>", db: "<database>" } | "<role>",
        ...
    ]
});

参数详解

user(需要创建的用户信息)

  • user:新建用户名
  • pwd:新建用户密码
  • customData:存放一些用户相关的自定义数据
  • roles:数组类型,配置用户的权限

 

常用权限

 

角色类型权限级别
普通用户角色 read、readWrite
数据库管理员角色 dbAdmin、dbOwner、userAdmin
集群管理员角色 clusterAdmin、clusterManager、clusterMonitor、hostManager
数据库备份与恢复角色 backup、restore
所有数据库角色 readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色 root
核心角色 __system

 

writeConcern(对写操作时的异常处理机制)

下面我们列一下WriteConcern的几种抛出异常的级别参数:

  • WriteConcern.NONE:没有异常抛出
  • WriteConcern.NORMAL:仅抛出网络错误异常,没有服务器错误异常
  • WriteConcern.SAFE:抛出网络错误异常、服务器错误异常;并等待服务器完成写操作。
  • WriteConcern.MAJORITY: 抛出网络错误异常、服务器错误异常;并等待一个主服务器完成写操作。
  • WriteConcern.FSYNC_SAFE: 抛出网络错误异常、服务器错误异常;写操作等待服务器将数据刷新到磁盘。
  • WriteConcern.JOURNAL_SAFE:抛出网络错误异常、服务器错误异常;写操作等待服务器提交到磁盘的日志文件。
  • WriteConcern.REPLICAS_SAFE:抛出网络错误异常、服务器错误异常;等待至少2台服务器完成写操作。

 

代码案例

db.createUser({ 
    user: "root",
    pwd: "123456",
    customData: {
        create_date: ‘2016-09-03‘
    },
    roles: [
        {
            role: "read", 
            db: "db_test_one" 
        },{
            role: "userAdmin", 
            db: "db_test_two" 
        }
    ]
});

查找指定用户

方法一

db.system.users.find()

 方法二

db.getUser(username, args)

 参数详解

username:要查找的用户名

args(查询用户时的附加参数)

  • showPrivileges:布尔值,默认为false。显示用户的权限
  • showCredentials:布尔值,默认为false。显示用户的password hash

查找全部用户

db.getUsers()

修改用户

db.updateUser(username, update, writeConcern)

db.updateUser(
   "<username>",
   {
     customData : { <any information> },
     roles : [
               { role: "<role>", db: "<database>" } | "<role>",
               ...
             ],
     pwd: "<cleartext password>"
    },
    writeConcern: { <write concern> }
)

参数详解

参数详解

username:要查找的用户名

update:更新后的数据

  • customData:设置用户的自定义数据
  • roles:数组类型,设置用户的角色
  • pwd:字符串类型,设置修改的用户名

writeConcern:对写操作时的异常处理机制,详情参考db.createUser

代码案例

db.updateUser(
    "root",{
        customData:{
            create_time:"2016-09-03",
            update_time:"2016-09-04"
        },
        pwd:"123456"
    }
)

修改用户密码

db.changeUserPassword(username, password)

 

参数详解

username:要修改的用户名

password:要修改的密码

mechanism:密码验证机制

  • SCRAM-SHA-1
  • MONGODB-CR

digestPassword:布尔值,是否为加密密码

删除用户

方法一

db.system.users.remove(query)

 方法二

db.removeUser(username)

 方法三

db.dropUser(username, writeConcern) //从当前数据库删除用户

db.dropAllUsers(writeConcern) //从当前数据库删除所有用户

 



以上是关于mongodb用户权限管理配置的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 3.2 用户权限管理配置

MongoDB系列---用户及权限管理02

Mongodb用户权限管理配置

MongoDB下配置用户权限

python | ubuntu 中 mongodb 数据读写权限配置

MongoDB权限管理之用户名和密码的操作