• 【MongoDB 安全篇】MongoDB用户管理


    目录

    1 软件环境

    2 用户管理

    2.1 查看数据库用户信息

    2.1.1 语法

    2.1.2 示例

    2.2 查看数据库所有用户信息

    2.2.1 语法

    2.2.2 示例

    2.3 创建用户

    2.3.1 语法

    2.3.2 示例

    2.4 修改密码

    2.4.1 语法

    2.4.2 示例

    2.5 修改用户

    2.5.1 语法

    2.5.2 示例

    2.6 删除用户

    2.6.1 语法

    2.6.2 示例

    2.7 删除所有用户

    2.7.1 语法

    2.7.2 示例

    2.8 给用户授权角色

    2.8.1 语法

    2.8.2 示例

    2.9 从用户收回角色

    2.9.1 语法

    2.9.2 示例

    2.10 用户认证

    2.10.1 语法

    2.10.2 示例


    MongoDB提供了各种特性,例如身份验证、访问控制、加密以保护MongoDB服务器。本篇主要对MongoDB下的用户相关的指令进行总结。

    1 软件环境

    使用的软件分别为:

    • VirtualBox 5.2
    • Oracle Linux 6.7
    • MongoDB 4.2.0

    2 用户管理

    2.1 查看数据库用户信息

    返回特定用户的信息,查询时须在用户所在的数据库进行该命令,并且用户必须存在,否则出错。

    2.1.1 语法

    db.getUser( "<username>", {
    showCredentials: <Boolean>,
    showPrivileges: <Boolean>,
    showAuthenticationRestrictions: <Boolean>,
    filter: <document>
    } )

    2.1.2 示例

    > use scott
    switched to db scott
    > db.getUser("scott")
    {
    "_id" : "scott.scott",
    "userId" : UUID("9d580a1f-d8f6-47f6-af02-a090bb8a9123"),
    "user" : "scott",
    "db" : "scott",
    "roles" : [
    {
    "role" : "read",
    "db" : "hr"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }

    2.2 查看数据库所有用户信息

    该指令返回所在数据库中的所有用户信息。

    2.2.1 语法

    db.getUsers( {
    showCredentials: <Boolean>,
    filter: <document>
    } )

    2.2.2 示例

    > use admin
    switched to db admin
    > db.getUsers()
    [
    {
    "_id" : "admin.root",
    "userId" : UUID("678bde68-119a-460b-8479-b6ef35c057f0"),
    "user" : "root",
    "db" : "admin",
    "roles" : [
    {
    "role" : "root",
    "db" : "admin"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }
    ]

    2.3 创建用户

    在该命令运行的数据库创建一个新用户,如果用户已存在,则出错。

    2.3.1 语法

    {
    user: "<name>",
    pwd: passwordPrompt(), // Or "<cleartext password>"
    customData: { <any information> },
    roles: [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
    ],
    authenticationRestrictions: [
    {
    clientSource: ["<IP>" | "<CIDR range>", ...]
    serverAddress: ["<IP>" | "<CIDR range>", ...]
    },
    ...
    ],
    mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
    passwordDigestor: "<server|client>"
    }

    2.3.2 示例

    > use scott
    switched to db scott
    > db.createUser({user:"s1",pwd:"s1",roles:[{role:"readWrite",db:"scott"},{role:"read",db:"hr"}]})
    Successfully added user: {
    "user" : "s1",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "scott"
    },
    {
    "role" : "read",
    "db" : "hr"
    }
    ]
    }

    2.4 修改密码

    修改用户密码,执行该命令须切换到用户所在的数据库。

    2.4.1 语法

    db.changeUserPassword(username, password)

    2.4.2 示例

    > use scott
    switched to db scott
    > db.changeUserPassword("s1","scott")
    
    

    2.5 修改用户

    修改用户信息,执行该命令须在用户所在的数据库。

    2.5.1 语法

    db.updateUser(
    "<username>",
    {
    customData : { <any information> },
    roles : [
    { role: "<role>", db: "<database>" } | "<role>",
    ...
    ],
    pwd: passwordPrompt(), // Or "<cleartext password>"
    authenticationRestrictions: [
    {
    clientSource: ["<IP>" | "<CIDR range>", ...],
    serverAddress: ["<IP>", | "<CIDR range>", ...]
    },
    ...
    ],
    mechanisms: [ "<SCRAM-SHA-1|SCRAM-SHA-256>", ... ],
    passwordDigestor: "<server|client>"
    },
    writeConcern: { <write concern> }
    )

    2.5.2 示例

    > use scott
    switched to db scott
    > db.updateUser("scott",{pwd:"s1",customData:{dept:"IT",tel:"150XXXXX"}})

    2.6 删除用户

    删除当前数据库的用户信息。

    2.6.1 语法

    db.dropUser(username, writeConcern)

    2.6.2 示例

    > use scott
    switched to db scott
    > db.dropUser("scott")
    true

    2.7 删除所有用户

    删除所在数据库的所有用户信息。

    2.7.1 语法

    db.dropAllUsers(writeConcern)

    2.7.2 示例

    > use scott
    switched to db scott
    > db.dropAllUsers()
    NumberLong(1)

    2.8 给用户授权角色

    将角色授权给用户。

    2.8.1 语法

    db.grantRolesToUser( "<username>", [ <roles> ], { <writeConcern> } )

    2.8.2 示例

    > use scott
    
    switched to db scott
    
    > db.createUser({user:"s1",pwd:"s1",roles:[]})
    Successfully added user: { "user" : "s1", "roles" : [ ] }
    > db.grantRolesToUser("s1",["readWrite",{role:"read",db:"hr"}])
    > db.getUser("s1")
    {
    "_id" : "scott.s1",
    "userId" : UUID("ec26515f-2c71-4718-880b-27f5d51c7eae"),
    "user" : "s1",
    "db" : "scott",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "scott"
    },
    {
    "role" : "read",
    "db" : "hr"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }

    2.9 从用户收回角色

    从用户所在的数据库收回一个或多个角色。

    2.9.1 语法

    db.revokeRolesFromUser( "<username>", [ <roles> ], { <writeConcern> } )

    2.9.2 示例

    > use scott
    switched to db scott
    > db.revokeRolesFromUser("s1",[{role:"read",db:"hr"}])
    > db.getUser("s1")
    {
    "_id" : "scott.s1",
    "userId" : UUID("ec26515f-2c71-4718-880b-27f5d51c7eae"),
    "user" : "s1",
    "db" : "scott",
    "roles" : [
    {
    "role" : "readWrite",
    "db" : "scott"
    }
    ],
    "mechanisms" : [
    "SCRAM-SHA-1",
    "SCRAM-SHA-256"
    ]
    }

    2.10 用户认证

    该指令允许用户在shell中对数据库进行认证。

    2.10.1 语法

    方法1:

    db.auth( <username>, passwordPrompt() )
    // Or
    db.auth( <username>, <password> )

    方法2:

    db.auth( {
    user: <username>,
    pwd: passwordPrompt(), // Or "<cleartext password>"
    mechanism: <authentication mechanism>,
    digestPassword: <boolean>
    } )

    2.10.2 示例

    示例1:

    [mongod@strong ~]$ mongo 192.168.56.102
    MongoDB shell version v4.2.0
    connecting to: mongodb://192.168.56.102:27017/test?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("0f30e70e-b04b-45ab-b44f-e2b31f93f01c") }
    MongoDB server version: 4.2.0
    > use scott
    switched to db scott
    > db.auth("s1",passwordPrompt())
    Enter password:
    1
    > show collections
    dept
    emp
    foo
    inventory
    students
    user

    示例2:

    [mongod@strong ~]$ mongo 192.168.56.102
    MongoDB shell version v4.2.0
    connecting to: mongodb://192.168.56.102:27017/test?compressors=disabled&gssapiServiceName=mongodb
    Implicit session: session { "id" : UUID("32ed91e3-54a4-41e9-997c-54d6bca24b63") }
    MongoDB server version: 4.2.0
    > use scott
    switched to db scott
    > db.auth("s1","s1")
    1
    > show collections
    dept
    emp
    foo
    inventory
    students
    user

    除了上面的方法外,还可以使用如下方式进行数据库的连接,即

    [mongod@strong ~]$ mongo 192.168.56.102 -us1 -p --authenticationDatabase scott

  • 相关阅读:
    模式使用详解 手拉手就是职责链吗?
    简单说两句味道
    胡说两句...
    补充说明: 表驱动, 链表与职责链
    C++/CLI和TMP: enum hack相當於static const int吗?
    WCF NetTcpBinding Transport安全模式(9) ClientCredentialType证书验证模式Custom验证模式
    WCF NetTcpBinding Transport安全模式(8) ClientCredentialType证书验证模式 PeerOrChainTrust验证模式
    WCF NetTcpBinding Transport安全模式(2) 默认安全配置
    WCF NetTcpBinding Transport安全模式(7) ClientCredentialType证书验证模式 ChainTrust验证模式
    WCF NetTcpBinding Transport安全模式(6) ClientCredentialType证书验证模式 PeerTrust验证模式
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975597.html
Copyright © 2020-2023  润新知