mongodb使用者與角色使用

z597011036發表於2019-04-03

    此文件以mongodb 4.0版本進行對使用者許可權和角色講解,更詳細內容可參考mongodb官方文件.

官方文件:https://docs.mongodb.com/manual/core/security-users/


一.mongodb內部角色

1.資料庫使用者角色

read      --讀取資料庫對像的許可權

readWrite   --讀取和修改資料庫對像許可權

2.資料庫管理角色

dbAdmin   --執行管理任務角色

dbOwner   --資料庫所有者,可以對資料庫所有操作

userAdmin   --當前資料庫上建立,修改角色和使用者功能

3.叢集管理角色

clusterAdmin          --叢集管理員

clusterManager      --管理叢集和監控

clusterMonitor       --監控叢集和只讀訪問

hostManager         --監控和管理伺服器功能

4.備份恢復角色

backup    --備份資料最小許可權

restore    --恢復許可權

5.所有資料庫角色

readAnyDatabase   --只讀所有資料庫角色

readWriteAnyDatabase     --讀寫所有資料庫

userAdminAnyDatabase   --除local之外的所有資料庫相同的使用者管理操作訪問許可權

dbAdminAnyDatabase      --除local之外的所有資料庫相同的許可權

6.超級使用者角色

root         --提供所有資源readWriteAnyDatabase,dbAdminAnyDatabase,userAdminAnyDatabase,clusterAdmin,restore,backup

7.內部角色

__system       --提供對資料庫中的任何物件執行任何操作的許可權


二.自定義角色

1.自定義角色格式

{
  role: "<name>",
  privileges: [
     { resource: { <resource> }, actions: [ "<action>", ... ] },
     ...
  ],
  roles: [
     { role: "<role>", db: "<database>" } | "<role>",
      ...
  ],
  authenticationRestrictions: [
    {
      clientSource: ["<IP>" | "<CIDR range>", ...],
      serverAddress: ["<IP>" | "<CIDR range>", ...]
    },
    ...
  ]
}

2.自定義角色(對config庫所有表可以增刪改查,對users庫usersCollection表更新,插入,刪除,對所有資料庫有查詢許可權)

> use admin
switched to db admin
> db.createRole(
   {
     role: "wuhan123",       --角色名
     privileges: [
       { 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" }
     ]
   }
)
>

3.列出角色和刪除角色

> db.getRole("wuhan123")   --顯示單個角色資訊(wuhan123是角色名)
{
"role" : "wuhan123",
"db" : "admin",
"isBuiltin" : false,
"roles" : [
{
"role" : "read",
"db" : "admin"
}
],
"inheritedRoles" : [
{
"role" : "read",
"db" : "admin"
}
]
}
> db.getRoles()     --顯示當前庫所有角色
[
	{
		"role" : "wuhan123",
		"db" : "admin",
		"isBuiltin" : false,
		"roles" : [
			{
				"role" : "read",
				"db" : "admin"
			}
		],
		"inheritedRoles" : [
			{
				"role" : "read",
				"db" : "admin"
			}
		]
	}
]
> db.dropRole("wuhan123");     --刪除角色
true
> db.dropAllRoles();       --刪除所有角色
NumberLong(1)
>


三.建立使用者並使用角色

1.建立使用者格式

{
  user: "<name>",
  pwd: "<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>"
}

2.建立使用者使用角色

> use tong     --進入資料庫
switched to db tong  
> db.createUser(   
...    {
...      user: "u_tong",       --指定使用者名稱
...      pwd: "system123",     --指定密碼
...      roles: [ "readWrite", "dbAdmin" ]     --使用資料庫中的角色
...    }
... )
Successfully added user: { "user" : "u_tong", "roles" : [ "readWrite", "dbAdmin" ] }
>

2.建立使用者指定來源IP和目標IP

> use tong
switched to db tong
> db.createUser(
   {
     user: "u1_tong",    --使用者名稱
     pwd: "system123",   --密碼
     roles: [ { role: "readWrite", db: "tong" } ],   --角色
     authenticationRestrictions: [ {
        clientSource: ["192.168.1.10"],    --客戶端IP
        serverAddress: ["192.168.1.20"]    --服務端IP
     } ]
   }
)>

3.檢視使用者和刪除使用者

> db.getUsers();      --檢視當前資料庫所有使用者
[
{
"_id" : "tong.u1_tong",
"user" : "u1_tong",
"db" : "tong",
"roles" : [
{
"role" : "readWrite",
"db" : "tong"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
},
{
"_id" : "tong.u_tong",
"user" : "u_tong",
"db" : "tong",
"roles" : [
{
"role" : "readWrite",
"db" : "tong"
},
{
"role" : "dbAdmin",
"db" : "tong"
}
],
"mechanisms" : [
"SCRAM-SHA-1",
"SCRAM-SHA-256"
]
}
]
> db.getUser("u_tong");     --檢視指定使用者
{
	"_id" : "tong.u_tong",
	"user" : "u_tong",
	"db" : "tong",
	"roles" : [
		{
			"role" : "readWrite",
			"db" : "tong"
		},
		{
			"role" : "dbAdmin",
			"db" : "tong"
		}
	],
	"mechanisms" : [
		"SCRAM-SHA-1",
		"SCRAM-SHA-256"
	]
}
> db.dropUser("u_tong");    --刪除單個使用者
true
> db.dropAllUsers();        --刪除當前庫所有使用者
NumberLong(1)
>

4.將角色授權給使用者

> db.grantRolesToUser(
   "u_tong",[ "readWrite" , { role: "read", db: "tong" } ],
> )


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/25854343/viewspace-2640282/,如需轉載,請註明出處,否則將追究法律責任。

相關文章