11-数据库安全

nobility 发布于 2022-12-21 2964 次阅读


数据库安全

要在未开启安全认证的情况下启动并创建一个具有用户管理权限的用户,重启后再开启安全认证,用户的创建和验证都是基于数据库对象的,所以创建和验证时需要指定同一个数据库(称为验证数据库),即切换到同一个数据库,否则会验证失败,但是这并不意味着对应的权限只是针对当前数据库,验证数据库只是起到验证作用,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创建连接对象
此作者没有提供个人介绍
最后更新于 2022-12-21