mongodb用户管理

修改用户密码

要修改用户密码,要求用户具有changePassword或changeOwnPassword的权限,有以下两种方式用来修改用户密码:
db.changeUserPassword(<user_name>,<new_password>)
db.updateUser(<user_name>,{update_object})

db.changeUserPassword()示例:

admin@undefined$ db.auth("root","admin")
1

admin@undefined$ db.changeUserPassword("root","123456")

admin@undefined$ db.auth("root","admin")
Error: Authentication failed.
0
admin@undefined$ db.auth("root","123456")
1
admin@undefined$ show dbs
admin  0.000GB
local  0.000GB
test   0.000GB
test1  0.000GB

可以看到在修改root用户的密码后,原来的密码验证就失败了,但是当前这个会话还是可以正常执行操作,新会话则需要用修改后的密码进行验证

db.updateUser()示例:

admin@undefined$ db.auth("root","123456")
1

admin@undefined$ db.updateUser("root",{pwd:"admin123"})

admin@undefined$ db.auth("root","admin123")
1
admin@undefined$ db.auth("root","123456")
Error: Authentication failed.
0

删除用户

删除test用户
> db.dropUser("test")
true
 
确认test用户是否存在
> db.getUser("test")
null
 
删除所有用户
> db.dropAllUsers()
2

修改用户权限(角色)

修改用户权限

db.updateUser("readtest",{"roles":[{role:"readWrite",db:"test"}]})

添加用户权限(切换到有权限操作的数据库下)

db.grantRolesToUser('lianguser8',[{role:'readWrite',db:'jundb'}])

移除用户权限(切换到有权限操作的数据库下)

db.revokeRolesFromUser('lianguser8',[{role:'readWrite',db:'jundb'}])


2.4之后的版本用户管理

添加管理员账号

> use admin;

switched to db admin

> db.createUser({user:"admin",pwd:"oracle",roles:[{role:"userAdminAnyDatabase",db:"admin"}]})

Successfully added user: {

    "user" : "admin",

    "roles" : [

        {

            "role" : "userAdminAnyDatabase",

            "db" : "admin"

        }

    ]

}

> show users;

{

    "_id" : "admin.admin",

    "user" : "admin",

    "db" : "admin",

    "roles" : [

        {

            "role" : "userAdminAnyDatabase",

            "db" : "admin"

        }

    ]

}

添加一个用户,有一个角色

db.createUser({user:"backupuser",pwd:"oracle",roles:[{role:"backup","restore"],db:"admin"}]})

添加一个用户有多个角色

db.createUser({user:"backupuser",pwd:"oracle",roles:[{role:"backup",db:"admin"},{role:"restore",db:"admin"}]})

开启权限验证

用户在哪个库新建授权,则需要在哪个库进行auth验证,注意一点,帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)。    

在配置文件 /mongodb.conf 添加如下参数。

auth = true

或者mongod 加上 --auth 参数

mongod --auth

然后重启数据库。

验证权限是否生效

mongo --port 33988

MongoDB shell version: 3.2.14-8-g94ea659

connecting to: 127.0.0.1:33988/test

> show dbs;

2017-08-28T10:53:39.639+0800 E QUERY [thread1] Error: listDatabases failed:{

    "ok" : 0,

    "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",

    "code" : 13

} :

_getErrorWithCode@src/mongo/shell/utils.js:25:13

Mongo.prototype.getDBs@src/mongo/shell/mongo.js:62:1

shellHelper.show@src/mongo/shell/utils.js:761:19

shellHelper@src/mongo/shell/utils.js:651:15

@(shellhelp2):1:1

> use admin

switched to db admin

> db.auth('admin','oracle')

1

> show dbs;

admin 0.000GB

liangdb 0.000GB

liangdb2 0.000GB

local 0.000GB

添加普通用户

> use liangdb;

switched to db liangdb

> db.createUser({user:"lianguse",pwd:"oracle",roles:[{role:"readWrite",db:"liangdb"}]})

Successfully added user: {

    "user" : "lianguse",

    "roles" : [

        {

            "role" : "readWrite",

            "db" : "liangdb"

        }

    ]

}

mongo --port 33988

MongoDB shell version: 3.2.14-8-g94ea659

connecting to: 127.0.0.1:33988/test

> use liangdb;

switched to db liangdb

> db.auth('lianguse','oracle')

1

mongodb-修改用户密码

use test

db.changeUserPassword("test", "123456");

mongodb-删除用户

use test

db.removeUser(用户名);

2.4之前的版本用户管理
 

创建某个数据库的管理用户

进入liangdb数据库:

>use liangdb;

添加一个默认是拥有liangdb数据库所有权限用户

> db.addUser("liangguojun","pwdliangguojun");

{

    "user" : "liangguojun",

    "readOnly" : false,

    "pwd" : "d54fc4e6152a677246f0fe553acf3727",

    "_id" : ObjectId("599f8a86699fb913970b6ae3")

}

添加一个默认是拥有liangdb数据库只读权限权限用户

> db.addUser("liangguojun2","pwdliangguojun",true);

{

    "user" : "liangguojun2",

    "readOnly" : true,

    "pwd" : "2275424f3245aa522f223e17a29a22c9",

    "_id" : ObjectId("599f8abd699fb913970b6ae4")

}

查看一下所有的用户

> db.system.users.find();

或者

> show users;

show users命令只能查看当前数据库下的用户。

删除用户

> db.system.users.remove({user:"liangguojun"});

或者

> db.removeUser("liangguojun2");

创建超级用户

进入admin数据库

>use admin

在admin中创建的所有用户都是超级用户,可以操作任何的数据库

>db.addUser("admin","admin");默认是拥有所有数据库所有权限

>db.addUser("admin1","admin",true);拥有所有数据库的只读权限

 MongoDB数据库角色

查看一个用户具有的权限和角色
> db.getUser("lianguser")
{
 "_id" : "jundb.lianguser",
 "user" : "lianguser",
 "db" : "jundb",
 "roles" : [
  {
   "role" : "dbOwner",
   "db" : "jundb"
  }
 ]
}
 
内建的角色
数据库用户角色:read、readWrite;
数据库管理员角色:dbAdmin、userAdmin、dbOwner;
集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
备份恢复角色:backup、restore;
所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
超级用户角色:root // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
内部角色:__system
 
 
MongoDB角色说明
普通用户角色:
Read:允许用户读取指定数据库。
readWrite:允许用户读写指定数据库。
 
管理员角色:
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户。
dbOwner:单数据库最大权限(dbAdmin+userAdmin)。
 
所有数据库角色:
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
 
root:只在admin数据库中可用。超级账号,超级权限。


 

原文地址:https://www.cnblogs.com/liang545621/p/7390927.html