mongo auth

mongo auth

  1. mongo 权限说明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    MongoDB数据库在默认是没有用户名及密码,不用安全验证的,只要连接上服务就可以进行CRUD操作.

    概念理解:
    1.用户概念
    Mongodb的用户是由"用户名+所属库名"组成
    注意:帐号是跟着库走的,所以在指定库里授权,必须也在指定库里验证(auth)
    例如:
    登录mongo库test1,创建用户user,创建的用户为:user@test1
    登录mongo库test2,创建用户user,创建的用户为:user@test2

    2.角色概念
    Mongodb的授权采用了角色授权的方法,每个角色包括一组权限
    Mongodb已经定义好了的角色叫内建角色,我们也可以自定义角色

    内建角色:
    * 数据库用户角色: read readWrite
    * 数据库管理角色: dbAdmin dbOwner userAdmin
    * 集群管理角色: clusterAdmin clusterManager clusterMonitor hostManager
    * 备份恢复角色: backup restore
    * 所有数据库角色: readAnyDatabase readWriteAnyDatabase userAdminAnyDatabase dbAdminAnyDatabase
    * 超级用户角色: root
    * 内部角色: __system

    角色权限说明:
    * Read 允许用户读取指定数据库
    * readWrite 允许用户读写指定数据库
    * dbAdmin 允许用户在指定数据库中执行管理函数,如索引创建,删除,查看统计或访问system.profile
    * userAdmin 允许用户向system.users集合写入,可以找指定数据库里创建,删除和管理用户
    * clusterAdmin 只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限
    * readAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读权限
    * readWriteAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的读写权限
    * userAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
    * dbAdminAnyDatabase 只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限
    * root 只在admin数据库中可用.超级账号,超级权限
  2. 创建超级权限用户(auth=false)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@mongodb ~]# mongo
    > use admin
    > db.createUser(
    {
    user: "root",
    pwd: "root",
    roles: [ { role: "root", db: "admin" } ]
    }
    )
    > db.auth('root','root')
    > db.createUser(
    {
    user: "admin",
    pwd: "admin",
    roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    }
    )
  3. 重启mongo(auth=true)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    [root@mongodb ~]# mongo
    > use admin
    > db.auth("root", "rootroot" )
    1
    > show dbs
    admin 0.000GB
    local 0.000GB
    > exit
    bye

    或者:
    [root@mongodb ~]# mongo --port 27017 -u "root" -p "rootroot" --authenticationDatabase "admin"
    > show dbs
    admin 0.000GB
    local 0.000GB
    > exit
    bye
  4. 用户授权过程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    //创建用户并授权
    创建用户条件: 首先选择在哪个数据库下进行创建;其次创建用户有三项需要提供:用户名,密码,角色列表

    1.先切换到超级权限用户
    > use admin
    > db.auth('root','rootroot')

    2.创建用户
    > use penn
    > db.createUser({user:"test1",pwd:"test2",roles:[{role:"readWrite",db:"penn"},{role:"userAdmin",db:"penn"}]})

    3.查看用户
    > use penn
    > show users;

    4.修改密码
    > use penn
    > db.changeUserPassword('test1','test1');

    5.权限验证
    > use penn
    > db.auth('test1','test1')
    > show tables;

    6.添加角色权限
    > use penn
    > db.grantRolesToUser("test1",[{role:"read",db:"admin"}])

    7.回收角色权限
    > use penn
    > db.revokeRolesFromUser("test1",[{role:"read",db:"admin"}])

    8.删除用户
    > use penn
    > db.dropUser("test1")

    9.查看所有账号
    > use admin
    > db.auth('root','rootroot')
    > db.system.users.find().pretty()
    > db.system.users.find().count()