View a markdown version of this page

使用 SCRAM-SHA-256 進行身分驗證 - Amazon DocumentDB

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

使用 SCRAM-SHA-256 進行身分驗證

Amazon DocumentDB (與 MongoDB 相容) 支援密碼型身分驗證的 Salted Challenge Response Authentication Mechanism (SCRAM)。透過 SCRAM,伺服器會驗證用戶端是否知道使用者的密碼,而不會將密碼傳輸至伺服器。Amazon DocumentDB 支援兩種 SCRAM 機制: SCRAM-SHA-1SCRAM-SHA-256SCRAM-SHA-256使用更強大的 SHA-256 雜湊函數,並使用 FIPS 模式。

當您建立或更新使用者時,您可以將一個或兩個 SCRAM 機制指派給使用者。使用 建立的使用者會SCRAM-SHA-1繼續運作,而不會進行任何變更。SCRAM-SHA-256 身分驗證適用於 Amazon DocumentDB 執行個體型叢集次要版本 5.0.1+ 和 8.0.1+。

SCRAM 和 IAM 身分驗證是互斥的

使用者可以擁有 SCRAM 機制或MONGODB-AWS機制,但不能同時擁有兩者。如需 IAM 身分驗證,請參閱 使用 IAM 身分進行身分驗證

使用 SCRAM 機制建立使用者

建立使用者時,您可以使用 mechanisms 欄位指定要啟用的 SCRAM 機制。下列範例SCRAM-SHA-256僅建立SCRAM-SHA-1具有 和兩種機制的使用者:

db.runCommand({ createUser: 'sha1user', pwd: passwordPrompt(), roles: ['readWrite'], mechanisms: ['SCRAM-SHA-1'] }); db.runCommand({ createUser: 'sha256user', pwd: passwordPrompt(), roles: ['readWrite'], mechanisms: ['SCRAM-SHA-256'] }); db.runCommand({ createUser: 'bothuser', pwd: passwordPrompt(), roles: ['readWrite'], mechanisms: ['SCRAM-SHA-1','SCRAM-SHA-256'] });

預設機制

如果您未指定 mechanisms 欄位,Amazon DocumentDB 會SCRAM-SHA-256同時為使用者啟用 SCRAM-SHA-1和 。下列兩個命令相當:

db.runCommand({ createUser: 'user1', pwd: passwordPrompt(), roles: ['readWrite'] }); // is equivalent to: db.runCommand({ createUser: 'user1', pwd: passwordPrompt(), roles: ['readWrite'], mechanisms: ['SCRAM-SHA-1','SCRAM-SHA-256'] });

根據預設,啟用這兩個機制可維持與僅支援 之較舊 MongoDB 驅動程式的相容性SCRAM-SHA-1。較新的驅動程式和 FIPS 模式偏好 SCRAM-SHA-256。如果您不希望任何使用者使用 進行身分驗證SCRAM-SHA-1,請只在 SCRAM-SHA-256 mechanisms 欄位中為所有使用者指定 。

更新現有使用者

使用 建立的使用者會SCRAM-SHA-1繼續受到支援,不會有任何變更。若要將現有使用者從 切換SCRAM-SHA-1SCRAM-SHA-256,請使用新密碼和 SCRAM-SHA-256機制更新使用者:

db.runCommand({ updateUser: 'existing', pwd: passwordPrompt(), mechanisms: ['SCRAM-SHA-256'] });

使用 SCRAM-SHA-256 驗證

您的驅動程式會自動使用連線字串參數進行身分驗證,然後再在每個連線上傳送第一個命令。若要在連線 URI SCRAM-SHA-256中選取 ,請將 authMechanism 參數設定為 SCRAM-SHA-256

mongodb://username:password@hostname:port/authenticationDatabase?authMechanism=SCRAM-SHA-256

您也可以從 mongosh 傳送明確的身分驗證請求:

db.auth({user: 'sha256user', pwd: passwordPrompt(), mechanism: 'SCRAM-SHA-256'}) Enter password: 1

如果您未在連線選項中指定身分驗證機制,驅動程式會自動選取目標資料庫使用者支援的機制。