zoukankan      html  css  js  c++  java
  • mongoDB之用户及权限设置

    之前用MongoDB没有设置用户和权限,一直都是本机应用程序连接MongoDB。在服务器上部署后对外没有开数据库连接端口,本机应用程序连接再开放应用程序端口供外部访问。

    我部署的环境是ubuntu 14.04下MongoDB。首先要开启安全模式的话,在启动MongoDB服务的时候就要加上--auth参数,命令如下:

    /usr/local/mongodb/mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/log/work.log --logappend --auth

    这样的话再连接MongoDB操作的时候就需要一定的权限。

    一、首先我们需要在没有加"--auth"权限参数启动服务进行用户权限管理

    我们这样启动MongoDB服务:

    /usr/local/mongodb/mongod -dbpath=/data/mongodb --fork --port 27017 --logpath=/usr/local/mongodb/log/work.log --logappend --auth

    或者编辑 开机启动   /etc/rc.local 下 添加以上指令。

    这时不指定用户连接mongodb,是可以登录并操作的,我的操作如下:

    root@timeless-HP-Pavilion-g4-Notebook-PC:# /usr/local/mongodb/mongo
    MongoDB shell version: 2.6.6
    connecting to: test
    > show tables
    2015-03-10T19:26:59.186+0800 error: {
        "$err" : "not authorized for query on test.system.namespaces",
        "code" : 13
    } at src/mongo/shell/query.js:131
    > 
    

    可以看到,使用show tables 指令提示 没有权限执行,原因是 我在admin 数据库中添加了用户认证。

    > use admin //切换到 admin 
    switched to db admin
    > db.user.find()  //查看用户信息提示 没有权限
    error: { "$err" : "not authorized for query on admin.user", "code" : 13 }
    > use admin        
    switched to db admin
    > db.a   
    db.addUser(       db.adminCommand(  db.auth(
    > db.auth('root','xxxxx') //数据库超级管理员认证
    1    //表示认证成功
    //mongoDB 默认没有用户认证 
    > use admin switched to db admin > db.addUser('sa','sa') { "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699", "_id" : ObjectId("53af835ada88ac42a40917a0") } > db.system.users.find() { "_id" : ObjectId("53af835ada88ac42a40917a0"), "user" : "sa", "readOnly" : false, "pwd" : "75692b1d11c072c6c79332e248c4f699" }

     以上为添加用户的操作

    注意 :

    1、用户认证只能在指定的数据库中认证。   比如在 admin 中 执行 db.addUser('root','xxxxxxx');   执行认证的时候需要  use admin 然后执行 db.auth('user','xxxxxx');

    2、如果有数据库没有设置用户 超级管理员可以 查看并修改该数据库中的数据,已经设置用户超级管理员依然可以查看并修改数据。  

    3、同时可以指定用户 指定数据库 登陆mongo。   比如

    root@timeless-HP-Pavilion-g4-Notebook-PC:/usr/local/apache243/htdocs# /usr/local/mongodb/mongo  -uroot -p201671zhuang localhost:27017/admin
    MongoDB shell version: 2.6.6
    connecting to: localhost:27017/admin
    >show tables
    system.indexes
    system.users
    system.version
    >

    二、添加完顶层admin用户,可以用admin账户进行其他用户的设置

    如果想让单独的库有单独的用户名就得先从admin登录然后设置相应的用户信息,具体操作如下:

    
    
    > use test
    switched to db test
    > show collection
    2015-03-10T19:42:33.621+0800 don't know how to show [collection] at src/mongo/shell/utils.js:729
    > db.addUser('root','xxxxxxxxxxx');
    WARNING: The 'addUser' shell helper is DEPRECATED. Please use 'createUser' instead
    Successfully added user: { "user" : "root", "roles" : [ "dbOwner" ] }

    以后添加用户 使用 createUser(),提示addUser() 不赞成使用。
    > exit
    bye
    root@timeless-HP-Pavilion-g4-Notebook-PC:/usr/local/apache243/htdocs# /usr/local/mongodb/mongo  -uroot -pxxxxxx localhost:27017/test
    MongoDB shell version: 2.6.6
    connecting to: localhost:27017/test
    > 
    
  • 相关阅读:
    Android 数据库框架OrmLite的使用(二)
    Fragment响应返回键
    jQuery判断当前元素显示状态并控制元素的显示与隐藏
    Android UI设计中一些不错的示例及第三方控件
    js数组操作总结
    Easyui datagrid 设置内容超过单元格宽度时自动换行显示
    Easyui datagrid 扩展单元格textarea editor
    Easyui datagrid combobox输入框非法输入判断与事件总结
    Tomcat 参数配置相关
    单元测试_JUnit常用单元测试注解介绍及代码演示
  • 原文地址:https://www.cnblogs.com/timelesszhuang/p/4322379.html
Copyright © 2011-2022 走看看