mongodb基础之用户权限管理的示例分析

84次阅读
没有评论

共计 3432 个字符,预计需要花费 9 分钟才能阅读完成。

这篇文章主要介绍了 mongodb 基础之用户权限管理的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让丸趣 TV 小编带着大家一起了解一下。

启动 mongodb 并连接

./bin/mongod -f conf/mongod.conf
./bin/mongo 127.0.0.1:12345

查看默认的数据库情况

 show dbs
admin 0.000GB
local 0.000GB
  use admin
switched to db admin
  show tables
system.version

可以看到,目前数据库里除了一些基本信息,什么都没有

在创建设置用户权限之前,先了解一下文档知识

创建用户

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

数据库内建角色

数据库用户角色

read (读取指定数据库)

readWrite (读写指定数据库)

数据库管理角色

dbAdmin (数据库管理员)

dbOwner (数据库所有者,合并了 readWrite, dbAdmin and userAdmin roles.)

userAdmin (用户管理员,可以找指定数据库里创建、删除和管理用户)

集群管理角色

clusterAdmin (集群管理员)

clusterManager (集群管理者)

clusterMonitor (集合监视者)

hostManager (主机管理者)

备份恢复角色

backup (备份)

restore (还原)

所有数据库角色

readAnyDatabase (读任何数据库)

readWriteAnyDatabase (读写任何数据库)

userAdminAnyDatabase (用户管理任何数据库)

dbAdminAnyDatabase (任意数据库管理员)

超级用户角色

root

内部角色

__system

有了创建语法,和参数说明,接下来开始实践.

注意,还有一点,账号是跟着数据库绑定的,在那个库里授权,就在那个库里验证 (auth)
否则会失败

创建 账号管理授权权限 的账号

 db.createUser(
... {
... user:  admin ,
... pwd:  123456 ,
... roles: [{role:  userAdminAnyDatabase , db:  admin}]
... }
... )
Successfully added user: {
  user  :  admin ,
  roles  : [
 {
  role  :  userAdminAnyDatabase ,
  db  :  admin 
 }
 ]
}

然后退出数据库

 use admin
switched to db admin
  db.shutdownServer()

重新启动 mongodb,记得在配置文件 mongod.conf 里加上 auth = true

./bin/mongod -f conf/mongod.conf
./bin/mongo 127.0.0.1:12345
  show dbs #  没有验证,没有权限,会出错
 errmsg  :  not authorized on admin to execute command
  use admin
  db.auth(admin ,  123456)
#  返回  1  表示授权成功,0 表示失败
  show dbs # 已经授权,可以查看了

创建 读、读写权限的账户

 use book
switched to db book
  db.createUser(
... {
... user:  zhangsan ,
... pwd:  zhangsan ,
... roles: [{role:  read , db:  book}]
... }
... )
Successfully added user: {
  user  :  zhangsan ,
  roles  : [
 {
  role  :  read ,
  db  :  book 
 }
 ]
  db.createUser(
... {
... user:  lisi ,
... pwd:  lisi ,
... roles: [{role:  readWrite , db:  book}]
... }
... )
Successfully added user: {
  user  :  lisi ,
  roles  : [
 {
  role  :  readWrite ,
  db  :  book 
 }
 ]
  show users
  _id  :  book.lisi ,
  user  :  lisi ,
  db  :  book ,
  roles  : [
 {
  role  :  readWrite ,
  db  :  book 
 }
 ]
  _id  :  book.zhangsan ,
  user  :  zhangsan ,
  db  :  book ,
  roles  : [
 {
  role  :  read ,
  db  :  book 
 }
 ]
}

然后验证用户权限是否正确

 db.book.insert({book:  小人书}) #  没验证,会出错
WriteResult({
  writeError  : {
  code  : 13,
  errmsg  :  not authorized on book to execute command { insert: \ book\ , docum
ents: [ { _id: ObjectId( 5959b56edcc047dfe5c9b336), book: \ 小人书 \  } ], ordered: true } 
 }
  db.auth(lisi ,  lisi)
  db.book.insert({book:  小人书})
WriteResult({  nInserted  : 1 })
  db.auth(zhangsan ,  zhangsan) #  用户切到  zhangsan
  db.book.find() #  可以查看
{  _id  : ObjectId( 5959b59fdcc047dfe5c9b337),  book  :  小人书  }
  db.book.insert({book:  择天记}) #  没有 write 权限,会失败
WriteResult({
  writeError  : {
  code  : 13,
  errmsg  :  not authorized on book to execute command { insert: \ book\ , docum
ents: [ { _id: ObjectId( 5959b650dcc047dfe5c9b338), book: \ 择天记 \  } ], ordered: true } 
 }
})

创建 root 超级权限账号

这个超级权限包括 授权 和 操控数据库集合数据,比较简单,只需要把 role 设置成 root

 use admin
switched to db admin
  db.auth(admin ,  123456)
  db.createUser(
... {
... user:  dongsheng ,
... pwd:  123456 ,
... roles: [{role:  root , db:  admin}]
... }
... )
Successfully added user: {
  user  :  dongsheng ,
  roles  : [
 {
  role  :  root ,
  db  :  admin 
 }
 ]
  db.auth(dongsheng ,  123456)
  use book
switched to db book
  db.book.insert({book:  笑傲江湖})
WriteResult({  nInserted  : 1 })
  db.book.find()
{  _id  : ObjectId( 5959b59fdcc047dfe5c9b337),  book  :  小人书  }
{  _id  : ObjectId( 5959b7abdcc047dfe5c9b339),  book  :  笑傲江湖  }

感谢你能够认真阅读完这篇文章,希望丸趣 TV 小编分享的“mongodb 基础之用户权限管理的示例分析”这篇文章对大家有帮助,同时也希望大家多多支持丸趣 TV,关注丸趣 TV 行业资讯频道,更多相关知识等着你来学习!

正文完
 
丸趣
版权声明:本站原创文章,由 丸趣 2023-08-03发表,共计3432字。
转载说明:除特殊说明外本站除技术相关以外文章皆由网络搜集发布,转载请注明出处。
评论(没有评论)