• MongoDB初探系列之三:MongoDB用户权限操作


    经过初探一的配置和初探二的基本了解,以下将在初探三中介绍一下MongoDB的用户权限操作。

    一点点简单介绍:

    和其它全部数据库一样。权限的管理都几乎相同一样。

    mongodb存储全部的用户信息在admin 数据库的集合system.users中,保存username、password和数据库信息。mongodb默认不启用授权认证,仅仅要能连接到该server,就可连接到mongod。若要启用安全认证,须要更改配置文件參数auth。


    1.查看当前MongoDB以下都已经存在了哪些数据库

    show dbs 
    显示结果例如以下:


    因为我本地已经存在了admin库,因此能够直接学习以下的内容。假设各位小伙伴安装好MongoDB后没有

    发现admin库,那么能够使用以下的命令来创建admin库并创建一个admin用户,兴许我们会用到。

     use admin  
      
     db.createUser(  
      {  
        user: "admin",  
        pwd: "admin",  
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]  
      }  
    )  

    2、进入admin库。我们来查看一下它都包括哪些东西


    进入后我们发现他包括索引,用户和版本三个集合。

    3、分别运行集合的find命令,来查看一下这三个集合里面的数据。

    【注:这里的集合相当于我们平时用的数据库的表】

    > db.system.users.find();
    { "_id" : "admin.admin", "user" : "admin", "db" : "admin", "credentials" : { "SC
    RAM-SHA-1" : { "iterationCount" : 10000, "salt" : "DDWOrIFkjoeF7mFGNOgsMA==", "s
    toredKey" : "Q7JLL0AziNLBtngVJYglQ+lZRvE=", "serverKey" : "qRC3s0HCrmIw2My5s0zAm
    HQUzvM=" } }, "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ]
    }
    > db.system.indexes.find();
    { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.version"
     }
    { "v" : 1, "key" : { "_id" : 1 }, "name" : "_id_", "ns" : "admin.system.users" }
    
    { "v" : 1, "unique" : true, "key" : { "user" : 1, "db" : 1 }, "name" : "user_1_d
    b_1", "ns" : "admin.system.users" }
    > db.system.version.find();
    { "_id" : "authSchema", "currentVersion" : 5 }

    4、如今启用 auth

    编辑我们在初探一中的写的配置文件mongo.config,然后在最以下增加这么一行。

    auth=true 

    如今我们来重新启动Mongod服务,此时我们会发现我们没有权限訪问了,例如以下图所看到的:


    刚才在admin库中创建了一个账户 admin ,先来连接admin库(其它db则失败):

    > db.auth("admin","admin");
    Error: 18 Authentication failed.
    0
    > use admin;
    switched to db admin
    > db.auth("admin","admin");
    1

    0:代表授权失败 1:代表授权成功


    为了验证没有授权不能查看相应的集合。我们将库切换至test库,然后运行show collections 命令,结果例如以下。

    事实证明开启了权限认证以后,则必须拥有授权才干訪问相应库的相应集合。

    > use test
    switched to db test
    > show collections;
    2015-07-19T15:51:59.069+0800 E QUERY    Error: listCollections failed: {
            "ok" : 0,
            "errmsg" : "not authorized on test to execute command { listCollections:
     1.0 }",
            "code" : 13
    }
        at Error (<anonymous>)
        at DB._getCollectionInfosCommand (src/mongo/shell/db.js:646:15)
        at DB.getCollectionInfos (src/mongo/shell/db.js:658:20)
        at DB.getCollectionNames (src/mongo/shell/db.js:669:17)
        at shellHelper.show (src/mongo/shell/utils.js:625:12)
        at shellHelper (src/mongo/shell/utils.js:524:36)
        at (shellhelp2):1:1 at src/mongo/shell/db.js:646

    5、对于创建的相关用户进行角色授权

    角色授权分两种。一种是直接在当前库中创建用户并授予相关权限。如admin库中创建admin用户。还有一种情况是

    将在admin中创建的用户授予操作其它库的权限,相关授权命令例如以下:

    #授予角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ])  
    #取消角色:db.grantRolesToUser( "userName" , [ { role: "<role>", db: "<database>" } ]) 
    以下我们在admin库中运行以下命令:

     db.grantRolesToUser( "admin" , [ { role: "dbOwner", db: "test" } ]) ;

    然后我们切换到test库。我们惊奇的发现此时admin用户也能运行show collections 命令了。

    注意:

    通过db.auth("admin","admin") 命令登陆,仅仅能登陆包括这个用户的库。可是成功登陆之后,假设当前用户拥有

    訪问其它库的权限,能够直接切换到相应的库,运行相关的数据操作命令。

    因此。为了方便起见,还是建议每一个库在创建的时候,直接在当前库中创建好使用的用户,这样就不用来回切换了。

    6、创建自己定义角色,并对角色进行授权

    #创建角色并授权
    db.createRole({   
     role: "testRole",  
     privileges: [{ resource: { db: "mydb", collection: "" }, actions: [ "find" ] }],  
     roles: []  
    })  
    #加入Privileges给角色  
    db.grantPrivilegesToRole("testRole",  
     [{ resource: { db: "mydb", collection: "" },actions: [ "update", "insert", "remove" ]}  
    ])  
    

    #更改角色 roles,把roles值所有更新。

    相同Privileges也能够更新替换 db.updateRole("testRole",{ roles:[{ role: "readWrite",db: "mydb"}]},{ w:"majority" })


    关于角色,參考官方文档提取总结例如以下:

    角色分类

    角色

    权限及角色

    (本文大写和小写可能有些变化,使用时请參考官方文档)

    Database User Roles

    read

    CollStats,dbHash,dbStats,find,killCursors,listIndexes,listCollections

    readWrite

    CollStats,ConvertToCapped,CreateCollection,DbHash,DbStats,

    DropCollection,CreateIndex,DropIndex,Emptycapped,Find,

    Insert,KillCursors,ListIndexes,ListCollections,Remove,

    RenameCollectionSameDB,update

    Database Administration Roles

    dbAdmin

    collStats,dbHash,dbStats,find,killCursors,listIndexes,listCollections,

    dropCollection 和 createCollection 在 system.profile

    dbOwner

    角色:readWrite, dbAdmin,userAdmin

    userAdmin

    ChangeCustomData,ChangePassword,CreateRole,CreateUser,

    DropRole,DropUser,GrantRole,RevokeRole,ViewRole,viewUser

    Cluster Administration Roles

    clusterAdmin

    角色:clusterManager, clusterMonitor, hostManager

    clusterManager

    AddShard,ApplicationMessage,CleanupOrphaned,FlushRouterConfig,

    ListShards,RemoveShard,ReplSetConfigure,ReplSetGetStatus,

    ReplSetStateChange,Resync,

     

    EnableSharding,MoveChunk,SplitChunk,splitVector

    clusterMonitor

    connPoolStats,cursorInfo,getCmdLineOpts,getLog,getParameter,

    getShardMap,hostInfo,inprog,listDatabases,listShards,netstat,

    replSetGetStatus,serverStatus,shardingState,top

     

    collStats,dbStats,getShardVersion

    hostManager

    applicationMessage,closeAllDatabases,connPoolSync,cpuProfiler,

    diagLogging,flushRouterConfig,fsync,invalidateUserCache,killop,

    logRotate,resync,setParameter,shutdown,touch,unlock

    Backup and Restoration Roles

    backup

    提供在admin数据库mms.backup文档中insert,update权限

    列出全部数据库:listDatabases

    列出全部集合索引:listIndexes

     

    对下面提供查询操作:find

    *非系统集合

    *系统集合:system.indexes, system.namespaces, system.js

    *集合:admin.system.users 和 admin.system.roles

    restore

    非系统集合、system.js。admin.system.users 和 admin.system.roles 及2.6 版本号的system.users提供下面权限:

    collMod,createCollection,createIndex,dropCollection,insert

     

    列出全部数据库:listDatabases

    system.users :find,remove,update

    All-Database Roles

    readAnyDatabase

    提供全部数据库中仅仅读权限:read

    列出集群全部数据库:listDatabases

    readWriteAnyDatabase

    提供全部数据库读写权限:readWrite

    列出集群全部数据库:listDatabases

    userAdminAnyDatabase

    提供全部用户数据管理权限:userAdmin

    Cluster:authSchemaUpgrade,invalidateUserCache,listDatabases

    admin.system.users和admin.system.roles:

    collStats,dbHash,dbStats,find,killCursors,planCacheRead

    createIndex,dropIndex

    dbAdminAnyDatabase

    提供全部数据库管理员权限:dbAdmin

    列出集群全部数据库:listDatabases

    Superuser Roles

    root

    角色:dbOwner,userAdmin,userAdminAnyDatabase

    readWriteAnyDatabase, dbAdminAnyDatabase,

    userAdminAnyDatabase,clusterAdmin

    Internal Role

    __system

    集群中对不论什么数据库採取不论什么操作


    OK 。至此简单的权限操作已经介绍完成。初探四中将介绍一下MongoDB与JDBC的联合使用。

  • 相关阅读:
    《新下级学》第七章第二节——冲突
    《新下级学》第七章序和第一节——微观互动
    《新下级学》第六章第七第八节(本章完)——下级软弱的根源等
    《新下级学》第六章第五第六节——下级的底线等
    《新下级学》第六章第三第四节——下级对平级的看法等
    《新下级学》第六章第二节——下级对自己的需求、能力和责任的看法
    《新下级学》第六章序、第一节——下级的思维特点及处境
    《新下级学》第四章、第五章——什么是“下级”
    《新下级学》第三章——新下级学的立场
    变电站GPS校时产品(GPS对时设备)在线监测技术
  • 原文地址:https://www.cnblogs.com/wgwyanfs/p/7116629.html
Copyright © 2020-2023  润新知