• Mongodb 3.0 创建用户


      MongoDB 3.0 安全权限访问控制,在添加用户上面3.0版本和之前的版本有很大的区别,这里就说明下3.0的添加用户的方法。

    创建第一个用户(该用户需要有grant权限,即:账号管理的授权权限)

    1.以非auth认证方式启动数据库: 
    [mongodb@hadoop1 ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/trace.log --logappend  --port=27017 --fork
    [mongodb@hadoop1 ~]$ mongo
    MongoDB shell version: 3.2.4
    connecting to: test
    > show dbs
    local  0.000GB      #当前只有一个local库,admin库是不存在的
    > 
    
    2.在指定的数据库下创建用户
    > use admin         #帐号是跟着库走的,所以要在指定库里创建用户,必须也在指定库里验证(auth)
    switched to db admin
    > db.createUser(
    ...    {
    ...  user: "dba",
    ...  pwd: "dba",
    ...  roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    ...    }
    ... );
    > 
    
    user: 用户名
    pwd:  密码
    roles:指定用户的角色,可以用一个空数组给新用户设定空角色;在roles字段,可以指
    定内置角色和用户定义的角色。 role里的角色 可以选:
    
    Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase,userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    7. 内部角色:__system

      

      刚建立了拥有userAdminAnyDatabase 角色的第一个用户"dba".可以通过这个角色来创建、删除用户

    开启auth认证方式启动数据库

    [mongodb@hadoop1 ~]$ mongod --dbpath=/mongodb/data --logpath=/mongodb/log/trace.log --logappend  --auth --port=27017 --fork
    [mongodb@hadoop1 ~]$ mongo
    MongoDB shell version: 3.2.4
    connecting to: test
    > use admin               #因为是在admin下面添加的帐号,所以要到admin下面验证(连接)。
    switched to db admin
    > show dbs;
    2016-03-27T10:44:27.039-0400 E QUERY    [thread1] Error: listDatabases failed:{
            "ok" : 0,
            "errmsg" : "not authorized on admin to execute command { listDatabases: 1.0 }",
            "code" : 13
    } 
    
    > db.auth('dba','dba');   #相当于输入用户名/密码验证(连接)
    1
    > show dbs;
    admin  0.000GB
    local  0.000GB
    >

    创建两个测试用户

    > use admin
    > db.auth('dba','dba');
    > use test                #切换到test数据库,这两个用户是在test下创建的
    switched to db test
    > db.createUser(
    ...  {
    ...    user: "polestar",
    ...    pwd: "polestar",
    ...    roles: [{ role: "read", db: "test" }]
    ...  }
    ... )
    > db.createUser(
    ...  {
    ...    user: "polestar_rw",
    ...    pwd: "polestar",
    ...    roles: [ { role: "readWrite", db: "test" }]
    ...  }
    ... );
    > 
    
    > show users;            #test数据库下只有两个用户
    {
            "_id" : "test.polestar",
            "user" : "polestar",
            "db" : "test",
            "roles" : [
                    {
                            "role" : "read",
                            "db" : "test"
                    }
            ]
    }
    {
            "_id" : "test.polestar_rw",
            "user" : "polestar_rw",
            "db" : "test",
            "roles" : [
                    {
                            "role" : "readWrite",
                            "db" : "test"
                    }
            ]
    }
    > 
    > use admin;           #admin数据库下只有一个用户
    switched to db admin
    > show users;
    {
            "_id" : "admin.dba",
            "user" : "dba",
            "db" : "admin",
            "roles" : [
                    {
                            "role" : "userAdminAnyDatabase",
                            "db" : "admin"
                    }
            ]
    }
    >

      

      有没有一个超级权限?不仅可以授权,而且也可以对集合进行任意操作?答案是肯定的,只是不建议使用。那就是role角色设置成root。

    创建超级权限用户

    > use admin;
    switched to db admin
    > db.auth('dba','dba')
    1 
    > db.createUser(
    ...   {
    ... user: "root",
    ... pwd: "root",
    ... roles: [{ role: "root", db: "admin" }]
    ...   }
    ... )
    > 
    
    > db.auth('root','root')         #超级用户可以垮裤插入、查询
    1
    > use test
    switched to db test
    > db.abc.insert({"a":1,"b":2})
    WriteResult({ "nInserted" : 1 })
    > db.abc.find()
    { "_id" : ObjectId("56f7fa72a219e00610fe75cb"), "a" : 1, "b" : 2 }
    > 

      因为帐号都是在当前需要授权的数据库下授权的,那要是不在当前数据库下会怎么样?

    > use admin
    switched to db admin
    > db.createUser(
    ...   {
    ... user: "mgdb",
    ... pwd: "mgdb",
    ... roles: [{ role: "readWrite", db: "test" }]  #在admin库下创建test库的帐号
    ...   }
    ... )
    >
    
    > show users;
    {
            "_id" : "admin.dba",
            "user" : "dba",
            "db" : "admin",
            "roles" : [
                    {
                            "role" : "userAdminAnyDatabase",
                            "db" : "admin"
                    }
            ]
    }
    {
            "_id" : "admin.root",
            "user" : "root",
            "db" : "admin",
            "roles" : [
                    {
                            "role" : "root",
                            "db" : "admin"
                    }
            ]
    }
    {
            "_id" : "admin.mgdb",
            "user" : "mgdb",
            "db" : "admin",
            "roles" : [
                    {
                            "role" : "readWrite",
                            "db" : "test"
                    }
            ]
    }
    > 
    
    > use test
    switched to db test
    > db.auth('mgdb','mgdb');
    Error: Authentication failed.    #在admin下创建的帐号,不能直接在其他库验证,
    0
    > use admin                      #只能在帐号创建库下认证,再去其他库进行操作
    switched to db admin
    > db.auth('mgdb','mgdb');
    1
    > use test
    switched to db test
    > db.abc.insert({"a":1111,"b":2222})
    WriteResult({ "nInserted" : 1 })
    > 
  • 相关阅读:
    从外部访问 Template (模板)的控件、获取它的属性值
    继续聊WPF——动态数据模板
    WPF数据模板样式选择器
    深入理解正则表达式
    nssm使用,安装服务、删除服务
    Windows删除某服务
    nssm设置solr开机启动服务
    Windows下直接双击可执行的jar
    Unsupported major.minor version 52.0——解决
    js延迟2秒执行事件
  • 原文地址:https://www.cnblogs.com/polestar/p/5334656.html
Copyright © 2020-2023  润新知