spring mvc 添加 mongodb4.x用户权限验证(mongo 设置用户名密码)
- 一、设置用户名密码的初衷
- 一、使用MongoTemplate 配置用户验证
- 二、配置mongodb数据库
- 一、创建管理员权限
- 二、修改配置文档mongod.cfg(位置:安装目录\bin 下)
- 三、重启服务
https://www.shixinwl.com/article/129
一、设置用户名密码的初衷
在默认情况下,mongod是监听在0.0.0.0之上的,任何客户端都可以直接连接27017,且没有认证。这样做的好处是,用户可以即时上手,不用担心被一堆配置弄的心烦意乱。然而坏处也是显而易见,如果直接在公网服务器上如此搭建MongoDB,那么所有人都可以直接访问并修改数据库数据了。
默认情况下,mongod也是没有管理员账户的。因此除非你在admin数据库中使用db.addUser()命令添加了管理员帐号,且使用–auth参数启动mongod,否则在数据库中任何人都可以无需认证执行所有命令。包括delete和shutdown。
此外,mongod还会默认监听28017端口,同样是绑定所有ip。这是一个mongod自带的web监控界面。从中可以获取到数据库当前连接、log、状态、运行系统等信息。如果你开启了–rest参数,甚至可以直接通过web界面查询数据,执行mongod命令。
一、使用MongoTemplate 配置用户验证
1.创建mongo.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mongo="http://www.springframework.org/schema/data/mongo"
xsi:schemaLocation="http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/data/mongo
http://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd">
<!-- 加载mongodb的属性配置文件 -->
<!--<context:property-placeholder location="classpath:mongo.properties" />-->
<!-- 定义mongo对象,对应的是mongodb官方jar包中的Mongo,replica-set设置集群副本的ip地址和端口 -->
<mongo:mongo id="mongo" replica-set="${mongo.hostPort}">
<!-- 一些连接属性的设置 -->
<!--
connections-per-host: 每个主机答应的连接数(每个主机的连接池大小),当连接池被用光时,会被阻塞住
max-wait-time: 被阻塞线程从连接池获取连接的最长等待时间(ms)
connect-timeout:在建立(打开)套接字连接时的超时时间(ms)
socket-timeout:套接字超时时间;该值会被传递给Socket.setSoTimeout(int)
slave-ok:指明是否答应驱动从次要节点或者奴隶节点读取数据
-->
<mongo:options
connections-per-host="${mongo.connectionsPerHost}"
threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}"
connect-timeout="${mongo.connectTimeout}"
max-wait-time="${mongo.maxWaitTime}"
auto-connect-retry="${mongo.autoConnectRetry}"
socket-keep-alive="${mongo.socketKeepAlive}"
socket-timeout="${mongo.socketTimeout}"
slave-ok="${mongo.slaveOk}" write-number="1"
write-timeout="0" write-fsync="true"/>
</mongo:mongo>
<!-- mongo的工厂,通过它来取得mongo实例,dbname为mongodb的数据库名,没有的话会自动创建 -->
<mongo:db-factory dbname="${mongo.dataName}" mongo-ref="mongo" />
<!--设置用户验证-->
<bean id="userCredentials" class="org.springframework.data.authentication.UserCredentials">
<constructor-arg name="username" value="${mongo.username}" />
<constructor-arg name="password" value="${mongo.password}" />
</bean>
<bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate">
<constructor-arg ref="mongo" />
<constructor-arg name="databaseName" value="${mongo.dataName}" />
<!--添加安全验证构造函数参数-->
<constructor-arg ref="userCredentials" />
</bean>
</beans>
2.创建mongo.properties
:
mongo.hostPort=127.0.0.1:27017
mongo.username=dataUser #spring 需要操作的数据库用户名
mongo.password=cdb123456 #spring 需要操作的数据库用户密码
mongo.dataName=nrvsp # spring 需要操作的数据库
#mongodb参数
mongo.connectionsPerHost=8
mongo.threadsAllowedToBlockForConnectionMultiplier=4
mongo.connectTimeout=1000
mongo.maxWaitTime=1500
mongo.autoConnectRetry=true
mongo.socketKeepAlive=true
mongo.socketTimeout=1500
mongo.slaveOk=true
二、配置mongodb数据库
一、创建管理员权限
1.打开cmd,输入mongo,进入mongodb的命令页面
> use admin #进入admin数据库
switched to db admin
> db.createUser({user:"admin",pwd:"admin",roles:[{role:"root", db:"admin"}]})
> Successfully added user: {
"user" : "root",
"roles" : [
{
"role" : "root",
"db" : "admin"
}
]
}
2.通过刚才创建的超级管理员账号登陆然后创建需要用spring 操作数据的的数据库账号
> use admin
switched to db admin
> db.auth("root","cdb123456")
1
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
nrvsp 0.011GB
> use nrvsp
switched to db nrvsp
> db.createUser( {user:"dataUser", pwd:"cdb123456",roles:[{role:"dbOwner",db:"nrvsp"}]})
Successfully added user: {
"user" : "dataUser",
"roles" : [
{
"role" : "dbOwner",
"db" : "nrvsp"
}
]
}
>
注意
:这里的子账号就是 mongodb 配置文件里面所需要填写的账号信息
二、修改配置文档mongod.cfg(位置:安装目录\bin 下)
首先,将
bind_ip
改为0.0.0.0
(让其他电脑可以访问,用于远程连接,如果bind_ip
是127.0.0.1
的话,就只能本地访问)
security:
authorization: enabled #注意缩进,参照其他的值来改,若是缩进不对可能导致后面服务不能重启
如图:
三、重启服务
重启MongoDB Server服务,启用认证!
现在就可以用Java 程序查询nrvsp 这个数据库了