zoukankan      html  css  js  c++  java
  • MongoDB用户与角色管理

    (一)用户管理
    (1)创建用户
    1.要添加用户,MongoDB提供了db.createUser()方法。添加用户时,可以为用户分配角色,授予权限。
    2.在数据库中创建的第一个用户应该具有管理其他用户的权限。
    3.添加用户时,可以在特定的数据库中创建该用户,该数据库是用户的身份验证数据库。用户可以在不同的数据库之间拥有特权,也就是说,用户的权限不限于其身份验证数据库,通过分配其他数据库中的角色,在一个数据库中创建的用户可以对其它数据库执行操作。
    4.用户名和身份验证数据库用作该用户的唯一标识,也就是说,如果两个用户具有相同的名称,但是在不同的数据库中创建,则他们是2个不同的用户,如果打算让一个用户对多个数据库拥有操作权限,请在适当的数据库中创建一个具有角色的单个用户,而不是在不同的数据库中多次创建该用户。

    例子1:在lijiamandb数据库中,创建用户lijiaman,对该库具有读写权限。

    use lijiamandb
    
    db.createUser(
    {
    user:"lijiaman",
    pwd:passwordPrompt(),
    roles:[{role:"readWrite",db:"lijiamandb"}]
    }
    )

    例子2:在reportdb数据库中,创建用户report,对reportdb数据库具有读写权限,对lijiamandb具有读的权限。

    use reportdb
    
    db.createUser(
    {
    user:"report",
    pwd:passwordPrompt(),
    roles:[
    {role:"readWrite",db:"reportdb"},
    {role:"read",db:"lijiamandb"}
    ]
    }
    )

    (2)删除用户

    db.dropUser("user_name")

    (3)修改用户密码
    例如,把lijiamandb数据库中的user1用户的密码改为123456。

    use lijiamandb
    db.changeUserPassword("user1", "123456")

    (二)认证机制
    从MongoDB4.0版本开始,MongoDB删除了MONGODB-CR认证方式,MongoDB支持如下认证方式:
    --SCRAM(默认方式)
    --x.509

    (三)基于角色的访问控制
    1.MongoDB使用基于角色访问控制(Role-Based Access Control,RBAC)来管理对MongoDB系统的访问,授予用户一个或者多个角色,来决定用户对数据库资源的访问以及操作权限。
    MongoDB默认不启用访问控制,管理员可以再启动中使用--auth或者配置文件中使用security.authorization参数来启用访问控制。
    2.角色被授予权限,从而对资源执行指定的操作。
    权限由指定的资源和对该资源允许的操作组成,一个资源可以是一个数据库、集合、或者是集群。如果资源师集群,则相关操作会影响系统状态。

    (四)数据库内置角色
    MongoDB在每一个数据库上提供内置的Database User Roles和Database Administration Roles,仅仅对admin数据库提供所有内置角色。
    (4.1)Database User Roles
    (4.1.1)read
    读取所有非系统集合和system.js的功能。

    该角色包含以下操作:
    changeStream
    collStats
    dbHash
    dbStats
    find
    killCursors
    listIndexes
    listCollections


    (4.1.2)readWrite
    在read角色的基础上,增加了对所有非系统集合和system.js集合的修改功能

    该角色包含以下操作:
    collStats
    convertToCapped
    createCollection
    dbHash
    dbStats
    dropCollection
    createIndex
    dropIndex
    find
    insert
    killCursors
    listIndexes
    listCollections
    remove
    renameCollectionSameDB
    update

    (4.2)Database Administration Roles
    (4.2.1)dbAdmin
    提供执行管理任务的能力,例如与schema相关的任务,索引和统计信息收集。该角色没有用户和角色管理的权限。


    (4.2.2)dbOwner
    数据库所有者可以对数据库执行任何操作,该角色由readWrite,dbAdmin,userAdmin角色组合授权。


    (4.2.3)userAdmin
    提供在当前数据库上创建和修改角色和用户的功能,由于该角色允许用户向任何用户(包括自己)授予任何特权,该角色间接提供了超级用户的权限(后面理解不了,附原文)。
    原文:Provides the ability to create and modify roles and users on the current database. Since the userAdmin role allows users to grant any privilege to any user, including themselves, the role also indirectly provides superuser access to either the database or, if scoped to the admin database, the cluster.


    (4.3)Cluster Administration Roles
    仅仅可以对创建在admin数据库中的用户授予集群管理角色。

    (4.3.1)clusterAdmin
    最大的集群管理权限,该角色包含clusterManager、clusterMonitor、hostManager角色,此外,还提供了dropDatabase操作权限。

    (4.3.2)clusterManager
    提供对集群的管理和监视操作,具有此角色的用户可以访问config和local数据库,分别用于分片和复制。

    (4.3.3)clusterMonitor
    提供对集群监视的只读访问。

    (4.3.4)hostManager
    提供监视和管理服务器的功能。


    (4.4)Backup and Restoration Roles
    仅仅可以对创建在admin数据库中的用户授予备份与恢复角色。

    (4.4.1)backup
    提供了最小的使用MongoDB Cloud Manager,Ops Manager,mongodump工具备份数据库的权限。

    (4.4.2)restore
    提供了使用mongorestore恢复数据的权限。


    (4.5)All-Database Roles
    仅仅可以对创建在admin数据库中的用户授予对全部数据库操作的角色。

    (4.5.1)readAnyDatabase

    除了local和config数据库,提供了对其它所有数据库只读(read)的权限。

    (4.5.2)readWriteDatabase
    除了local和config数据库,提供了对其它所有数据库读写(readWrite)的权限。

    (4.5.3)userAdminAnyDatabase
    除了local和config数据库,提供了对其它所有数据库userAdmin角色的权限。

    (4.5.4)dbAdminAnyDatabase
    除了local和config数据库,提供了对其它所有数据库dbAdmin角色的权限。


    (4.6)Superuser Roles
    以下角色具有授予任意数据库中任意用户任意权限的能力,这意味着具有以下角色的用户可以授予自己任何权限。
    -- 在admin数据库中,具有dbOwner角色的用户
    -- 在admin数据库中,具有userAdmin角色的用户
    -- 具有userAdminAnyDatabase角色的用户

    (4.6.1)root
    root角色包含了以下角色:
    readWriteAnyDatabase
    dbAdminAnyDatabase
    userAdminAnyDatabase
    clusterAdmin
    restore
    backup

    (4.7)Internal Role
    (4.7.1)__system
    MongoDB将该角色分配给集群成员,例如副本集成员和mongos实例。授予该角色的用户能够对任意数据库进行任意操作,不要将此角色授予给应用程序用户。


    (五)角色查看、授予、撤销
    (5.1)前提条件
    如果要授权角色给其它用户,必须要有grantRole权限;
    如果要回收角色,必须要有revokeRole权限;
    如果查看角色信息,必须要有viewRole权限。


    (5.2)查看用户
    (5.2.1)可以使用db.getUsers()查看某个数据库中的所有用户

    use lijiamandb
    
    rstest:PRIMARY> db.getUsers()
    [
    {
    "_id" : "lijiamandb.lijiaman",
    "userId" : UUID("3372dc4f-6c83-43fd-8693-a0845e43c16a"),
    "user" : "lijiaman",
    "db" : "lijiamandb",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "lijiamandb"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    },
    {
    "_id" : "lijiamandb.user1",
    "userId" : UUID("95fd5c9a-82d5-48dc-8cdc-0fea31e77d13"),
    "user" : "user1",
    "db" : "lijiamandb",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "lijiamandb"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    },
    {
    "_id" : "lijiamandb.user2",
    "userId" : UUID("f2a1cbf1-9e4d-46ab-b7c5-3a4bd6806465"),
    "user" : "user2",
    "db" : "lijiamandb",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "lijiamandb"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }
    ]

    (5.2.2)可以使用db.getUser("user1")查看数据库中特定用户

    use lijiamandb
    
    rstest:PRIMARY> db.getUser("user1")
    {
    "_id" : "lijiamandb.user1",
    "userId" : UUID("95fd5c9a-82d5-48dc-8cdc-0fea31e77d13"),
    "user" : "user1",
    "db" : "lijiamandb",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "lijiamandb"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }
    rstest:PRIMARY>

    (5.3)查看角色
    通过查看角色,可以看到角色的权限(action)。

    use lijiamandb
    rstest:PRIMARY> db.getRole( "readWrite", { showPrivileges: true } )

    (5.4)角色授予

    use lijiamandb
    db.grantRolesToUser(
    "lijiaman",
    [
    { role: "read", db: "lijiaman" }
    ]
    )

    (5.5)角色回收

    use lijiamandb
    db.revokeRolesFromUser(
    "lijiaman",
    [
    { role: "readWrite", db: "lijiamandb" }
    ]
    )

    【完】

  • 相关阅读:
    《人月神话》读后感
    软件工程心得体会(十一)
    Arch + Win10 EFI 引导重装记录
    BurpSuite 的使用
    Wireshark 的使用
    Android 中的反调试技术
    IDA 对 so 的动态调试
    Smail 中的一些点
    IDA 对 SO 的逆向
    动态调试smali代码
  • 原文地址:https://www.cnblogs.com/lijiaman/p/13258229.html
Copyright © 2011-2022 走看看