zoukankan      html  css  js  c++  java
  • 【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# 开发规范
    C# 调用webserver 出现:未能从程序集“jgd3jufm, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null”中加载类型
    C# 组装XML传给webserver+XML 返回获取多个xml,根据多个XML 返回dataset类型
    linux下搭建git服务器
    Linux整合Apache和SVN
    JAVA通过Gearman实现MySQL到Redis的数据同步(异步复制)
    比尔盖茨的十句忠告
    Spring核心接口之InitializingBean
    mongodb安装和配置
    redis主从配置
  • 原文地址:https://www.cnblogs.com/alen-liu-sz/p/12975597.html
Copyright © 2011-2022 走看看