mongodb之用户/认证/角色/权限管理

一、yum安装

cat >> /etc/yum.repos.d/mongodb-org.repo << 'EOF'
[mngodb-org-7.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/8/mongodb-org/7.0/x86_64/
gpgcheck=0
enabled=1
EOF

yum -y install mongodb-org

/etc/mongod.conf 配置文件
sed -i 's/bindIp: 127.0.0.1/bindIp: 0.0.0.0/' /etc/mongod.conf

启动
systemctl start mongod

登录
mongosh
> use admin;
> db.createUser({user: "admin",pwd: "123456",roles: ["root"]});

开启认证
vi /etc/mongod.conf
security:
authorization: enabled
注意缩进,参照其他的值来改,若是缩进不对,可能导致后面服务不能重启

重启,使认证生效
systemctl restart mongod

登录
mongosh
> use admin;
> db.auth("admin","123456")

创建数据库并授权
> use education;
> db.createUser({user: "roncoo",pwd: "123456",roles: [ { role: "dbOwner", db: "education" } ]});

删除用户必须由账号管理员来删,所以,切换到admin角色
> use admin
> db.auth("admin","password")
> db.system.users.remove({user:"roncoo"})

二、源码安装
1.下载解压

wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.6.tgz

tar -zxvf mongodb-linux-x86_64-rhel70-4.2.6.tgz  -C /usr/local/mongodb

或 yum install mongodb -y

3.新建目录

mkdir /var/log/mongodb

mkdir /home/mongo/data

mkdir /var/run/mongodb

4.增加配置文件内容

vi /etc/mongod.conf
  dbPath: /home/mongo/data
  bindIp: 0.0.0.0

启动:
mongod --dbpath=/home/mongo/data --logpath=/var/log/mongodb/mongod.log --logappend --port=27017 --fork --auth

停止:
mongod --shutdown --config /etc/mongod.conf  或登陆后操作:db.shutdownServer();

登录:

mongo --port 27017 -u "username" -p "url编码" --authenticationDatabase "admin"

三、用户管理

查看用户信息
use admin
db.getUser("username")
1.添加用户,切换到需要添加用户的db
use xxxx
执行添加
db.addUser(
    {
        user:"username",
        pwd:"password_url编码",
        roles:[
            {role:"read", db:"xxxx"},
            {role:"readWrite", db:"test"}
        ]
    }
)

添加超级用户,切换到admin数据库
use admin
执行添加
db.addUser(
    {
        user:"username",
        pwd:"password_url编码",
        roles:[
            {role:"root", db:"admin"},
            {role:"dbAdminAnyDatabase",db:"admin"}
        ]
    }
)

2.删除用户,切换到用户授权的db
use xx
执行删除操作
db.dropUser("username") 或者:db.system.users.remove({user:"test"})

3.更新用户
切换到用户授权的db
use xx
执行更新,字段会覆盖原来的内容
db.updateUser("username",{
    pwd:"new password_url编码",
    customData:{
        "title":"PHP developer"
    }
})

更新用户密码
use xx
db.changeUserPassword("username","newpassword_url编码")

删除用户角色
use xx
db.revokeRolesFromUser(
    "usename",
    [
      { role: "readWrite", db: "accounts" }
    ]
)  

添加用户角色
use xx
db.grantRolesToUser(
    "reportsUser",
    [
      { role: "root", db: "admin" }
    ]
)

四、基本操作

查看帮助:db.help() 查询数据库:show dbs
创建数据库:use dbName
查看表:show tables;
插入数据:db.<tableName>.insert();
如:db.members.insert({name:"Michael",age:18,...});
查询:db.<tableName>.find();   或  db.system.users.find();  或  show users;
修改:如:db.members.update({name:"Michael"},{$set:{age:20}});
删除表中的数据:如:db.members.remove({name:"Michael"});
删除全部:db.members.remove({});
删除表:db.members.drop();
删除数据库:db.dropDatabase();

五,角色管理

查看角色信息
use admin
db.getRole("rolename",{showPrivileges:true})

六,备份和恢复

#备份
mongodump -h ip:端口 -uroot -p密码 -d 数据库 -o 路径 #备份数据库
mongodump -uroot -p密码 -d 数据库 -c 集合名 -o 路径 #备份数据库某个集合
mongorestore -h ip:端口 -u用户名 -p密码 -d 数据库 --drop --dir /路径/数据库名/

#加密后备份
mongodump -h ip:端口-uroot -p密码 -d 数据库 --authenticationDatabase admin -o 路径
mongodump -uroot -p密码 -d 数据库 -c 集合名 --authenticationDatabase admin -o 路径

mongorestore -uroot -p密码 -d 数据库 --authenticationDatabase admin --drop --dir /路径/数据库名/