管理使用者、角色和權限
MySQL 5.7 使用角色系統來管理資料庫許可權。 從使用者介面及 MySQL Shell 建立使用者。 從使用者介面建立的使用者與 admin
具有幾乎相同的專用權,但無法建立其他使用者。 因為管理者同時具有 CREATE USER
及 GRANT
選項,所以它可以建立使用者,並將其擁有的所有專用權 (包括建立新使用者的專用權) 提供給他們。
mysql> SELECT DISTINCT GRANTEE FROM information_schema.user_privileges;
+-----------------------------+
| GRANTEE |
+-----------------------------+
| 'ibm'@'localhost' |
| 'mysql.session'@'localhost' |
| 'mysql.sys'@'localhost' |
| 'ibm-backup'@'localhost' |
| 'admin'@'%' |
| 'ibm-replication'@'%' |
| 'ibm-monitor'@'%' |
+-----------------------------+
+-----------------+
| user |
+-----------------+
| admin |
| ibm-monitor |
| ibm-replication |
| ibm |
| ibm-backup |
| mysql.session |
| mysql.sys |
+-----------------+
下列使用者由 IBM Cloud 維護,不應該由您變更或刪除:
| ibm-monitor |
| ibm-replication |
| ibm |
| ibm-backup |
當您在 IBM Cloud中佈建新部署時,會自動為您提供 admin
使用者,以存取及管理 MySQL。
使用 Cloud Databases CLI 外掛程式 或 Cloud Databases API,在_服務憑證的_使用者介面中新增使用者。
使用者管理指令
基於安全理由,我們建議您不要在 mysql.user
表格上執行 DML (資料操作語言) 查詢。 若要防止變更 mysql.user
表格,您應該使用 DML 查詢來管理使用者。
使用 CREATE USER
、ALTER USER
、RENAME USER
及 DROP USER
等指令來管理使用者。
執行下列指令,可以擷取使用者清單及其主機資訊,但不含鑑別資訊及密碼雜湊:
mysql> SELECT DISTINCT GRANTEE FROM information_schema.user_privileges;
admin
使用者
當您在 IBM Cloud中佈建新部署時,系統會自動為您提供管理使用者,以存取及管理 MySQL。 設定管理者密碼 之後,請使用它來連接至您的部署。
當 admin
在資料庫中建立資源 (例如表格) 時,admin
會擁有該物件。 從使用者介面建立的使用者具有 *.*
的許可權,這表示任何新建立的使用者都可以自動查看任何資料庫。 使用 MySQL sh,或修改使用者介面建立的使用者的許可權來限制存取權。 若要限制許可權,請移除廣域專用權 (如果已啟用),並將專用權授與給定使用者預期具有存取權的資料庫或資料庫集。
請先設定管理者密碼,然後再使用它來連接。
在使用者介面中設定管理員密碼
從 IBM Cloud Dashboard 的資源清單中選擇您的實例,透過使用者介面設定管理員密碼。 然後,選取 設定。 接下來,選擇變更資料庫管理密碼。
在 CLI 中設定管理員密碼
從 IBM Cloud CLI Cloud Databases 外掛程式使用 cdb user-password
指令來設定管理密碼。
例如,若要設定名為 example-deployment
之部署的管理者密碼,請使用下列指令:
ibmcloud cdb user-password example-deployment admin <newpassword>
在 API 中設定管理員密碼
顯示在您服務「總覽」面板「部署詳細資料」部分的基礎端點提供了透過 API 存取此部署的基礎 URL。 搭配使用它與 設定指定使用者的密碼 端點,以設定管理者密碼。
curl -X PATCH `https://api.{region}.databases.cloud.ibm.com/v5/ibm/deployments/{id}/users/admin` \
-H `Authorization: Bearer <>` \
-H `Content-Type: application/json` \
-d `{"password":"newrootpasswordsupersecure21"}` \
其他 ibm
使用者
ibm
及 ibm-replication
帳戶是部署上唯一的超級使用者。 超級使用者帳戶無法供您使用。 這些使用者是內部管理帳戶,可管理抄寫、度量值及其他功能,以確保部署的穩定性。
使用 mysql
建立的使用者
您可以完全透過 IBM Cloud 略過建立使用者,並直接在 MySQL 中使用 mysql
建立使用者。 這可讓您使用 MySQL's 原生 角色和使用者管理。 在 mysql
中建立的使用者/角色必須手動設定其所有專用權,以及他們所建立物件的專用權。
直接在 MySQL 中建立的使用者不會出現在_服務憑證_中,但您可以選擇 新增這些 使用者。
請注意,即使這些使用者新增至 服務認證,也不會與 IAM 控制項整合。
使用者對表格的存取權
當您無法刪除 mysql database
時,使用者可以捨棄表格,包括包含內部使用者的 mysql.users
表格。 用戶端不應刪除任何屬於 mysql database
的表格,因為此動作可能導致中斷的構成,只能使用「復原點回復 (PITR)」來解決。
由於用戶端捨棄系統表格,IBM Cloud 不會對形成岔斷發出警示。
更多使用者和連線字串
Databases for MySQL 部署的存取權不限於管理使用者。 您可以使用_服務憑證_面板、IBM CLI 或透過 IBM Cloud Databases API 建立使用者。
部署上的所有使用者都可以使用連線字串,包括公用或專用端點的連線字串。
當您建立使用者時,它會獲指派特定的資料庫角色及專用權。 這些專用權包括登入、建立資料庫及建立其他使用者的能力。 如需詳細資訊,請參閱 管理使用者、角色和權限頁 面。
在服務憑證中建立使用者
- 導覽到您服務的服務儀表板。
- 按一下_服務憑證_,開啟_服務憑證_面板。
- 按一下新認證。
- 為您的新憑證選擇一個描述性的名稱。
- (選用) 指定新認證應該使用公用或專用端點。 在「新增內嵌設定參數」欄位中使用
{ "service-endpoints": "public" }
/{ "service-endpoints": "private" }
之一,即可使用指定的端點產生連線字串。 未強制使用端點。 它只會控制連線字串中的主機名稱。 依預設會產生公用端點。 - 按一下新增以提供新憑證。 MySQL 資料庫會自動產生使用者名稱和密碼,以及相關的資料庫使用者。
新憑證顯示在表格中,連線字串會以 JSON 格式出現在_檢視憑證_下方的按一下複製欄位中。
從命令列建立使用者
如果您透過 IBM Cloud CLI 及 雲端資料庫外掛程式 來管理服務,則可以使用 cdb user-create
來建立新的使用者。 例如,若要為 "example-deployment" 建立新的使用者,請使用下列指令。
ibmcloud cdb user-create example-deployment <newusername> <newpassword>
作業完成之後,您可以使用 ibmcloud cdb deployment-connections
指令來擷取新使用者的連線字串。
從 API 建立使用者
顯示在您服務的_概述_面板_部署詳細資訊_中的 Foundation 端點,提供透過 API 存取此部署的基本 URL。 若要建立和管理使用者,請使用 /users
端點的基本 URL。
curl -X POST 'https://api.{region}.databases.cloud.ibm.com/v4/ibm/deployments/{id}/users' \
-H "Authorization: Bearer $APIKEY" \
-H "Content-Type: application/json" \
-d '{"username":"jane_smith", "password":"newsupersecurepassword"}'
作業完成之後,您可以從 /users/{userid}/connections
端點擷取新使用者的連線字串。
新增使用者至_服務憑證_
從 CLI 建立新使用者不會自動將使用者的連線字串填入_服務憑證_。 如果您想要在那裡新增它們,則可以使用現有使用者資訊來建立新的認證。
在 JSON 欄位中輸入使用者名稱和密碼_新增內嵌組態參數_,或指定儲存 JSON 資訊的檔案。 例如,在欄位中填入 {"existing_credentials":{"username":"Robert","password":"supersecure"}}
會產生_服務憑證_,並將使用者名稱「Robert」和密碼「supersecure」填入連線字串中。
從現有使用者產生認證不會檢查或建立該使用者。