• MongoDB——权限管理


    MongoDB——权限管理

    MongoDB默认是没有权限验证的,但生产环境中,没有权限控制是很不安全的。

    我们先不详谈太多概念,直接动手创建两个典型的账号:

    • 超级管理员,类似sql server的sa账号或者mysql的root账号
    • 单个数据库的读写权限账号

    创建超级管理员

    1. 在没开启权限验证机制的时候,我们在“命令指示符”窗口用mongo打开MongoDB的shell。

    2. 使用“use”命令,切换到admin数据库,MongoDB用admin的system.users集合保存着用户信息。

       > use admin
       switched to db admin
       >
      
    3. 使用db.createUser方法来创建用户,具体的说明,请参考官网文档

       > db.createUser(
       ...    {
       ...      user: "sa",
       ...      pwd: "123",
       ...      roles: [ { role: "__system", db: "admin" } ]
       ...    }
       ...  )
       Successfully added user: {
               "user" : "sa",
               "roles" : [
                       {
                               "role" : "__system",
                               "db" : "admin"
                       }
               ]
       }
       >
      

    这样我们就创建了一个账号:sa,密码:123,拥有“__system”角色的权限,关于“__system”角色的具体说明,请参考官网文档

    警告:不要把拥有“__system”角色的账号分配给系统程序使用

    开启权限验证

    MongoDB学习——基础入门这一篇中,我们将MongoDB安装到window服务的时候,创建了一个“mongod.cfg"配置文件,现在我们给配置文件修改为如下:

    systemLog:
        destination: file
        path: D:Program FilesMongoDBServer3.0logmongod.log
    storage:
        dbPath: D:Program FilesMongoDBServer3.0db
    # 开启验证
    security:
        authorization: enabled
    

    重新启动后,MongoDB的操作就需要给客户端授权后才能正常的工作了。

    给test创建一个拥有读写权限的账号

    1. 退出之前的MongoDB的shell,可以直接关闭,然后重新打开一个“命令指示符”窗口或者使用“exit”命令。

    2. 使用之前创建的“sa”账号登陆,登陆用到“db.auth"方法,如下所示:

       > exit
       bye
       
       C:Users**>mongo
       MongoDB shell version: 3.0.6
       connecting to: test
       > use admin
       switched to db admin
       > db.auth("sa","123")
       1
       >
      
    3. 给“test”数据库创建一个账号:testUser,密码:123,拥有“readWrite”角色的权限

       > use test
       switched to db test
       > db.createUser(
       ...    {
       ...      user: "testUser",
       ...      pwd: "123",
       ...      roles: [ { role: "readWrite", db: "test" } ]
       ...    }
       ...  )
       Successfully added user: {
               "user" : "testUser",
               "roles" : [
                       {
                               "role" : "readWrite",
                               "db" : "test"
                       }
               ]
       }
       >
      

    MongoDB中用户的角色说明

    read

    数据库的只读权限,包括:

    aggregate,checkShardingIndex,cloneCollectionAsCapped,collStats,count,dataSize,dbHash,dbStats,distinct,filemd5,mapReduce (inline output only.),text (beta feature.)geoNear,geoSearch,geoWalk,group
    

    readWrite

    数据库的读写权限,包括:

    	cloneCollection (as the target database.),convertToCapped,create (and to create collections implicitly.),renameCollection (within the same database.)findAndModify,mapReduce (output to a collection.) drop(),dropIndexes,emptycapped,ensureIndex() 
    

    read的所有权限

    dbAdmin

    clean,collMod,collStats,compact,convertToCappe create,db.createCollection(),dbStats,drop(),dropIndexes ensureIndex(),indexStats,profile,reIndex renameCollection (within a single database.),validate 
    

    userAdmin角色

    数据库的用户管理权限
    

    clusterAdmin角色

    集群管理权限(副本集、分片、主从等相关管理),包括:

    addShard,closeAllDatabases,connPoolStats,connPoolSync,_cpuProfilerStart_cpuProfilerStop,cursorInfo,diagLogging,dropDatabase 
    shardingState,shutdown,splitChunk,splitVector,split,top,touchresync 
    serverStatus,setParameter,setShardVersion,shardCollection 
    replSetMaintenance,replSetReconfig,replSetStepDown,replSetSyncFrom 
    repairDatabase,replSetFreeze,replSetGetStatus,replSetInitiate 
    logRotate,moveChunk,movePrimary,netstat,removeShard,unsetSharding 
    hostInfo,db.currentOp(),db.killOp(),listDatabases,listShardsgetCmdLineOpts,getLog,getParameter,getShardMap,getShardVersion 
    enableSharding,flushRouterConfig,fsync,db.fsyncUnlock()
    

    readAnyDatabase

    任何数据库的只读权限(和read相似)

    readWriteAnyDatabase

    任何数据库的读写权限(和readWrite相似)

    userAdminAnyDatabase

    任何数据库用户的管理权限(和userAdmin相似)

    dbAdminAnyDatabase

    任何数据库的管理权限(dbAdmin相似)

    __system

    什么权限都有

  • 相关阅读:
    Python中如何取字典中的键值
    Python中random模块的用法案例
    Python中模块import的使用案例
    Python中模块的定义及案例
    Python中from … import …语句
    Python中模块调用说明
    Python中模块、类、函数、实例调用案例
    Python中读写文件三部曲
    Python中特殊函数__str__()
    Python--网络编程-----基于UDP协议的套接字不会发生粘包
  • 原文地址:https://www.cnblogs.com/sheepswallow/p/4868519.html
Copyright © 2020-2023  润新知