修改用户密码
要修改用户密码,要求用户具有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
删除用户
修改用户权限(角色)
修改用户权限
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数据库角色