mongodb 用户 权限 设置 详解

原文地址:http://blog.51yip.com/nosql/1575.html

我知道的关系型数据库都是有权限控制的,什么用户能访问什么库,什么表,什么用户可以插入,更新,而有的用户只有读取权限。

例如:mysql安装配置好后,有一个自带的mysql数据库,里面有一张user表,用来存放用户,以及用户权限,而mongodb这个最像关系型的数据库,有没有这样的表呢。

一,掌握权限,理解下面4条基本上就差不多

1,mongodb是没有默认管理员账号,所以要先添加管理员账号,在开启权限认证。

2,切换到admin数据库,添加的账号才是管理员账号。

3,用户只能在用户所在数据库登录,包括管理员账号。

4,管理员可以管理所有数据库,但是不能直接管理其他数据库,要先在admin数据库认证后才可以。这一点比较怪

二,添加管理员账号

查看复制打印?

  1. [[email protected] zhangy]# mongo
  2. MongoDB shell version: 2.4.6
  3. connecting to: tank
  4. > use admin                    //切换到admin数据库
  5. switched to db admin
  6. > show collections;
  7. system.indexes
  8. system.users                   //用户表
  9. > db.system.users.find();      //用户表没有数据
  10. > db.addUser(‘tank‘,‘test‘);   //添加一个管理员账号
  11. {
  12. "user" : "tank",
  13. "readOnly" : false,
  14. "pwd" : "988432606980d0695e4f668f6bbc643a",
  15. "_id" : ObjectId("529e5d543b6a4608ac833429")
  16. }

三,开启动用户权限认证

查看复制打印?

  1. [[email protected] zhangy]# vim /etc/mongodb.conf           //将auth=true前面的注释拿掉
  2. [[email protected] zhangy]# /etc/init.d/mongod restart      //重启生效

四,用户只能在用户所在数据库登录,管理员需要通过admin认证后才能管理其他数据库

查看复制打印?

  1. [[email protected] zhangy]# mongo
  2. MongoDB shell version: 2.4.6
  3. connecting to: tank
  4. > show dbs;           //显示所有数据库失败,因为还没有认证
  5. Wed Dec  4 06:39:50.925 listDatabases failed:{ "ok" : 0, "errmsg" : "unauthorized" } at src/mongo/shell/mongo.js:46
  6. > db.auth(‘tank‘,‘test‘);    //认证失败,因为这个用户不属于tank这个数据库
  7. Error: 18 { code: 18, ok: 0.0, errmsg: "auth fails" }
  8. 0
  9. > use admin        //切换到admin数据库
  10. switched to db admin
  11. > db.auth(‘tank‘,‘test‘);   //在admin数据库认证成功
  12. 1
  13. > use tank;           //切换到tank数据库
  14. switched to db tank
  15. > show collections;   //不会在提示没有权限了
  16. contact
  17. system.indexes
  18. users

五,添加普通用启

查看复制打印?

  1. > use tank;
  2. switched to db tank
  3. > db.addUser(‘tank1‘,‘test‘);     //为tank数据库添加了一个可读写用户tank1
  4. {
  5. "_id" : ObjectId("529e5f8474b4c660718a70f3"),
  6. "user" : "tank1",
  7. "readOnly" : false,
  8. "pwd" : "35dd47abff098f5b4f0b567db8edeac5"
  9. }
  10. > db.addUser(‘tank2‘,‘test‘,true);  //为tank数据库添加了一个只读用户tank2
  11. {
  12. "user" : "tank2",
  13. "readOnly" : true,
  14. "pwd" : "1792916c544d247538ded52e6df7b887",
  15. "_id" : ObjectId("529e67553992b24438d5e315")
  16. }
  17. > exit    //退出
  18. bye
  19. [[email protected] zhangy]# mongo
  20. MongoDB shell version: 2.4.6
  21. connecting to: tank
  22. > db.auth(‘tank1‘,‘test‘);    //刚添加的用户可以登录。
  23. 1

六,php客户端连接

1, 推荐方法一

查看复制打印?

  1. $mongo = new Mongo();
  2. $db = $mongo->selectDB(‘tank‘);   //切换到tank数据库
  3. $db->authenticate("tank3", "test");   //认证
  4. $users= $db->selectCollection("users");  //选取users表
  5. $cursor = $users->find();   //读取数据
  6. foreach ($cursor as $id => $value) {
  7. echo "$id: "; print_r($value); echo "<br>";
  8. }

这种方式比较好理解,根命令行下的操作过程差不多。

2,推荐方法二

查看复制打印?

  1. $mongo = new Mongo("mongodb://tank3:[email protected]:27017/tank");   //认证用户,这里的数据库,只启认证作用
  2. $db = $mongo->selectDB(‘tank‘);  //选取数据库
  3. $users= $db->selectCollection("users");
  4. $cursor = $users->find();
  5. foreach ($cursor as $id => $value) {
  6. echo "$id: "; print_r($value); echo "<br>";
  7. }

上面二种方法的不同在于,一个先选数据库在认证,一个先认证在选数据库。

原文地址:https://www.cnblogs.com/limit1/p/8136837.html

时间: 2024-10-12 07:09:06

mongodb 用户 权限 设置 详解的相关文章

MongoDB学习之权限设置详解

MongoDB数据库是一个基于分布式文件存储的数据库,为目前主流的NoSQL数据库,已被应用到许多高性能的大型系统中.如果之前从未接触MongoDB,可以访问 MongoDB官网 快速了解其主要特性及应用场景. MongoDB的安装 此文示例的环境基于CentOS 7.3 64位,MongoDB版本为3.2.4. 1. 在服务器上,以超级用户权限执行yum安装,命令如下: [[email protected]]# su [username] -- username 为你登陆服务器的用户名[[em

【转】Centos系统文件与用户权限分配详解ftp,nginx,php

linux系统中权限是非常完善的一个功能了,我们如果设置不正确文件就无法使用了,像我们以一般情况需要把文件权限设置为777或644了,对于用户权 限就更加了,像素ftp,nginx,php这些我们都可以给它们设置一个用户并且设置不同权限了,下面我们一起来看看文件与用户权限分配 文件权限设置 权限管理 主要的命令有: chmod.chown.chgrp.umask 1). 改变文件或目录的权限 chmod 2). 改变文件或目录的所有者 chown 3). 改变文件或目录的所属组 chgrp 4)

黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户、主题、插件、设置等功能

建立好了子站,我们需要有个地方配置所有子站的主题.插件等功能,我们可以在后台看到 我的站点--管理网络 如下图: 在 管理网络--仪表盘 里面,我们可以创新用户和站点,也提供了查询功能. 要注意的是:当你新上传的主题或者插件,都需要在管理网络那边的主题和插件里面将你上传的主题和插件开启.这样才可以在你的子站点中查看的到. 黄聪:WordPress 多站点建站教程(二):后台(管理网络)设置详解,如何管理子站的用户.主题.插件.设置等功能

linux 用户权限设置

# useradd –d /usr/sam -m sam 此命令创建了一个用户sam,其中-d和-m选项用来为登录名sam产生一个主目录/usr/sam(/usr为默认的用户主目录所在的父目录). 假设当前用户是sam,则下面的命令修改该用户自己的口令: # passwd Old password:****** New password:******* Re-enter new password:******* 如果是超级用户,可以用下列形式指定任何用户的口令: # passwd sam New

(转) shiro权限框架详解06-shiro与web项目整合(上)

http://blog.csdn.net/facekbook/article/details/54947730 shiro和web项目整合,实现类似真实项目的应用 本文中使用的项目架构是springMVC+mybatis,所以我们是基于搭建好的项目进行改造的. 将shiro整合到web应用中 登录 退出 认证信息在页面展现,也就是显示菜单 shiro的过滤器 将shiro整合到web应用中 数据库脚步 sql脚步放到项目中,项目上传到共享的资源中,文章最后给出共享url. 去除项目中不使用shi

Android权限Permission详解

android.permission.EXPAND_STATUS_BAR 允许一个程序扩展收缩在状态栏,Android开发网提示应该是一个类似Windows Mobile中的托盘程序 android.permission.FACTORY_TEST 作为一个工厂测试程序,运行在root用户 android.permission.INSTALL_PACKAGES 允许一个程序安装packages android.permission.INTERNAL_SYSTEM_WINDOW 允许打开窗口使用系统

JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路径下你应该能够找到bin.lib等目录.值得一提的是,JDK的安装路径可以选择任意磁盘目录,不过建议你放的目录层次浅一点,如果你放的目录很深,比如x:\XXXXXX\xxxxx\XXXX\xxxx\XXXX\xxxx\XXXX

[转]JAVA环境变量JAVA_HOME、CLASSPATH、PATH设置详解

[转] JAVA环境变量JAVA_HOME.CLASSPATH.PATH设置详解 - dreamman的日志 - 网易博客http://blog.163.com/dreamman_yx/blog/static/26526894200842414338201/ Windows下JAVA用到的环境变量主要有3个,JAVA_HOME.CLASSPATH.PATH.下面逐个分析. JAVA_HOME 指向的是JDK的安装路径,如C:\jdk1.5.0_06,在这路径下你应该能够找到bin.lib等目录.

AWARDBIOS设置详解

Phoenix–AwardBIOSv6.00PG AWARDBIOS设置详解 AWARD公司是世界最大的BIOS生产厂商之一,其产品也被广泛使用.但由于AWARD BIOS里面的信息都是基于英文且需要用户对相关专业知识的理解相对深入,使得普通用户设置起来感到困难很大.而如果这些设置不当的话,将会影响整台电脑的性能设置是不能正常使用,所以一份详细的设置说明是必要的.下面就介绍一下AWARD BIOS中的有关设置选项的含义和设置方法. 一.[StandardCMOS Setup](标准设定) 在本菜