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
………………………………