MongoDB的訪問控制可以有效保證數據庫的安全,訪問控制是指綁定Application監聽的IP地址,設置監聽端口,使用帳戶和密碼登陸mongodb
一,訪問控制的參數數據庫
1,綁定IP地址數組
mongod 參數:--bind_ip <ip address>安全
默認值是全部的IP地址都能訪問,該參數指定MongoDB對外提供服務的綁定IP地址,用於監聽客戶端 Application的鏈接,客戶端只能使用綁定的IP地址才能訪問mongod,其餘IP地址是沒法訪問的。app
2,設置監聽端口ide
mongod 參數:--port <port>函數
MongoDB 默認監聽的端口是27017,該參數顯式指定MongoDB實例監聽的TCP 端口,只有當客戶端Application鏈接的端口和MongoDB實例監聽的端口一致時,才能鏈接到MongoDB實例。工具
3,啓用用戶驗證ui
mongod 參數:--auth this
默認值是不須要驗證,即 --noauth,該參數啓用用戶訪問權限控制;當mongod 使用該參數啓動時,MongoDB會驗證客戶端鏈接的帳戶和密碼,以肯定其是否有訪問的權限。若是認證不經過,那麼客戶端不能訪問MongoDB的數據庫。
Enables authorization to control user’s access to database resources and operations. When authorization is enabled, MongoDB requires all clients to authenticate themselves first in order to determine the access for the client.
4,權限認證
mongo 參數:--username <username>, -u <username>
mongo 參數:--password <password>, -p <password>
mongo 參數:--authenticationDatabase <dbname> 指定建立User的數據庫;在特定的數據庫中建立User,該DB就是User的authentication database。
在鏈接mongo時,使用參數 --authenticationDatabase,會認證 -u 和 -p 參數指定的帳戶和密碼。若是沒有指定驗證數據庫,mongo使用鏈接字符串中指定的DB做爲驗證數據塊。
二,基於角色的訪問控制(Role-Based Access Control)
角色是授予User在指定資源上執行指定操做的權限,MongoDB官方手冊對角色的定義是:
A role grants privileges to perform the specified actions on resource.
MongoDB爲了方便管理員管理權限,在DB級別上預先定義了內置角色;若是用戶須要對權限進行更爲細緻的管理,MongoDB容許用戶建立自定義的角色,可以在集合級別上控制User可以執行的操做。
MongoDB使用角色(Role)授予User訪問資源的權限,Role決定User可以訪問的數據庫資源和執行的操做。一個User可以被授予一個或多個Role,若是User沒有被授予Role,那麼就沒有訪問MongoDB系統的權限。
A user is granted one or more roles that determine the user’s access to database resources and operations. Outside of role assignments, the user has no access to the system.
1,內置角色(Built-In Roles)
內置角色是MongoDB預約義的角色,操做的資源是在DB級別上。MongoDB擁有一個SuperUser的角色:root,擁有最大權限,可以在系統的全部資源上執行任意操做。
數據庫用戶角色(Database User Roles):
數據庫管理角色(Database Administration Roles):
備份和還原角色(Backup and Restoration Roles):
跨庫角色(All-Database Roles):
集羣管理角色(Cluster Administration Roles):
2,用戶自定義的角色(User-Defined Roles)
內置角色只能控制User在DB級別上執行的操做,管理員能夠建立自定義角色,控制用戶在集合級別(Collection-Level)上執行的操做,即,控制User在當前DB的特定集合上執行特定的操做。
在建立角色時,必須明確Role的四個特性:
2.1 角色做用的範圍(Scope)
在admin 數據庫中建立的角色,Scope是全局的,可以在admin,其餘DB和集羣中使用,而且可以繼承其餘DB的Role;而在非admin中建立的角色,Scope是當前數據庫,只能在當前DB中使用,只能繼承當前數據庫的角色。
A role created in the admin database can include privileges that apply to the admin database, other databases or to the cluster resource, and can inherit from roles in other databases as well as the admin database. Except for roles created in the admin database, a role can only include privileges that apply to its database and can only inherit from other roles in its database.
2.2 權限的操做(Privilege actions)
MongoDB的權限包由:資源(Resource)和操做(Action)兩部分組成,Privilege Actions 定義User可以在資源上執行的操做,例如:MongoDB在文檔級別(Document-Level)上執行的讀寫操做(Query and Write Actions)列表是:
3,建立角色
使用db.CreateRole()在當前DB中建立角色,建立的語法示例以下:
use admin db.createRole( { role: "new_role", privileges: [ { resource: { cluster: true }, actions: [ "addShard" ] }, { resource: { db: "config", collection: "" }, actions: [ "find", "update", "insert", "remove" ] }, { resource: { db: "users", collection: "usersCollection" }, actions: [ "update", "insert", "remove" ] }, { resource: { db: "", collection: "" }, actions: [ "find" ] } ], roles: [ { role: "read", db: "admin" } ] }, { w: "majority" , wtimeout: 5000 } )
在roles數組中,指定被繼承的role,即,新建的new_role從roles數組中繼承權限:
4,自定義角色管理函數
三,管理用戶和權限
1,建立用戶
use db_name
db.createUser( { user: "user_name", pwd: "user_pwd", roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"
] } )
爲新建的User,授予一個或多個角色,經過roles數組來實現:
2,權限認證(Authenticate)
mongo鏈接到mongod,有兩種權限認證的方式:
use db_name db.auth("user_name", "user_pwd" )
3,用戶管理函數
參考文檔: