全部產品
Search
文件中心

ApsaraDB RDS:限制帳號只能訪問指定表、視圖、欄位

更新時間:Feb 28, 2024

控制台建立的帳號授權後預設是可以管理整個資料庫,如果只想要帳號管理資料庫中的某個表、視圖、欄位,可以通過SQL命令進行授權。

前提條件

建立高許可權帳號

操作步驟

  1. 通過命令列、用戶端串連RDS MySQL執行個體
  2. 通過以下命令建立新使用者並授權管理資料庫下的表、視圖、欄位:
    說明 此帳號在控制台上無法查看到所屬資料庫。
    • 建立新使用者並授權管理資料庫中的表
      CREATE USER `<使用者名稱>`@`%`IDENTIFIED BY '<密碼>';
      GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO '<使用者名稱>'@'%';
      GRANT ALL PRIVILEGES ON `<資料庫名>`.`<表名>`  TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`help_topic` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`func` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`time_zone` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`slow_log` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`time_zone_transition` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`proc` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`help_category` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`help_relation` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`help_keyword` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`general_log` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`time_zone_leap_second` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`time_zone_transition_type` TO '<使用者名稱>'@'%';
      GRANT SELECT ON `mysql`.`time_zone_name` TO '<使用者名稱>'@'%';

      樣本

      建立新使用者test01並授權管理資料庫rds001中的表test100。

      CREATE USER `test01`@`%`IDENTIFIED BY 'passwd';
      GRANT PROCESS, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'test01'@'%';
      GRANT ALL PRIVILEGES ON `rds001`.`test100`  TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`help_topic` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`func` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`time_zone` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`slow_log` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`time_zone_transition` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`proc` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`help_category` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`help_relation` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`help_keyword` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`general_log` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`time_zone_leap_second` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`time_zone_transition_type` TO 'test01'@'%';
      GRANT SELECT ON `mysql`.`time_zone_name` TO 'test01'@'%';
      說明 如果將命令第三行的test100更改為*,就和通過控制台建立的帳號一樣了,也可以在控制台看見此帳號的所屬資料庫
    • 授權查詢資料庫中的視圖
      grant select on <資料庫名>.<視圖名> to <使用者名稱>;

      樣本

      授權使用者test01查詢資料庫rds001的視圖view_test1。

      grant select on rds001.view_test1 to test01;
    • 授權更新或查詢表中的欄位
      grant update (<欄位名>) on table <表名> to <使用者名稱>;     -----授權更新表中欄位
      grant select (<欄位名>) on table <表名> to <使用者名稱>;     -----授權查詢表中欄位

      樣本

      授權使用者test01更新表testtable的欄位testid。

      grant update (testid) on table testtable to test01;
    除了通過SQL命令,也可以在DMS上進行修改。詳情請參見MySQL資料庫帳號許可權管理