首页 > 代码库 > mongo db 学习笔记 之二: mongodb 用户认证

mongo db 学习笔记 之二: mongodb 用户认证


首先要知道mongodb默认安装后是没有任何认证开启的,也就是说,所有能连接到服务器的人都能进数据查看,当然,你可以用防火墙来挡。但没有防火墙的保护,数据库暴露出来是非常危险的。


mongodb关于安全分为几个方面,主要是:认证,基于角色的访问控制(授权),审计,加密,部署和环境的安全(涉及到网络跟系统的访问环境)。


一 关于认证

使用用户名认证指令为:

mongo --port 27017 -u manager -p 12345678 --authenticationDatabase admin


创建系统级别的的admin用户,分配root角色,可以管理所有数据库,做任意的操作:

注意:创建用户产生的数据正常情况下应该保存在admin库统一管理,但也可以指定保存在其他数据库,先运行 use dbname,表示对dbname这个库操作,然后运行创建用户的命令之后,数据就保存在"dbname"数据库了

use admin

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


或者创建指定数据库的管理员用户:

use admin
db.createUser(
    {
      user: "tracking",
      pwd: "track",
      roles: [
         { role: "readWrite", db: "user_data_tracking" }
,     { role: "dbAdmin", db: "user_data_tracking" }   
      ]
    }
)

创建专门管理用户的用户:

use admin

db.createUser(
  {
    user: "siteUserAdmin",
    pwd: "password",
    roles:
    [
      {
        role: "userAdminAnyDatabase",
        db: "admin"
      }
    ]
  })


userAdminAnyDatabase和userAdmin区别

userAdminAnyDatabase Provides the same access to user administration operations as userAdmin, except it applies to all databases in the cluster.

use products

db.createUser(
  {
    user: "recordsUserAdmin",
    pwd: "password",
    roles:
    [
      {
        role: "userAdmin",
        db: "records"
      }
    ]
  })

登录后可以查看用户权限,用此命令:

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

只分配只读权限:

use reporting

db.createUser(
    {
      user: "reportsUser",
      pwd: "12345678",
      roles: [
         { role: "read", db: "reporting" },
         { role: "read", db: "products" },
         { role: "read", db: "sales" }
      ]
    })