基于Docker的MongoDB实现授权访问的方法
基于Docker部署一个数据库实例通常比直接在服务器上安装数据库还要简单,Gevin在开发环境中经常使用基于docker的数据库服务,docker也渐渐成为Gevin在Linux上安装MongoDB的首选方式,由于MongoDB默认是不用通过认证就能直接连接的,出于安全考虑,在公网上部署MongoDB时,务必设置authentication机制,以避免类似"黑客赎金"问题的发生。
那么,基于Docker拉起的MongoDB,如何实现通过用户名密码访问指定数据库呢?方法很简单,但前提是要了解MongoDB授权访问的机制,参考资料如下:
EnableAuth
Authentication
Role-BasedAccessControl
只要了解MongoDB授权访问机制,直接按下面步骤一步步执行就可以了。
1、创建MongoDB实例
为了少写几个命令,Gevin使用DockerCompose来创建MongoDB实例:
version:'2' services: mongo: #restart:always image:mongo:3.2 command:[--auth] ports: -"37017:27017" volumes: -/data/db
运行如下命令:
docker-composeup-d #---------- #Result: #---------- #Creatingmongodb_mongo_1 docker-composeps #---------- #Result: #---------- #NameCommandStatePorts #-------------------------------------------------------------------------- #mongodb_mongo_1/entrypoint.sh--authUp0.0.0.0:37017->27017/tcp
2、创建用户管理员
首先要进入MongoDB容器内部,连上MongoDB,并切换到admin数据库,这步可以通过下面命令完成:
dockerexec-itmongodb_mongo_1mongoadmin #---------- #Result: #---------- #MongoDBshellversion:3.2.12 #connectingto:admin #WelcometotheMongoDBshell. #Forinteractivehelp,type"help". #Formorecomprehensivedocumentation,see #http://docs.mongodb.org/ #Questions?Trythesupportgroup #http://groups.google.com/group/mongodb-user
然后创建一个useradministrator:
db.createUser({ user:'mongo-admin', pwd:'admin-initial-password', roles:[{role:"userAdminAnyDatabase",db:"admin"}]}); #---------- #Result: #---------- Successfullyaddeduser:{ "user":"mongo-admin", "roles":[ { "role":"userAdminAnyDatabase", "db":"admin" } ] }
3、创建访问指定数据库的用户
创建了useradministrator后,需要退出mongodb,并重新连接,然后用useradministrator访问admin数据库,并为目标数据库创建目标用户,其具体步骤如下:
(1)重新连接MongoDB数据库
退出容器,重新用下面命令进入容器即可:
dockerexec-itmongodb_mongo_1mongoadmin #---------- #Result: #---------- MongoDBshellversion:3.2.12 connectingto:admin
(2)授权登录admin
db.auth("mongo-admin","admin-initial-password")
(3)创建访问指定数据库的用户
#Step1:switchtothespecifieddatabase: useoctblog #Step2:createauser db.createUser( { user:"gevin", pwd:"gevin", roles:[{role:"readWrite",db:"octblog"}, {role:"readWrite",db:"octblog-log"}] } ) #---------- #Result: #---------- #Successfullyaddeduser:{ #"user":"gevin", #"roles":[ #{ #"role":"readWrite", #"db":"octblog" #}, #{ #"role":"readWrite", #"db":"octblog-log" #} #] #}
这一步的目标是为octblog这个数据库创建一个授权访问用户,首先要从admin数据库切换到octblog数据库,然后才能为octblog添加授权访问用户
注:
上面所以操作均为useradministrator执行的,即第二步创建的mongo-adminuseradministrator的作用是管理用户,MongoDB下的每个数据库,用户都被它管理,除此外,它基本没什么更多权限做其他事情MongoDB没有通常意义的超级用户的概念,octblog的授权用户只能被useradministrator创建,而useradministrator只能登陆admin数据库,所以才会有上面(2)、(3)两步的麻烦。
以上所述是小编给大家介绍的基于Docker的MongoDB实现授权访问的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!