数据库安全
要在未开启安全认证的情况下启动并创建一个具有用户管理权限的用户,重启后再开启安全认证,用户的创建和验证都是基于数据库对象的,所以创建和验证时需要指定同一个数据库(称为验证数据库),即切换到同一个数据库,否则会验证失败,但是这并不意味着对应的权限只是针对当前数据库,验证数据库只是起到验证作用,admin
数据库保存了用户数据,所以对用户管理的用户一般创建在admin
数据库上
若是集群模式下,还需要在security
参数下使用keyFile
指定内容相同的密钥文件(可使用openssl
生成),才能保证集群之间的服务能互相验证访问
用户角色管理
db.createUser(userDocument)
:在当前数据库上创建用户userDocument
:用户文档,用户信息以文档形式传入user
:用户名pwd
:用户密码roles
:用户角色数组,可是单个字符串指定角色表示权限运行于验证数据库,也可以是角色文档,指定角色权限运行的数据库db
:指定角色权限运行的数据库role
:角色
db.dropUser(username)
:在当前数据库上删除用户db.changeUserPassword(username:newPwd)
:修改用户密码db.auth(user.pwd)
:在当前数据库下验证登入信息db.createRoles(roleDocument)
:在当前数据库上创建自定义角色role
:自定义角色名privileges
:权限文档数组resource
:可操作的数据源db
:数据库名collection
:数据库下的集合名cluster
:是否开启集群权限
acrions
:对应的权限数组
roles
:继承的角色数组,若没有继承则为空数组即可
db.dropRole(rolename)
:在当前数据库上删除角色
不同角色对应的权限
角色名 | 描述 |
---|---|
read |
读取当前数据库中所有非系统集合;增加AnyDatabase 后缀即对所有数据库的权限,仅在验证数据库是admin 时可使用 |
readWrite |
读写当前数据库中所有非系统集合;增加AnyDatabase 后缀即对所有数据库的权限,仅在验证数据库是admin 时可使用 |
dbAdmin |
管理当前数据库(删除集合、创建集合、获取索引和集合的统计信息等);增加AnyDatabase 后缀即对所有数据库的权限,仅在验证数据库是admin 时可使用 |
userAdmin |
管理当前数据库中用户和角色;增加AnyDatabase 后缀即对所有数据库的权限,仅在验证数据库是admin 时可使用 |
root |
所有权限 |
客户端连接
ServerAddress serverAddress = new ServerAddress("122.51.213.160", 27018); //创建服务地址对象,若是集群使用LIst集合
MongoCredential credential = MongoCredential.createCredential("root", "admin", "root".toCharArray());
//第一个参数是用户名,第二个参数是验证数据库,第三个参数是密码,但是并非字符串,而是字符数组,所以转化了一下
MongoClientOptions build = new MongoClientOptions.Builder(). //构建连接池配置对象
connectionsPerHost(10). //每个地址对象的最大连接数
connectTimeout(10000). //连接超时时间
socketTimeout(1000). //读写操作超时时间
build(); //构建完毕
MongoClient mongoClient = new MongoClient(serverAddress, credential, build); //根据服务地址、认证对象和连接池配置对象创建连接池对象
ServerAddress serverAddress = new ServerAddress("122.51.213.160", 27018); //创建服务地址对象,若是集群使用LIst集合
ArrayList<MongoCredential> credentials = new ArrayList<>(); //创建证书列表
MongoCredential credential = MongoCredential.createCredential("root", "admin", "root".toCharArray()); //创建证书对象
//第一个参数是用户名,第二个参数是验证数据库,第三个参数是密码,但是并非字符串,而是字符数组,所以转化了一下
credentials.add(credential); //加入证书列表
MongoClient mongoClient = new MongoClient(serverAddress, credentials); //根据服务地址对象和证书列表创建连接对象
MongoClientURI connectionString = new MongoClientURI("mongodb://root:root@127.0.0.1:27017"); //创建连接URI,用户名:密码@
//若是集群可指定多个,使用逗号分隔
MongoClient mongoClient = new MongoClient(connectionString); //根据URI创建连接对象
Comments NOTHING