mongo安全性及用戶管理
MongoDB安全性設置
安全設置建議
1) 啟用訪問控制和強制驗證。要求所有客戶端和服務器連接前提供有效的憑據
2) 配置基于角色的訪問控制。
3) 加密通信。配置MongoDB為所有傳入和傳出連接使用SSL/TLS加密
4) 限制網絡曝光。確保mongoDB在安全的網絡環境運行,并限制連接MongoDB的連接接口
5) 使用專用的用戶運行MongoDB
MongoDB認證
認證是驗證客戶端身份的過程。當啟用訪問控制時,MongoDB要求所有客戶端進行身份認證,以確定其訪問
MongoDB認證機制:
1) SCRAM-SHA-1
2) MongoDB質詢和響應(MongoDB-CR)
3) x.509證書
另外,MongoDB企業版還支持使用LDAP及Kerberos認證
MongoDB用戶
要在MongoDB中驗證客戶端,必須先在MongoDB中添加用戶
要添加用戶,可以使用db.createUser()方法,添加用戶時可以為用戶分配角色以確定用戶權限
注意:在數據庫中創建的第一個用戶應該是具有管理其他用戶權限的管理員
添加用戶時,可以在指定的數據庫中創建用戶。該數據庫稱為用戶的認證的數據庫。針對同一個用戶可以為不同的數據庫設置不同的操作權限
認證用戶
1) 在連接mongod服務時,可以使用選項-u, -p, --authenticationDatabase指定用戶信息
2) 先連接到mongod服務,然后針對身份驗證數據庫使用db.auth()方法
MongoDB創建用戶
MongoDB采用基于角色的訪問控制來確定用戶的訪問權限。授予用戶一個或者多個角色,來確定用戶對資源的訪問
示例:創建用戶
1) 創建管理員用戶
> use admin > db.createUser( ... { ... user: "admin", ... pwd: "redhat", ... roles: [{role:"root",db:"admin"}] ... } ... ) >
測試使用該用戶連接mongod
[root@node1 ~]# mongo --host 192.168.0.105 -u admin -p --authenticationDatabase admin 或者 [root@node1 ~]# mongoconn > use admin switched to db admin > db.auth("admin","redhat") 1
2) 添加指定用戶,針對game數據庫創建具有讀寫權限
> use game > db.createUser( ... { ... user: "user01", ... pwd: "redhat", ... roles: ["readWrite"] ... } ... )
3) 查看所有用戶
> db.getUsers() [ ] > > use admin switched to db admin > db.getUsers()
4) 刪除用戶
> use game > db.dropUser("user01") true
5) 在game數據庫中創建用戶user02, 并向用戶提供readWrite和dbAdmin角色
> use game > db.createUser( ... { ... user: "user02", ... pwd: "redhat", ... roles: ["readWrite", "dbAdmin"] ... } ... )
6) 在game庫創建沒有角色的用戶user03
> use game switched to db game > > db.createUser( ... { ... user: "user03", ... pwd: "redhat", ... roles: [] ... } ... ) Successfully added user: { "user" : "user03", "roles" : [ ] } >
7) 在admin數據庫中創建針對game數據庫的用戶
> use admin > db.createUser( ... { ... user: "admin01", ... pwd: "redhat", ... roles: ... [ ... { role: "readWrite", db: "game" } ... ] ... } ... )
MongoDB內置角色參考如下:
1、數據庫用戶角色(Database User Roles)
read
readWrite
2、數據庫管理角色(Database Administrator Roles)
dbAdmin:提供索引、信息統計等管理權限。此角色不提供用戶管理、角色管理的權限
userAdmin:提供在當前數據庫上創建和修改角色和用戶的權限
dbOwner:提供readWrite, dbAdmin, userAdmin角色的權限
3、集群管理角色(Cluster Administrator Roles)
clusterAdmin:提供集群管理訪問權限
clusterManage:提供集群管理和監控權限
clusterMonitor:為MongoDB Cloud Manager和OPS Manager監控代理工具提供只讀訪問權限
hostManager:提供監控和管理服務器的能力
4、備份與恢復角色(Backup and Restore Roels)
backup
restore
5、All-Database Roles(All-Database Roles)
readAnyDatabase: 擁有除了 local 和 config 以外的所有數據的 read 角色權限,此外還提供 listDatabases 操作權限
readWriteAnyDatabase: 擁有除了 local 和 config 以外的所有數據的 read, readWriteAnyDatabase 角色權限,此外還提供 listDatabases 操作權限
userAdminAnyDatabase: 擁有除了 local 和 config 以外的所有數據的 userAdmin 角色權限
dbAdminAnyDatabase: 擁有除了 local 和 config 以外的所有數據的 dbAdmin角色權限, 此外還提供 listDatabases 操作權限
6、超級角色
root
MongoDB用戶管理
1、查看用戶角色
> db.getUser("testuser")
2、查看角色權限
> use admin switched to db admin > db.getRole( "read", {showPrivileges: true}) { "role" : "read", "db" : "admin", "isBuiltin" : true, "roles" : [ ], "inheritedRoles" : [ ], "privileges" : [ { "resource" : { "db" : "admin", "collection" : "" ........
3、撤銷用戶在game數據庫上的readWrite權限
> db.revokeRolesFromUser( ... "testuser", ... [ { role: "readWrite", db: "game"} ] ... )
4、賦予用戶權限
> db.grantRolesToUser( ... "testuser", ... [ { role: "read", db: "game"} ] ... )
5、修改用戶密碼
> db.changeUserPassword("testuser", "123")
浙公網安備 33010602011771號