基于Docker部署一个数据库实例通常比直接在服务器上安装数据库还要简单,Gevin在开发环境中经常使用基于docker的数据库服务,docker也渐渐成为Gevin在Linux上安装MongoDB的首选方式,由于MongoDB默认是不用通过认证就能直接连接的,出于安全考虑,在公网上部署MongoDB时,务必设置authentication机制,以避免类似 "黑客赎金" 问题的发生。
那么,基于Docker拉起的MongoDB,如何实现通过用户名密码访问指定数据库呢?方法很简单,但前提是要了解MongoDB授权访问的机制,参考资料如下:
Enable Auth
Authentication
Role-Based Access Control
只要了解MongoDB授权访问机制,直接按下面步骤一步步执行就可以了。
1、创建MongoDB实例
为了少写几个命令,Gevin使用Docker Compose来创建MongoDB实例:
version: '2' services: mongo: # restart: always image: mongo:3.2 command: [--auth] ports: - "37017:27017" volumes: - /data/db
运行如下命令:
docker-compose up -d #---------- # Result: #---------- # Creating mongodb_mongo_1 docker-compose ps #---------- # Result: #---------- # Name Command State Ports # -------------------------------------------------------------------------- # mongodb_mongo_1 /entrypoint.sh --auth Up 0.0.0.0:37017->27017/tcp
2、创建用户管理员
首先要进入MongoDB容器内部,连上MongoDB,并切换到 admin 数据库,这步可以通过下面命令完成:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- # MongoDB shell version: 3.2.12 # connecting to: admin # Welcome to the MongoDB shell. # For interactive help, type "help". # For more comprehensive documentation, see # http://docs.mongodb.org/ # Questions? Try the support group # http://groups.google.com/group/mongodb-user
然后创建一个user administrator:
db.createUser({ user: 'mongo-admin', pwd: 'admin-initial-password', roles: [ { role: "userAdminAnyDatabase", db: "admin" } ] }); #---------- # Result: #---------- Successfully added user: { "user" : "mongo-admin", "roles" : [ { "role" : "userAdminAnyDatabase", "db" : "admin" } ] }
3、创建访问指定数据库的用户
创建了user administrator后,需要退出mongodb,并重新连接,然后用user administrator 访问admin数据库,并为目标数据库创建目标用户,其具体步骤如下:
(1)重新连接MongoDB数据库
退出容器,重新用下面命令进入容器即可:
docker exec -it mongodb_mongo_1 mongo admin #---------- # Result: #---------- MongoDB shell version: 3.2.12 connecting to: admin
(2)授权登录admin
db.auth("mongo-admin","admin-initial-password")
(3)创建访问指定数据库的用户
# Step1: switch to the specified database: use octblog # Step2: create a user db.createUser( { user: "gevin", pwd: "gevin", roles: [ { role: "readWrite", db: "octblog" }, { role: "readWrite", db: "octblog-log" } ] } ) #---------- # Result: #---------- #Successfully added user: { # "user" : "gevin", # "roles" : [ # { # "role" : "readWrite", # "db" : "octblog" # }, # { # "role" : "readWrite", # "db" : "octblog-log" # } # ] #}
这一步的目标是为 octblog 这个数据库创建一个授权访问用户,首先要从 admin 数据库切换到 octblog 数据库,然后才能为 octblog 添加授权访问用户
注:
上面所以操作均为user administrator执行的,即第二步创建的 mongo-admin user administrator的作用是管理用户,MongoDB下的每个数据库,用户都被它管理,除此外,它基本没什么更多权限做其他事情MongoDB没有通常意义的超级用户的概念,octblog的授权用户只能被user administrator创建,而user administrator只能登陆admin数据库,所以才会有上面(2)、(3)两步的麻烦。
以上所述是小编给大家介绍的基于Docker的MongoDB实现授权访问的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对小牛知识库网站的支持!
基于路径的授权 Apache和svnserve都可以给用户赋予(或拒绝)访问许可,通常是对整个版本库:一个用户可以读版本库(或不),而且他可以写版本库(或不)。如果可能,也可以定义细粒度的访问规则。一组用户可以有版本库的一个目录的读写权限,但是没有其它的;另一个目录可以是只对一少部分用户可读。 两种服务器都使用同样的文件格式描述路径为基础的规则,如果是Apache,需要加载mod_authz_sv
我想在我的Spring mvc项目之一中实现基于URL的授权。在我的Spring mvc项目中,我使用java配置。我已将此站点https://www.baeldung.com/role-and-privilege-for-spring-security-registration以实现基于角色和特权的授权。 所以我创建了下面的表来实现。 这是用户表。 这个角色表。 这是角色和特权之间的映射表。 这
本文向大家介绍Spring Cloud下基于OAUTH2认证授权的实现示例,包括了Spring Cloud下基于OAUTH2认证授权的实现示例的使用技巧和注意事项,需要的朋友参考一下 在Spring Cloud需要使用OAUTH2来实现多个微服务的统一认证授权,通过向OAUTH服务发送某个类型的grant type进行集中认证和授权,从而获得access_token,而这个token是受其他微服务
对于有授权验证的 Redis,正确的认证方法,请参考下面例子: server { location /test { content_by_lua_block { local redis = require "resty.redis" local red = redis:new() red:set_ti
我遇到了使用文档签名 API 的第一个障碍,需要一些帮助。 我将docusignrestapi集合导入到Postman中。我设置了iKey、iSec、encodedKeys和codeFromUrl变量。 当尝试发送'01-授权代码授予访问令牌'post API时,我每次都得到以下响应。 我尝试从Postman中删除所有内容,包括环境,并从DocuSign中删除该应用程序,然后重新开始,以便我的所有
本文向大家介绍Docker端口映射实现网络访问的方法,包括了Docker端口映射实现网络访问的方法的使用技巧和注意事项,需要的朋友参考一下 Docker运行容器之后却发现没IP,没端口,那要如何访问容器呢? 下面我来介绍下docker通过端口映射来实现网络访问 一、从外部访问容器应用 在启动容器的时候,如果不指定对应参数,在容器外部是无法通过网络来访问容器内的网络应用和服务的。 当容器中运行一些网