mongodb用户管理(4.2)

身份验证

身份验证是验证试图连接数据库的客户机的身份的过程。MongoDB提供各种方法来验证客户机的身份。基于挑战的默认策略包括:

  • SCRAM-SHA-1: 该身份验证机制使用简单的基于文本的用户名和密码,通过传输层安全(transport layer security, TLS)保护的通道传输。
  • MongoDB-CR:与SCRAM一样,MongoDB-CR根据身份验证数据库验证用户名和密码。MongoDB-CR已从3.0版本中删除,现在只有较老的迭代使用它。
  • 这两种方法都发送加密的密码,并且为每个新会话生成不同的散列,因此没有人能够嗅出它们。MongoDB也可以使用外部认证协议:
  • LDAP:轻量级目录访问协议允许用户使用集中的密码登录。LDAP旨在帮助任何人定位和访问他们在公共或私有网络中需要的信息。
  • Kerberos:这是一个用于服务器-客户机交互的密钥身份验证协议。使用Kerberos,用户只能使用访问票据登录一次。

显示数据库下用户信息

show users

字段解析:

  • user:用户名
  • db:对应数据库
  • roles:角色与对应数据库信息
  • mechanisms:验证策略

删除用户

db.dropUser('gao')

修改用户密码

db.changeUserPassword(“要修改密码的用户名”,”新密码”)

修改权限

updateUser官方语法

{
  updateUser: "",
  pwd: passwordPrompt(),      // Or  ""
  customData: {  },
  roles: [
    { role: "", db: "" } | "",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["" | "", ...],
       serverAddress: ["", | "", ...]
     },
     ...
  ],
  mechanisms: [ "", ... ],
  digestPassword: ,
  writeConcern: {  }
}

例:db.updateUser("usertest",{roles:[ {role:"read",db:"testDB"} ]})

注:updateuser它是完全替换之前的值,如果要新增或添加roles而不是代替它

则使用方法: db.grantRolesToUser() 和 db.revokeRolesFromUser()

例:

db.grantRolesToUser("usertest", [{role:"readWrite", db:"testDB"},{role:"read", db:"testDB"}])   # 修改权限

db.revokeRolesFromUser("usertest",[{role:"read", db:"testDB"}])   # 删除权限:

删除用户

db.dropUser('usertest')

创建新用户

官方语法:

{
  user: "",
  pwd: passwordPrompt(),      // Or  ""
  customData: {  },
  roles: [
    { role: "", db: "" } | "",
    ...
  ],
  authenticationRestrictions: [
     {
       clientSource: ["" | "", ...],
       serverAddress: ["" | "", ...]
     },
     ...
  ],
  mechanisms: [ "", ... ],
  passwordDigestor: ""
}

 

例:

db.createUser(
    { 
        user: "dba",
        pwd: "dba",
        roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]
    }
)

db.createUser(
   {
     user: "maindataip",
     pwd: "maindata",
     roles: [ {role: 'readWrite', db: 'maindata'} ],
     authenticationRestrictions: [ {
        clientSource: ["10.xx.x.xxx", "10.xx.x.xxx","10.xx.x.xxx","xxx.x.x.1" ],
        serverAddress: ["xx.xx.x.xxx"]
     } ]
   }
)

解析

  • user:用户名
  • pwd:密码
  • role:角色
  • db:数据库
  • roles:是一个列表,可以有多个值
  • clientSource:客户端白名单列表(服务端只对列表中的ip地址开发)
  • serverAddress:服务端白名单列表(用户只能访问列表中的ip)
  • mechanisms:选择认证机制
  • passwordDigestor:不太清楚,应该是选择服务器或者客户端来验证密码(此处不确定)

注:mongodb内置角色

  Built-In Roles(内置角色):
    1. 数据库用户角色:read、readWrite;
    2. 数据库管理角色:dbAdmin、dbOwner、userAdmin;
    3. 集群管理角色:clusterAdmin、clusterManager、clusterMonitor、hostManager;
    4. 备份恢复角色:backup、restore;
    5. 所有数据库角色:readAnyDatabase、readWriteAnyDatabase、userAdminAnyDatabase、dbAdminAnyDatabase
    6. 超级用户角色:root  
    // 这里还有几个角色间接或直接提供了系统超级用户的访问(dbOwner 、userAdmin、userAdminAnyDatabase)
    7. 内部角色:__system
数据库用户角色
    read:允许用户读取指定的数据库
    readWrite:允许用户读写指定数据库
数据库管理角色
    dbAdmin:允许用户在指定数据库执行管理函数,创建索引,删除索引,查看统计.
    userAdmin:允许用户向system.users集合写入,可以在指定数据库创建删除管理账号
    dbOwner:指定数据库最大的权限,是readWrite+dbAdmin+userAdmin的和。
群集管理角色(只在admin数据库可用)
    clusterAdmin:用户所有分片和复制集相关函数的管理权限
    clusterManager:管理和监控群集。
    clusterMonitor:只能访问监控工具。
    hostManager:监视和管理。
备份和还原角色
    backup
    restore
所有角色(只在admin数据库可用)
    readAnyDatabase:赋予用户所有数据库的读权限
    readWriteAnyDatabase:赋予用户所有数据库的读写权限
    userAdminAnyDatabase:赋予所有数据库的useradmin权限
    dbAdminAnyDatabase:赋予所有数据库的dbadmin权限。
超级角色(只在admin可用)
    root:超级账号,超级权限

 

---------------------------------------------------以下无正文-----------------------------------------------------

mongodb用户设计:

admin:创建一个root权限,一个userAdminAnyDatabase权限

自定义数据库:一个dbOwner,根据需求建想要权限用户

需求:如增加一个数据库,在不添加用户的前提下能够管理新增库

解决方法:登录拥有userAdminAnyDatabase权限用户,到拥有该用户的库下给原有用户授权

例:db.grantRolesToUser("原有用户名",[{role:"readWrite",db:"新数据库"},{role:"角色“,db:"新数据库"}])

注:授权后,该用户并不属于新增数据库用户,只是拥有该新增库的管理权。

(给原有用户添加权限也可使用grantRolesToUser)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的:(数据库,mongodb,运维,mongodb)