温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

【Mongo】mongodb的用户认证

发布时间:2020-08-08 22:43:17 来源:ITPUB博客 阅读:174 作者:小亮520cl 栏目:关系型数据库

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



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI