欢迎光临
我们一直在努力

【Mongo】mongodb的用户认证


1.创建超级账号



  1. >

    use admin

    ;



  2. >

    db

    .

    createUser

    (


    {

    user

    :


    "admin"


    ,

    pwd

    :


    "123456"


    ,

    roles

    :


    [

    { role

    :


    "root"


    ,


    db



    :



    "admin"


    }

    ]

    }

    )

  3. Successfully added user

    :

    {
  4.         

    "user"


    :


    "admin"


    ,

  5.         

    "roles"


    :


    [

  6.                 {
  7.                         

    "role"


    :


    "root"


    ,

  8.                         

    "db"


    :


    "admin"

  9.                 }
  10.         

    ]

  11. }



user:用户名


pwd:密码



roles

:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指定内置角色和用户定义的角色。

role里的角色

可以选:


  1. Built




    In

    Roles(内置角色):

  2.     1

    .

    数据库用户角色:read、readWrite

    ;

  3.     2

    .

    数据库管理角色:dbAdmin、dbOwner、userAdmin;
  4.     3

    .

    集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
  5.     4

    .

    备份恢复角色:backup、restore;
  6.     5

    .

    所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
  7.     6

    .

    超级用户角色:root
  8.     // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
  9.     7

    .

    内部角色:__system


具体角色:


  1. Read:允许用户读取指定数据库

  2. readWrite:允许用户读写指定数据库
  3. dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system

    .

    profile
  4. userAdmin:允许用户向system

    .

    users集合写入,可以找指定数据库里创建、删除和管理用户
  5. clusterAdmin:只在admin数据库中可用,赋予用户所有分片和复制集相关函数的管理权限。
  6. readAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读权限
  7. readWriteAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的读写权限
  8. userAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限
  9. dbAdminAnyDatabase:只在admin数据库中可用,赋予用户所有数据库的dbAdmin权限。
  10. root:只在admin数据库中可用。超级账号,超级权限

2.开启权限认证


  1. 配置文件添加


  2. [

    dbaadmin@

    ip




    172



    31



    36



    77 ~

    ]


    $

    more /usr/

    local


    /

    mongodb/conf/mongod

    .

    conf


  3. auth




    =




    true


3.重启后认证超级账号



  1. [

    root@iZ2ze66bhrbxkc31nljgjnZ mongodb

    ]


    #

    /usr/

    local


    /

    mongodb/bin/mongo

  2. MongoDB shell version

    :

    3

    .


    .

    6
  3. connecting to

    :


    test



  4. >




    show dbs




    ;    –没权限查看


  5. 2018



    05



    07T14

    :

    29

    :

    25

    .

    847

    +

    0800 E QUERY    Error

    :

    listDatabases failed

    :


    {

  6.         

    "ok"


    :

    0

    ,

  7.         

    "errmsg"


    :


    "not authorized on admin to execute command { listDatabases: 1.0 }"


    ,

  8.         

    "code"


    :

    13

  9. }
  10.     at Error

    (


    <

    anonymous

    >


    )

  11.     at Mongo

    .

    getDBs

    (

    src/mongo/shell/mongo

    .


    js


    :

    47

    :

    15

    )

  12.     at shellHelper

    .

    show

    (

    src/mongo/shell/utils

    .


    js


    :

    630

    :

    33

    )

  13.     at shellHelper

    (

    src/mongo/shell/utils

    .


    js


    :

    524

    :

    36

    )

  14.     at

    (

    shellhelp2

    )


    :

    1

    :

    1 at src/mongo/shell/mongo

    .


    js


    :

    47


  15. >




    use admin




    ;


  16. switched to db admin

  17. >



    db




    .




    auth




    (




    'admin'




    ,




    '123456'




    )




    ; -admin下认证超级账号,

    数据库帐号是跟着数据库来走的,哪里创建哪里认证。



  18. 1

  19. >

    show dbs

    ;

  20. admin   0

    .

    078GB

  21. local

    0

    .

    078GB
  22. rundb   0

    .

    078GB
  23. rundb2  0

    .

    078GB


4.添加普通账号



  1. >



    use rundb2




    ;



  2. switched to db rundb2

  3. >

    db

    .

    createUser

    (


    {

    user

    :


    'runuser2'


    ,

    pwd

    :


    '123456'


    ,

    roles

    :


    [


    {


    role


    :


    "dbOwner"


    ,


    db


    :


    "




    rundb2




    "

    }

    ]


    }


    )

  4. Successfully added user

    :

    {
  5.         

    "user"


    :


    "runuser2"


    ,

  6.         

    "roles"


    :


    [

  7.                 {
  8.                         

    "role"


    :


    "dbOwner"


    ,

  9.                         

    "db"


    :


    "rundb2"

  10.                 }
  11.         

    ]

  12. }

  13. >



    show users




    ;   <1pre style="margin-top:0px;margin-bottom:0px;white-space:pre-wrap;text-align:justify;font-family:;" "="">


























































































































    #查看当前库下的用户





























































































































  14. {
  15.         

    "_id"


    :


    "rundb2.runuser"


    ,

  16.         

    "user"


    :


    "runuser"


    ,

  17.         

    "db"


    :


    "rundb2"


    ,

  18.         

    "roles"


    :


    [

  19.                 {
  20.                         

    "role"


    :


    "readWrite"


    ,

  21.                         

    "db"


    :


    "rundb2"

  22.                 }
  23.         

    ]

  24. }
  25. {
  26.         

    "_id"


    :


    "rundb2.runuser2"


    ,

  27.         

    "user"


    :


    "runuser2"


    ,

  28.         

    "db"


    :


    "rundb2"


    ,

  29.         

    "roles"


    :


    [

  30.                 {
  31.                         

    "role"


    :


    "dbOwner"


    ,

  32.                         

    "db"


    :


    "rundb2"

  33.                 }
  34.         

    ]

  35. }

5.普通账号认证



  1. 认证方式一



  2. [

    root@iZ2ze66bhrbxkc31nljgjnZ mongodb

    ]


    #

    /usr/

    local


    /

    mongodb/bin/mongo



    u runuser



    p 123456  rundb2

  3. MongoDB shell version

    :

    3

    .


    .

    6
  4. connecting to

    :

    rundb2

  5. >

    show collections

    ;

  6. system

    .

    indexes
  7. testcoll
  8. testcoll2



 




 


认证方式二


  1. [

    root@iZ2ze66bhrbxkc31nljgjnZ mongodb

    ]


    #

    /usr/

    local


    /

    mongodb/bin/mongo
  2. MongoDB shell version

    :

    3

    .


    .

    6
  3. connecting to

    :


    test


  4. >



    use rundb2




    ;


  5. switched to db rundb2

  6. >

    show dbs

    ;

  7. 2018



    05



    07T14

    :

    36

    :

    46

    .

    809

    +

    0800 E QUERY    Error

    :

    listDatabases failed

    :


    {

  8.         

    "ok"


    :

    0

    ,

  9.         

    "errmsg"


    :


    "not authorized on admin to execute command { listDatabases: 1.0 }"


    ,

  10.         

    "code"


    :

    13

  11. }
  12.     at Error

    (


    <

    anonymous

    >


    )

  13.     at Mongo

    .

    getDBs

    (

    src/mongo/shell/mongo

    .


    js


    :

    47

    :

    15

    )

  14.     at shellHelper

    .

    show

    (

    src/mongo/shell/utils

    .


    js


    :

    630

    :

    33

    )

  15.     at shellHelper

    (

    src/mongo/shell/utils

    .


    js


    :

    524

    :

    36

    )

  16.     at

    (

    shellhelp2

    )


    :

    1

    :

    1 at src/mongo/shell/mongo

    .


    js


    :

    47

  17. >

    db

    .

    auth

    (


    'runuser2'


    ,


    '123456'


    )

  18. 1

  19. >

    show collections

    ;

  20. system

    .

    indexes
  21. testcoll
  22. testcoll2

5账号管理


  1. 修改密码

  2. MongoDB 修改帐号的密码有两种方式: 1

    .

    使用 changeUserPassword 方法 2

    .

    使用 updateUser 方法里面的 pwd 参数

  3. /


    /

    验证帐号密码

  4. >

    db

    .

    auth

    (


    "biadmin"


    ,


    "biadmin"


    )

  5. 1
  6. //修改帐号密码

  7. >

    db

    .

    changeUserPassword

    (


    "biadmin"


    ,


    "123"


    )

  8. //使用原密码验证失败返回0

  9. >

    db

    .

    auth

    (


    "biadmin"


    ,


    "biadmin"


    )

  10. Error

    :

    Authentication failed

    .

  11. 0
  12. //使用修改后密码验证成功返回1

  13. >

    db

    .

    auth

    (


    "biadmin"


    ,


    "123"


    )

  14. 1
  15. //使用updateUser 修改密码

  16. >

    db

    .

    updateUser

    (

  17.  

    "biadmin"


    ,

  18.   {pwd

    :


    "biadmin"


    }


    )

  19. //验证密码成功返回1

  20. >

    db

    .

    auth

    (


    "biadmin"


    ,


    "biadmin"


    )

  21. 1
  22. 删除帐号
  23. MongoDB 删除帐号有两种方式: 
  24. 1

    .

    使用 dropUser

    (


    "username"


    )

    删除当前数据库下指定帐号 
  25. 2

    .

    使用 dropAllUsers

    (


    )

    删除数据库下所有帐号

  26. /


    /

    已经创建两个测试帐号

  27. >

    db

    .

    getUser

    (


    "test1"


    )

  28. {
  29.         

    "_id"


    :


    "bitest.test1"


    ,

  30.         

    "user"


    :


    "test1"


    ,

  31.         

    "db"


    :


    "bitest"


    ,

  32.         

    "roles"


    :


    [

  33.                 {
  34.                         

    "role"


    :


    "dbAdmin"


    ,

  35.                         

    "db"


    :


    "bitest"

  36.                 }
  37.         

    ]

  38. }

  39. >

    db

    .

    getUser

    (


    "test2"


    )

  40. {
  41.         

    "_id"


    :


    "bitest.test2"


    ,

  42.         

    "user"


    :


    "test2"


    ,

  43.         

    "db"


    :


    "bitest"


    ,

  44.         

    "roles"


    :


    [

  45.                 {
  46.                         

    "role"


    :


    "dbAdmin"


    ,

  47.                         

    "db"


    :


    "bitest"

  48.                 }
  49.         

    ]

  50. }
  51. //使用dropUser删除帐号test1成功返回true

  52. >

    db

    .

    dropUser

    (


    "test1"


    )

  53. true
  54. //查询帐号test1已不存在

  55. >

    db

    .

    getUser

    (


    "test1"


    )

  56. null
  57. //使用dropAllUsers删除所有帐号

  58. >

    db

    .

    dropAllUsers

    (


    )

  59. 2
  60. //查询帐号 test2,biadmin 都已不存在

  61. >

    db

    .

    getUser

    (


    "test2"


    )

  62. null

  63. >

    db

    .

    getUser

    (


    "biadmin"


    )

  64. null
  65. //查询数据库下所有帐号返回空数组

  66. >

    db

    .

    getUsers

    (


    )


  67. [


    ]

6 更改用户信息

更改role,密码都行
db.updateUser(
    "test",{
        roles:[ { role: "readWrite", db: "welike_mongo" } ],
        pwd:"123456"
    }
)

更多的操作查看参照文档:

https://www.cnblogs.com/shiyiwen/p/5552750.html

https://www.cnblogs.com/damingge/p/6507605.html

赞(0)
【声明】:本博客不参与任何交易,也非中介,仅记录个人感兴趣的主机测评结果和优惠活动,内容均不作直接、间接、法定、约定的保证。访问本博客请务必遵守有关互联网的相关法律、规定与规则。一旦您访问本博客,即表示您已经知晓并接受了此声明通告。