ApsaraDB for SelectDB執行個體下可以包含多個計算叢集,類似分布式系統中的計算群組、計算隊列,可分別用於支援不同的工作負載(例如讀寫隔離、在離線隔離等),以滿足多業務間負責隔離的需求。本文介紹如何在ApsaraDB for SelectDB執行個體中進行叢集的訪問管理。
在生產環境中,避免在非必要情況下修改已確定的叢集名稱;因為叢集名稱在查詢過程中被使用,對其進行修改可能導致授權失效。
查看叢集列表
查看當前ApsaraDB for SelectDB執行個體擁有的所有計算叢集。
文法
SHOW CLUSTERS;
樣本
SHOW CLUSTERS;
返回結果如下:
+---------------+------------+-------------+
| cluster | is_current | users |
+---------------+------------+-------------+
| test_cluster | FALSE | admin, jack |
| test_cluster1 | FALSE | |
+---------------+------------+-------------+
切換叢集
指定使用資料庫和計算叢集。
文法
USE { [catalog_name.]database_name[@cluster_name] | @cluster_name }
參數說明
參數名稱 | 參數說明 |
catalog_name | catalog名稱。 |
database_name | 資料庫名稱。 |
cluster_name | 叢集名稱。 |
如果資料庫名稱或者叢集名稱是保留的關鍵字, 需要使用符號backtick``
。樣本如下:
USE @`interval`
樣本
樣本1:指定使用計算叢集
test_cluster
。USE @test_cluster;
樣本2:指定使用資料庫
test_database
和計算叢集test_cluster
。USE test_database@test_cluster;
樣本3:通過jdbc串連串指定使用資料庫
test_database
和計算叢集test_cluster
。jdbc:mysql://selectdb-cn-****:9030/test_database@test_cluster
授予叢集存取權限
授予使用者叢集訪問的許可權。
文法
GRANT USAGE_PRIV ON CLUSTER {cluster_name} TO {user}
參數說明
參數名稱 | 參數說明 |
cluster_name | 叢集名稱。 |
user | 使用者名稱稱。 |
樣本
樣本1:
授予使用者
jack
訪問test_cluster
叢集。GRANT USAGE_PRIV ON CLUSTER test_cluster TO jack;
查詢
jack
的叢集許可權。SHOW GRANTS FOR jack\G;
返回結果如下:
UserIdentity: 'jack'@'%' Password: Yes GlobalPrivs: Admin_priv (false) CatalogPrivs: NULL DatabasePrivs: internal.information_schema: Select_priv (false) TablePrivs: NULL ResourcePrivs: NULL CloudCluster: test_cluster: Usage_priv (false) CloudStage: NULL
樣本2:
為使用者
jack
授權一個不存在叢集not_exist_cluster
的存取權限。GRANT USAGE_PRIV ON CLUSTER not_exist_cluster TO jack;
查詢
jack
叢集許可權。SHOW GRANTS FOR jack\G;
返回結果如下:
UserIdentity: 'jack'@'%' Password: Yes GlobalPrivs: Admin_priv (false) CatalogPrivs: NULL DatabasePrivs: internal.information_schema: Select_priv (false) TablePrivs: NULL ResourcePrivs: NULL CloudCluster: not_exist_cluster: Usage_priv (false) CloudStage: NULL
使用不存在叢集
not_exist_cluster
。USE information_schema@not_exist_cluster;
返回結果如下:
No connection. Trying to reconnect... Connection id: 1 Current database: *** NONE *** ERROR 5091 (42000): Cluster not_exist_cluster not exist
撤銷叢集存取權限
撤銷使用者叢集存取權限
文法
REVOKE USAGE_PRIV ON CLUSTER {cluster_name} FROM {user}
參數說明
參數名稱 | 參數說明 |
cluster_name | 叢集名稱。 |
user | 使用者名稱稱。 |
樣本
撤銷jack
訪問叢集的許可權並進行查詢。
REVOKE USAGE_PRIV ON CLUSTER test_cluster FROM jack;
SHOW grants for jack\G
返回結果如下:
UserIdentity: 'jack'@'%'
Password: Yes
GlobalPrivs: Admin_priv (false)
CatalogPrivs: NULL
DatabasePrivs: internal.information_schema: Select_priv (false)
TablePrivs: NULL
ResourcePrivs: NULL
CloudCluster: NULL
CloudStage: NULL
設定預設叢集
在ApsaraDB for SelectDB中為使用者佈建預設叢集的作用主要是為了簡化使用者的訪問流程和提升操作便捷性。預設叢集允許使用者在執行查詢或其他動作時無需指定叢集,系統會自動選擇設定的預設叢集進行處理,這樣可以減少使用者每次操作時的配置步驟,提高工作效率。同時,這也有助於使用者更加專註於資料分析和處理任務本身,而不必過多關注叢集管理的細節。
如果使用者沒有指定預設叢集,系統將自動分配一個具有活躍後端且使用者有許可權使用的叢集。在同一會話期間,所選擇的叢集將保持不變。在不同會話中,由系統自動選定的叢集可能會因以下原因而改變:
使用者不再擁有之前被選擇叢集的使用許可權。
有新的叢集被添加或現有的叢集被移除。
上一次選擇的叢集沒有活躍的後端。
在上述三種情況中,第一種和第二種將必然導致選擇的叢集發生變更,而第三種情況則可能導致變更。基於此,我們建議定期檢查各自的叢集使用權限設定,確保對所需資源的訪問不受影響。
文法
-- 設定預設叢集
SET PROPERTY 'default_cloud_cluster' = '{clusterName}';
-- 為使用者佈建預設叢集
SET PROPERTY FOR {user} 'default_cloud_cluster' = '{clusterName}';
參數說明
參數名稱 | 參數說明 |
cluster_name | 叢集名稱。 |
user | 使用者名稱稱。 重要 指定使用者名稱稱的場合,需要擁有admin許可權。 |
樣本
樣本1:
為目前使用者設定預設叢集。
SET PROPERTY 'default_cloud_cluster' = 'test_cluster';
查詢目前使用者可訪問的預設叢集。
SHOW PROPERTY;
返回結果如下:
+------------------------+-------------------------------+ | Key | Value | +------------------------+-------------------------------+ | cpu_resource_limit | -1 | | default_cloud_cluster | test_cluster | | exec_mem_limit | -1 | | load_mem_limit | -1 | | max_query_instances | -1 | | max_user_connections | 100 | | quota.high | 800 | | quota.low | 100 | | quota.normal | 400 | | resource.cpu_share | 1000 | | resource.hdd_read_iops | 80 | | resource.hdd_read_mbps | 30 | | resource.io_share | 1000 | | resource.ssd_read_iops | 1000 | | resource.ssd_read_mbps | 30 | | resource_tags | | | sql_block_rules | | +------------------------+-------------------------------+
樣本2:
建立使用者
jack
,並設定角色為admin。CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
查詢
jack
可訪問的預設叢集。SHOW PROPERTY FOR jack;
返回結果如下:
+------------------------+-------------------------------+ | Key | Value | +------------------------+-------------------------------+ | cpu_resource_limit | -1 | | default_cloud_cluster | test_cluster1 | | exec_mem_limit | -1 | | load_mem_limit | -1 | | max_query_instances | -1 | | max_user_connections | 100 | | quota.high | 800 | | quota.low | 100 | | quota.normal | 400 | | resource.cpu_share | 1000 | | resource.hdd_read_iops | 80 | | resource.hdd_read_mbps | 30 | | resource.io_share | 1000 | | resource.ssd_read_iops | 1000 | | resource.ssd_read_mbps | 30 | | resource_tags | | | sql_block_rules | | +------------------------+-------------------------------+
樣本3:
若當前執行個體下不存在將要設定的預設叢集會報錯,提示使用
SHOW CLUSTERS;
展示當前執行個體下所有有效叢集。SET PROPERTY 'default_cloud_cluster' = 'not_exist_cluster';
返回結果如下:
ERROR 5091 (42000): errCode = 2, detailMessage = Cluster not_exist_cluster not exist, use SQL 'SHOW CLUSTERS' to get a valid cluster
展示當前執行個體下所有有效叢集。
SHOW CLUSTERS;
返回結果如下:
+---------------+------------+-------------+ | cluster | is_current | users | +---------------+------------+-------------+ | test_cluster | FALSE | admin, jack | | test_cluster1 | FALSE | | +---------------+------------+-------------+
其中
cluster
列表示叢集名稱,is_current
列表示目前使用者是否使用此叢集,users
列表示這些使用者可以設定預設叢集為當前行的叢集。