mongodb添加用户验证

mongodb在默认的情况下是无认证启动的,也就是不需要密码就可以访问连接,如果公网开放的话,这是很危险的行为,数据可能会被恶意篡改和删除,是一个很大的安全问题。

所以生产环境下,势必要给mongodb加上用户验证并且关闭端口公网访问。

那么怎么给数据添加验证呢?

非auth的情况下先关闭已启动的mongodb

# 切换到admin数据库
use admin
# 关闭
db.shutdownServer()
# 如果关不掉提示认证信息,说明现在已经是认证方式启动的mongo,先输入密码
db.auth("username", "password")
# 如果忘记密码了,请查看
https://blog.csdn.net/asdfsadfasdfsa/article/details/65437422

先看一些自己有哪些数据库

# 在没有auth的情况下
> show dbs
admin           0.000GB
yourdb          0.044GB
coex2020        0.000GB
config          0.000GB
flask_profiler  0.000GB
local           0.000GB

创建一个admin用户

# 首先要创建一个admin的root用户
> use admin
# 查看是否已经有用户了
# >db.system.users.find()
# 创建一个admin用户
> db.createUser({user:"admin",pwd:"admin",roles:[{"role":"userAdminAnyDatabase","db":"admin"}]})
# 赋予admin用户root权限
> db.grantRolesToUser("admin", [{role:'root', db:'admin'}])
# 关闭数据库
> db.shutdownServer()
开启auth启动数据库(配置文件启动,配置文件贴在最后)
mongod -f /etc/mongodb.conf 

对 yourdb 添加用户权限

# 切换到yourdb
> use yourdb
# 创建一个yourdb的用户, 赋予其读写权限
> db.createUser({user:'username',pwd:'password',roles:[{role:'readWrite', db:'yourdb'}]})


# 关于用户可以赋予的权限,请看
Read:允许用户读取指定数据库
readWrite:允许用户读写指定数据库
dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile
userAdmin:允许用户向system.users集合写入,可以找指定数据库里创建、删除和管理用户
clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
root:只在admin数据库中可用。超级账号,超级权限

添加权限后访问

> use yourdb
> db.auth("username", "password")
1
# 可以愉快的查询数据了,如果有auth问题,就将赋予对应权限就可以了
>db.collection.find()
添加认证后的访问连接
mongodb://username:password@DBIpAddress:27017/yourdb
# 关于链接的格式可以访问
https://api.mongodb.com/python/current/examples/authentication.html

pymongo权限下访问添加了认证的auth

from pymongo import MongoClient

HOST = 127.0.0.1
username = "username"
password = "password"
# 连接到数据库
conn = MongoClient(host=HOST, 
                   port=27017, 
                   password=password, 
                   username=username, 
                   authSource="yourdb").yourdb
# 切换到数据库下的表                  
collection = conn.your_collection
# 然后就可以愉快的操作mongo了
mongo 配置文件(YAML格式)

关于YAML,这个文件的格式很严格,不支持tab。

按照层级,二层和一层每行要相隔4个空格,三层和二层要相隔4个空格,顶层不需要空格缩进,依次类推。key后面要有一个空格。

# mongodb.conf
# reminds: using YAML style
# Where to store the data.
storage:
    dbPath: /home/bigdata/mongo/data
    journal:
        enabled: true
#where to log
systemLog:
    path: /home/bigdata/mongo/log/mongodb.log
    logAppend: true
    destination: file
# logappend=true
# network setting
net:
    bindIp: 0.0.0.0
    port: 27017
# how the process runs
processManagement:
    fork: true
# Enable journaling, http://www.mongodb.org/display/DOCS/Journaling
# journal=true
# 开启auth,需要账户密码才可以访问
security:
    authorization: enabled

以上就我个人总结出来的mongo auth,希望可以帮助到你。

  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值