mongodb用户授权访问

jimmy 2020年02月18日 248次浏览

mongodb安装后以后默认不要密码,任何人都可以使用shell登入,进行任何操作,安全性比较底

mongodb启动

可以从官网下载tar包格式,解压后即可启动,下载地址 (centos7.x版本)https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.3.tgz

启动方式

./bin/mongo

也可以使用启动参数启动

numactl --interleave=all bin/mongod -f mongo.conf

配置文件mongo.conf内容如下

dbpath=/home/server/server/mongodb42/data
logpath=/home/server/server/mongodb42/log/mongo.log
pidfilepath=/home/server/server/mongodb42/mongo.pid
oplogSize=64
bind_ip=0.0.0.0
port=27017
auth = true
fork=true
wiredTigerCacheSizeGB=1
wiredTigerDirectoryForIndexes=true

第一次启动的时候设置auth=fasle来设置用户密码,设置以后再设置auth=true

用auth=fasle启动,设置用户权限

添加root用户,超级用户,有所有权限

use admin
db.createUser(
  {
    user:"superuser",
    pwd:"pwd",
    roles:["root"]
  }
)

创建一般用户,读写权限

use shopdb
db.createUser({user:"shop",pwd:"shop",roles:[{role:"readWrite",db:"shopdb"}]})

查看用户权限

db.runCommand(
  {
    usersInfo:"userName",
    showPrivileges:true
  }
)

修改密码

use admin
db.changeUserPassword("userName", "newPAss")

查看用户信息

db.runCommand({usersInfo:"userName"})

删除用户

use test;
db.dropUser("test");

修改用户角色

db.updateUser( "abc",
{
roles:[
         { role : "readWrite", db : "abc"  }
      ]
}
);

增加权限,回收权限

db.grantRolesToUser("admin", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])

db.revokeRolesFromUser( "admin", ["readWrite"], { 1 } )

修改密码

db.updateUser(
   "root",
   {
      pwd: "newPAss"
   }
)

  • admin是管理数据库,所以用户管理相关是 use admin切换到admin库,再执行用户操作命令。

用auth=true启动,使用帐号密码登陆

use admin

db.auth('admin','password')
#此时已成功登录admin 的root账户,可以进行所有库的操作
#查看数据库
show dbs
#查看表
show collections
#查看用户
db.system.users.find().pretty()

系统默认角色

数据库用户角色

  • read:该角色拥有数据的只读权限,系统集合以及system.indexes,system.js,system.namespaces集合除外。

  • readWrite:该角色拥有对应数据库的读写权限,系统集合和system.js集合除外。

数据库管理角色

  • dbAdmin:该角色拥有指定数据库数据库管理权限,包括 system.indexes, system.namespaces, system.profile集合的操作权限。该角色不拥有所有非系统集合的读权限。

  • dbOwner:该角色拥有指定数据库的所有权限,该角色包括:readWrite、dbAdmin、userAdmin。

  • userAdmin:该角色拥有指定数据库用户和角色的管理权限。包括创建用户等。

群集管理角色

  • clusterAdmin:该角色拥有群集的所有权限。该角色包含clusterManager,clusterMonitor,hostManager 角色权限。同时还要删除数据库的权限。

  • clusterManager:该角色拥有群集的管理和监控权限,包括对local、config数据库的访问权限。同时该角色拥有分片和复制集的管理权限。

  • clusterMonitor:该角色拥有群集的监控权限。

  • hostManager:该角色拥有群集的监控和服务管理权限。

注意:这些角色只能在Admin数据库下创建

备份还原角色

  • backup:该角色拥有备份数据的权限。

  • restore:该角色拥有还原备份数据的权限。

注意:这些角色只能在Admin数据库下创建

所有数据库角色

该分类下面的角色权限和数据库角色权限一样,区别在于它拥有的是所有数据库的权限而不是指定数据库下的权限。但是不拥有system.*相关集合、local、config数据库的权限。

  • readAnyDatabase

  • readWriteAnyDatabase

  • userAdminAnyDatabase

  • dbAdminAnyDatabase

注意:这些角色只能在Admin数据库下创建

超级权限角色

  • root:该角色拥有所有权限,该角色包含readWriteAnyDatabase, dbAdminAnyDatabase, userAdminAnyDatabase, clusterAdmin roles, restore, and backup角色。

注意:该角色只能在创建在Admin库中

内部角色

  • system:该角色为系统内部角色,比如复制集成员、mongos使用。