• 【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

  • 相关阅读:
    洛谷 P3353【在你窗外闪耀的星星】
    SpirngMVC源码分析
    处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(二)
    关于 DispatcherServlet.properties 文件
    处理器映射器(HandlerMapping)及处理器适配器(HandlerAdapter)详解(一)
    SpringMVC的入门程序
    Spring工作原理:初识SpringMVC
    Spring的事务管理
    Spring配置连接池和 Dao 层使用 jdbcTemplate
    Spring 的 jdbcTemplate 操作
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975597.html
Copyright © 2020-2023  润新知