暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mongodb简单操作及用户管理

anyux 2020-06-23
1558

操作monogdb


mongodb中有三个默认的库,admin管理库,config配置库,local本地库,这三个库不要删除修改

还有一个test库,登录到mongodb中,默认进入test库

db 命令获取当前所在数据库名称

创建临时库的方法use tmp
,如果不在临时库中操作,那么退出登录时,临时库会被删除。如果在临时库中建立集合,则临时库会永久保存下来

演示示例

 use tmp
 db.collection.insert({name:'张三'})
 show dbs
 use tmp
 db.collection.find()

命令种类

数据库对象库(database),表(collection),行(document)

db.命令

DB级别命令

db.[TAB] 类似于linux的tab功能

db.help() db级别的命令使用帮助

库的操作
 db.tmpdb
 db.dropDatabase()


集合的操作
 db.createCollection('b')
 db.collection.insert({name:'张三'})
 db.stu.insert({id:101,name:'张三',age:20,gender:'m'})
 db.stu.insert({id:102,name:'lisi'})
 db.stu.insert({a:'b',c:'d'})
 db.stu.insert({a:1,c:2})
文档操作
 for (i=0;i<1000;i++){db.log.insert({"uid":i,"name":"mongodb","age":6,"date":new Date()})}
 
 查询文档数量
 db.log.count()
 查找所有数据,按默认每页显示20条文档
 db.log.find()
 设置每页条数
 DBQuery.shellBatchSize=50
 查找所有数据,按页显示
 db.log.find()
 db.log.find({uid:999})
 查找第一条数据
 db.log.findOne()
 查询去掉当前集合中某列的重复数据
 db.log.distinct("name")
 查找uid为999的文档,并格式化打印
 db.log.find({uid:999}).pretty()
 删除集合中所有记录
 db.log.remove({})
 

集合中索引+数据压缩存储之后的大小,单位为字节

 db.log.totalSize()

用户及权限管理

配置验证前权限之前,需要在/mongodb/conf/mong.conf追加如下配置

 security:
    authorization: enabled

重启mongodb,输入密码后,重启成功

 systemctl restart mongod.services


验证库: 建立用户时use到的库,在使用用户时,要加上验证库才能登陆。

对于管理员用户,必须在admin下创建.

  1. 建用户时,use到的库,就是此用户的验证库

  2. 登录时,必须明确指定验证库才能登录

  3. 通常,管理员用的验证库是admin,普通用户的验证库一般是所管理的库设置为验证库

  4. 如果直接登录到数据库,不进行use,默认的验证库是test,不是我们生产建议的.

  5. 从3.6 版本开始,不添加bindIp参数,默认不让远程登录,只能本地管理员登录。

用户验证信息,除了用户名,密码,还包括使用的数据库名称

 Authentication Options:
   -u [ --username ] arg               username for authentication
   -p [ --password ] arg               password for authentication
   --authenticationDatabase arg       user source (defaults to dbname)
   --authenticationMechanism arg       authentication mechanism
   --gssapiServiceName arg (=mongodb) Service name to use when authenticating
                                      using GSSAPI/Kerberos
   --gssapiHostName arg               Remote host name to use for purpose of
                                      GSSAPI/Kerberos authentication

用户创建语法

基本语法说明

role表示权限范围,root代表超级管理员,readWrite代表可读写,read代表可读,dbAdmin仅代表可以对数据库操作

 user:用户名
 pwd:密码
 roles:
    role:角色名
    db:作用对象
 role:root,readWrite,read,dbAdmin

登入方式验证用户

 mongo -u root -p root 192.168.255.101/admin

以超管理登入后验证用户及密码

 db.auth('root','root')


创建管理员用户

管理所有数据库(必须 use admin再去创建)

 db.createUser(
 {
 user:"root",
 pwd:"root",
 roles:[ { role:"root", db:"admin" } ]
 }
 )
 
 
 ##########返回值如下############
 Successfully added user: {
  "user" : "root",
  "roles" : [
  {
  "role" : "root",
  "db" : "admin"
  }
 ]
 }

未指定验证库,显示登录失败

 [mongod@base ~]$ mongo -uroot -proot 192.168.255.101
 MongoDB shell version v3.6.12
 connecting to: mongodb://192.168.255.101:27017/test?gssapiServiceName=mongodb
 2020-06-23T18:54:08.689+0800 E QUERY   [thread1] Error: Authentication failed. :
 connect@src/mongo/shell/mongo.js:263:13
 @(connect):1:6
 exception: connect failed

指定验证库登录,显示登录成功

 [mongod@base ~]$ mongo -uroot -proot 192.168.255.101/admin
 MongoDB shell version v3.6.12
 connecting to: mongodb://192.168.255.101:27017/admin?gssapiServiceName=mongodb
 Implicit session: session { "id" : UUID("c00e255a-f3d6-4b89-9d51-33a6e52ce870") }
 MongoDB server version: 3.6.12
 > show dbs;
 admin   0.000GB
 config  0.000GB
 local   0.000GB
 test    0.000GB


创建对app数据库,读写权限的用户app

超级管理员登录

  mongo -uroot -proot admin

选择一个验证库

 use app;

创建用户

 db.createUser(
 {
 user:"app",
 pwd:"app",
 roles:[ { role:"readWrite", db:"app" } ]
 }
 )

超经管理员做验证,返回1说明创建成功,退出超管

 db.auth('app','app')

使用普通用户登录

可以对app数据库执行创建表,删除表,插入删除数据操作,没有权限使用其他数据库

 mongo -uapp -papp 192.168.255.101/app


创建只读用户

超级管理员登录

  mongo -uroot -proot admin

选择一个验证库

 use readonly;

创建用户

 db.createUser(
 {
 user:"readonly",
 pwd:"readonly",
 roles:[ { role:"read", db:"readonly" } ]
 }
 )

创建数据

 db.stu.insert({name:"zhangsan"})


超经管理员做验证,返回1说明创建成功,退出超管

 db.auth('readonly','readonly')

使用普通用户登录

只能对readonly数据库执行查询操作,没有其他权限操作数据库

 mongo -ureadonly -preadonly 192.168.255.101/readonly


查询mongodb中的用户信息

使用超级管理员登录

 mongo -uroot -proot 192.168.255.101/admin
 use admin
 

查询所有用户信息

 db.system.users.find().pretty()

返回值解释

 {
  "_id" : "admin.root", #库.用户名
  "user" : "root", #用户名
  "db" : "admin",  #库
  "credentials" : { #加密算法
  "SCRAM-SHA-1" : {
  "iterationCount" : 10000,
  "salt" : "TMeyV16nLfpJ/+T6ybj4BQ==",
  "storedKey" : "yOaGmidV3cQLWlowqHgiuYzTCVw=",
  "serverKey" : "sj/ih9b4jXuZqiSqt9xzY1jOIVs="
  }
 },
  "roles" : [
  {
  "role" : "root", #角色
  "db" : "admin" #库
  }
 ]
 }


删除用户

使用超级管理员登录

 mongo -uroot -proot 192.168.255.101/admin
 use admin
 

删除指定用户

 db.dropUser('readonly')




文章转载自anyux,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论