• MongoDB安全:创建角色(User-Defined Roles)


    MongoDB已经定义了一些内建角色,同时还提供了用户自定义角色的功能,以满足用户千差万别的需求。

    官文User-Defined Roles中对其有简略介绍,但要熟悉怎么创建角色,还需要了解下面的这些概念:

    -(数据库)操作(Privilege Actions)

    -(数据库)资源(Resource)

    -Scope

    -权限(Privileges)

    -权限继承(Inherited Privileges)

    -

    上面的概念可以参考下面的官文:

    Role-Based Access Control

    Privilege Actions

    Resource Document

    官文中下面几句话孤以为是重点:

    1.When adding a role, you create the role in a specific database.

      在添加角色时,是将角色添加到某个数据库下。

    2.MongoDB uses the combination of the database and the role name to uniquely define a role.

      MongoDB使用 数据库和角色名 作为 角色的 唯一标识

    3.MongoDB stores all role information in the system.roles collection in the admin database.

      MongoDB将所有角色信息存储到 admin数据库下的名为system.roles的集合 中。

    4.A MongoDB privilege comprises a resource and the permitted actions.

      一个MongoDB权限 包含一个资源上允许的操作,即可以对某个资源做什么

    5.a user-defined role scoped for a non-admin database VS. User-defined roles scoped for the admin database

      自定义在非admin数据库上的角色 对比 自定义在admin数据库上的角色

      上面两种角色 孤的翻译或许不准确,请读者提供意见,后者有用更多能力——创建、更新、继承等方面。

    怎么创建角色呢?

    本文的重点。更准确的说法应该是 怎么创建某个数据库的角色?使用db.createRole()

    官文db.createRole()中给出了其具体使用方法:

    db.createRole(role, writeConcern)

    参数role是必须的,定义了角色名称及其权限定义;参数writeConcern可选的暂不熟悉其用法及意义,请参考官文Write Concern

    官文db.createRole()中给出的role参数(document)的规范:

    其中,

    role为角色名称;

    privileges为 权限(资源上的操作)列表;

    roles为 需要继承的 某些角色 在 某个数据库上的权限 的列表;

    authenticationRestrictions为 服务器对该角色 强制要求的认证限制,可选项,比如,只允许某些IP地址的拥有该角色的用户的连接请求(很有用啊!)。

    当然,具体细节请参考官文db.createRole()及其它官文。

    疑问:角色名称 可以使用哪些字符?是否能用点号(.)等?是否可以用中文?长度限制?加上数据库名后的长度限制(唯一标识)?每个数据库可以创建多少个角色?整个服务器呢?整个Replica Set呢?更大规模的呢?

    提示:本文涉及到单例MongoDB服务器,而没有涉及到Replica Set、集群等更大规模的角色管理,还需要继续dig(以后项目用到了再dig也不迟,近期可以考虑熟悉Replica Set的相关操作)。

    提示:在创建角色前,请确认当前用户是否在目标资源上拥有createRole、grantRole、setAuthenticationRestriction等操作的权力。否则,创建失败。

    下面是官文db.createRole()中的一个示例(JavaScript格式?):

     1 use admin
     2 db.createRole(
     3    {
     4      role: "myClusterwideAdmin",
     5      privileges: [
     6        { resource: { cluster: true }, actions: [ "addShard" ] },
     7        { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] },
     8        { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] },
     9        { resource: { db: "", collection: "" }, actions: [ "find" ] }
    10      ],
    11      roles: [
    12        { role: "read", db: "admin" }
    13      ]
    14    },
    15    { w: "majority" , wtimeout: 5000 }
    16 )

    更多示例请参考官文Manage Users and Roles(下午孤也会去看看这个)。

    提示:示例 真的很重要!可以加快学习的进程和效率!节约时间(生命)!

    【角色管理】

    对了,除了创建角色,MongoDB还允许修改角色、更新角色、删除角色等,请在官文mongo Shell Methods - Role Management查看更多信息:

    后记

    怎么为不同规模的MongoDB应用创建角色呢?策略是什么?

    做了MongoDB里面的相关安全操作,可以保证多大程度的安全?

    模糊地记得,数据库文件会被锁住,这个又该怎么办?提高操作系统、网络等的安全性?

    MongoDB源码漏洞出现时,怎么第一时间发现并解决?保证数据的安全性、保证基于MongoDB的应用的稳定性?

    额,还有好多要做的。

    当然,知识的内容很多,普通程序员、高级程序员、架构师需要了解的东西不一样,需要循序渐进才是!

    要是精通MongoDB了,直接做MongoDB管理员好了!

    路漫漫~

    角色创建成功后,就可以考虑建立基于角色的用户了。

  • 相关阅读:
    [转] KVM I/O slowness on RHEL 6
    QEMU KVM libvirt 手册(3)
    QEMU KVM libvirt手册(2): monitor
    QEMU KVM libvirt 手册(1): 安装
    CentOS7下JSP连接Mysql
    使用Tomcat搭建基于域名的虚拟机
    CentOS7下搭建Tomcat服务器
    Nginx在线服务状态下平滑升级或新增模块
    源码安装LNMP
    二进制包安装Mysql
  • 原文地址:https://www.cnblogs.com/luo630/p/9283370.html
Copyright © 2020-2023  润新知