Centos 使用yum安装MongoDB 4.0 以及 mongodb 用户授权
1.配置yum源
cd /etc/yum.repos.d vim mongodb-org-4.0.repo
2.加入源内容(阿里云的源)
[mngodb-org] name=MongoDB Repository baseurl=http://mirrors.aliyun.com/mongodb/yum/redhat/7Server/mongodb-org/4.0/x86_64/ gpgcheck=0 enabled=1
3.更新包
yum update
4.安装mongodb4.0
yum -y install mongodb-org
5.修改配置文件
vim /etc/mongod.conf 修改date文件位置,给目录加权限,更改属主属组等 127.0.0.1 修改为 0.0.0.0 别的机器才能连接
6.启动
systemctl start mongod.service
要设置账号密码的话,进入admin库,设置好账号密码后,修改配置文件后重启mongod服务即可:
#security:
authorization: enabled
设置账号密码:
> use admin #切换到admin库下
> db.createUser({user:"superadmin",pwd:"123456",roles:[{role:'root',db:'admin'}]}) #创建超级管理员用户
> db.createUser({user:'useradmin',pwd:'123456', roles:[{role:'userAdminAnyDatabase', db:'admin'}]}) #创建用户管理员账户(能查询其他库集合,但不能查询集合内容)
> db.createUser({user:'admin',pwd:'123456', roles:[{role:'readWriteAnyDatabase', db:'admin'}]}) #创建访问任意库读写的账户
> db.createUser({user:"bkuser2",pwd:"123456",roles:[{role:"backup",db:"admin"}]}) #创建备份数据的账户
> db.createUser({user:"rtuser3",pwd:"123456",roles:[{role:"restore",db:"admin"}]}) #创建还原数据的账户
注意:新建备份、恢复账户时,roles里面的db必须填写admin,不然会报错
> use test #切换到test库
> db.createUser({user:'user1',pwd:'user1',roles:[{role:'readWrite',db:'test'}]}) #创建只对test库有读写权限的账户
用户验证
用户在哪个库新建账户授权,就需要在哪个库进行auth验证,账号是跟着库走的,所以在指定库里授权,必须也在指定库里进行账户验证。
> db #查看当前所在库
Admin #当前位置在admin库下,用户验证只能验证在admin库里授权的账户
> show tables #查看当前所在库下的所有集合
> db.auth("superadmin","123456") #验证账户superadmin,返回值为1,代表没问题,可以使用
1
> db.auth("useradmin","123456") #验证账户useradmin,返回值为1,代表没问题,可以使用
1
> db.auth("user1","user1") #在admin库下验证user1,报错身份验证失败,返回值为0(因为该用户实在test库下)
Error: Authentication failed.
0
> use test #切换到test库
switched to db test
> db.auth("user1","user1") #在test库验证user1,返回值为1,代表没问题,可以使用
1
说明:账户在哪个库创建,就要在哪个库认证,并且使用调用脚本链接时,要选择好用户,比如我要用脚本调用链接test库,就需要在test库下面创建一个读、写、读写(具体视情况而定)的权限的账户。
查询账户
查询所有的账户信息:
> use admin #切换到admin库下
> db.system.users.find() #查看system.users集合,里面有所有授权的账户信息
查询某一库下的所有用户:
>use test #切换到所对应的库
>show users #显示在此库授权的用户信息
查询指定用户的相关信息:
> db.getUser("user1")
{
"_id" : "test.user1",
"user" : "user1",
"db" : "test",
"roles" : [
{
"role" : "readWrite",
"db" : "test"
}
]
}
> db.getUser("root") #查询的账户没有在当前授权库的时候会报null值
Null
修改用户权限
可以通过如下命令修改账户权限,但使用此命令修改权限时,会覆盖原先的所有权限
> use admin #切换到admin库
> db.getUser("king") #查看king账户的信息
{
"_id" : "admin.king",
"user" : "king",
"db" : "admin",
"roles" : [
{
"role" : "restore",
"db" : "admin"
}
]
}
> db.updateUser("king",{roles:[{role:"readAnyDatabase",db:"admin"}]}) #修改账户king的权限
> db.getUser("king") #查询账户king的权限
{
"_id" : "admin.king",
"user" : "king",
"db" : "admin",
"roles" : [
{
"role" : "readAnyDatabase",
"db" : "admin"
}
]
}
在原来的权限上新增权限:
> db.getUser("liushubo") #查询账户liushubo的权限信息
{
"_id" : "admin.liushubo",
"user" : "liushubo",
"db" : "admin",
"roles" : [
{
"role" : "backup", #数据备份权限
"db" : "admin"
}
]
}
> db.grantRolesToUser("liushubo",[{role:"restore",db:"admin"}]) #给账户liushubo添加数据恢复权限
> db.getUser("liushubo") #查询账户liushubo的权限信息
{
"_id" : "admin.liushubo",
"user" : "liushubo",
"db" : "admin",
"roles" : [
{
"role" : "restore", #数据备份权限
"db" : "admin"
},
{
"role" : "backup", #数据恢复权限
"db" : "admin"
}
]
}
修改账户密码
使用db.changeUserPassword(“username","newPasswd") 修改
> db.changeUserPassword("user1","123456") #修改账户user1的密码为123456
删除用户
> db.dropUser("user1") #删除账户user1
true
………………………………