MongoDB 存取權限控制

來源:互聯網
上載者:User

標籤:dbn   let   範圍   監控工具   term   ica   oca   remove   inf   

MongoDB的存取控制能夠有效保證資料庫的安全,存取控制是指綁定Application監聽的IP地址,設定監聽連接埠,使用賬戶和密碼登入

一,存取控制的參數

1,綁定IP地址

mongod 參數:--bind_ip <ip address>

預設值是所有的IP地址都能訪問,該參數指定MongoDB對外提供服務的綁定IP地址,用於監聽用戶端 Application的串連,用戶端只能使用綁定的IP地址才能訪問mongod,其他IP地址是無法訪問的。

2,設定監聽連接埠

mongod 參數:--port <port>

MongoDB 預設監聽的連接埠是27017,該參數顯式指定MongoDB執行個體監聽的TCP 通訊埠,只有當用戶端Application串連的連接埠和MongoDB執行個體監聽的連接埠一致時,才能串連到MongoDB執行個體。

3,啟用使用者驗證

mongod 參數:--auth 

預設值是不需要驗證,即 --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):

  • read:授予User唯讀資料的許可權
  • readWrite:授予User讀寫資料的許可權

資料庫管理角色(Database Administration Roles):

  • dbAdmin:在當前dB中執行管理操作
  • dbOwner:在當前DB中執行任意操作
  • userAdmin:在當前DB中管理User

備份與還原角色(Backup and Restoration Roles):

  • backup
  • restore

跨庫角色(All-Database Roles):

  • readAnyDatabase:授予在所有資料庫上讀取資料的許可權
  • readWriteAnyDatabase:授予在所有資料庫上讀寫資料的許可權
  • userAdminAnyDatabase:授予在所有資料庫上管理User的許可權
  • dbAdminAnyDatabase:授予管理所有資料庫的許可權

叢集管理角色(Cluster Administration Roles):

  • clusterAdmin:授予管理叢集的最高許可權
  • clusterManager:授予管理和監控叢集的許可權,A user with this role can access the config and local databases, which are used in sharding and replication, respectively.
  • clusterMonitor:授予監控叢集的許可權,對監控工具具有readonly的許可權
  • hostManager:管理Server

2,使用者自訂的角色(User-Defined Roles)

內建角色只能控制User在DB層級上執行的操作,管理員可以建立自訂角色,控制使用者在集合層級(Collection-Level)上執行的操作,即,控制User在當前DB的特定集合上執行特定的操作。

在建立角色時,必須明確Role的四個特性:

  • Scope:角色作用的範圍,建立在Admin中的角色,能夠在其他DB中使用;在其他DB中建立的角色,只能在當前DB中使用;
  • Resource:角色控制的資源,表示授予在該資源上執行特定操作的許可權;
  • Privilege Actions:定義了User能夠在資源上執行的操作,系統定義Action是:Privilege Actions;
  • Inherit:角色能夠繼承其他角色許可權

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)列表是

  • find
  • insert
  • remove
  • update

3,建立角色

使用db.CreateRole()在當前DB中建立角色,建立的文法樣本如下:

use admindb.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數組中繼承許可權:

  • 如果被繼承的role在當前DB中,定義的格式是:roles:["role"];
  • 如果被繼承的role不在當前DB中,需要使用doc,指定該role所在的DB,定義的格式是:roles:[{role:"role_name", db:"db_name"}];

4,自訂角色管理函數

  • db.createRole() :Creates a role and specifies its privileges.
  • db.updateRole() :Updates a user-defined role.
  • db.dropRole() :Deletes a user-defined role.
  • db.dropAllRoles() :Deletes all user-defined roles associated with a database.
  • db.grantPrivilegesToRole() :Assigns privileges to a user-defined role.
  • db.revokePrivilegesFromRole() :Removes the specified privileges from a user-defined role.
  • db.grantRolesToRole() :Specifies roles from which a user-defined role inherits privileges.
  • db.revokeRolesFromRole() :Removes inherited roles from a role.
  • db.getRole() :Returns information for the specified role.
  • db.getRoles() :Returns information for all the user-defined roles in a database.

三,系統管理使用者和許可權

1,建立使用者

use db_name
db.createUser( { user: "user_name", pwd: "user_pwd", roles: [ { role: "clusterAdmin", db: "admin" }, { role: "readAnyDatabase", db: "admin" }, "readWrite"
] })

為建立的User,授予一個或多個角色,通過roles數組來實現:

  • 如果role存在於當前DB中,roles的格式:roles:["role"];
  • 如果role不存在於當前DB中,roles的格式:roles:[Role:"role_name", db:"db_name"];

2,許可權認證(Authenticate)

mongo串連到mongod,有兩種許可權認證的方式:

  • 在串連時認證使用者訪問的許可權,mongo 使用參數 --authenticationDatabase <dbname> 指定認證資料庫;
  • 在串連後,認證使用者訪問的許可權,mongo 沒有使用參數 --authenticationDatabase <dbname>,在串連到mongod之後,切換到驗證資料庫(authentication database)中,使用db.auth() 驗證User是否有許可權訪問當前資料庫;
use db_namedb.auth("user_name", "user_pwd" )

3,使用者管理函數

  • db.auth() :Authenticates a user to a database.
  • db.createUser() :Creates a new user.
  • db.updateUser() :Updates user data.
  • db.changeUserPassword() :Changes an existing user’s password.
  • db.dropAllUsers() :Deletes all users associated with a database.
  • db.dropUser() :Removes a single user.
  • db.grantRolesToUser() :Grants a role and its privileges to a user.
  • db.revokeRolesFromUser() :Removes a role from a user.
  • db.getUser() :Returns information about the specified user.
  • db.getUsers() :Returns information about all users associated with a database.

 

參考文檔:

Role-Based Access Control

Built-In Roles

Collection-Level Access Control

db.createRole()

db.createUser()

Enable Auth

Manage Users and Roles

mongod

MongoDB 存取權限控制

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.