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: "<username>",
  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-mechanism>", ... ],
  digestPassword: <boolean>,
  writeConcern: { <write concern> }
}

例: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: "<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>"
}

 

例:

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)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發佈了15 篇原創文章 · 獲贊 6 · 訪問量 3578
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章