集群訪問管理
云數(shù)據(jù)庫 SelectDB 版實例下可以包含多個計算集群,類似分布式系統(tǒng)中的計算組、計算隊列,可分別用于支持不同的工作負載(例如讀寫隔離、在離線隔離等),以滿足多業(yè)務(wù)間負責(zé)隔離的需求。本文介紹如何在云數(shù)據(jù)庫 SelectDB 版實例中進行集群的訪問管理。
在生產(chǎn)環(huán)境中,避免在非必要情況下修改已確定的集群名稱;因為集群名稱在查詢過程中被使用,對其進行修改可能導(dǎo)致授權(quán)失效。
查看集群列表
查看當前云數(shù)據(jù)庫 SelectDB 版實例擁有的所有計算集群。
語法
SHOW CLUSTERS;
示例
SHOW CLUSTERS;
返回結(jié)果如下:
+---------------+------------+-------------+
| cluster | is_current | users |
+---------------+------------+-------------+
| test_cluster | FALSE | admin, jack |
| test_cluster1 | FALSE | |
+---------------+------------+-------------+
切換集群
指定使用數(shù)據(jù)庫和計算集群。
語法
USE { [catalog_name.]database_name[@cluster_name] | @cluster_name }
參數(shù)說明
參數(shù)名稱 | 參數(shù)說明 |
catalog_name | catalog名稱。 |
database_name | 數(shù)據(jù)庫名稱。 |
cluster_name | 集群名稱。 |
如果數(shù)據(jù)庫名稱或者集群名稱是保留的關(guān)鍵字, 需要使用符號backtick``
。示例如下:
USE @`interval`
示例
示例1:指定使用計算集群
test_cluster
。USE @test_cluster;
示例2:指定使用數(shù)據(jù)庫
test_database
和計算集群test_cluster
。USE test_database@test_cluster;
示例3:通過jdbc連接串指定使用數(shù)據(jù)庫
test_database
和計算集群test_cluster
。jdbc:mysql://selectdb-cn-****:9030/test_database@test_cluster
授予集群訪問權(quán)限
授予用戶集群訪問的權(quán)限。
語法
GRANT USAGE_PRIV ON CLUSTER {cluster_name} TO {user}
參數(shù)說明
參數(shù)名稱 | 參數(shù)說明 |
cluster_name | 集群名稱。 |
user | 用戶名稱。 |
示例
示例1:
授予用戶
jack
訪問test_cluster
集群。GRANT USAGE_PRIV ON CLUSTER test_cluster TO jack;
查詢
jack
的集群權(quán)限。SHOW GRANTS FOR jack\G;
返回結(jié)果如下:
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
授權(quán)一個不存在集群not_exist_cluster
的訪問權(quán)限。GRANT USAGE_PRIV ON CLUSTER not_exist_cluster TO jack;
查詢
jack
集群權(quán)限。SHOW GRANTS FOR jack\G;
返回結(jié)果如下:
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;
返回結(jié)果如下:
No connection. Trying to reconnect... Connection id: 1 Current database: *** NONE *** ERROR 5091 (42000): Cluster not_exist_cluster not exist
撤銷集群訪問權(quán)限
撤銷用戶集群訪問權(quán)限
語法
REVOKE USAGE_PRIV ON CLUSTER {cluster_name} FROM {user}
參數(shù)說明
參數(shù)名稱 | 參數(shù)說明 |
cluster_name | 集群名稱。 |
user | 用戶名稱。 |
示例
撤銷jack
訪問集群的權(quán)限并進行查詢。
REVOKE USAGE_PRIV ON CLUSTER test_cluster FROM jack;
SHOW grants for jack\G
返回結(jié)果如下:
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
設(shè)置默認集群
在云數(shù)據(jù)庫 SelectDB 版中為用戶設(shè)置默認集群的作用主要是為了簡化用戶的訪問流程和提升操作便捷性。默認集群允許用戶在執(zhí)行查詢或其他操作時無需指定集群,系統(tǒng)會自動選擇設(shè)定的默認集群進行處理,這樣可以減少用戶每次操作時的配置步驟,提高工作效率。同時,這也有助于用戶更加專注于數(shù)據(jù)分析和處理任務(wù)本身,而不必過多關(guān)注集群管理的細節(jié)。
如果用戶沒有指定默認集群,系統(tǒng)將自動分配一個具有活躍后端且用戶有權(quán)限使用的集群。在同一會話期間,所選擇的集群將保持不變。在不同會話中,由系統(tǒng)自動選定的集群可能會因以下原因而改變:
用戶不再擁有之前被選擇集群的使用權(quán)限。
有新的集群被添加或現(xiàn)有的集群被移除。
上一次選擇的集群沒有活躍的后端。
在上述三種情況中,第一種和第二種將必然導(dǎo)致選擇的集群發(fā)生變更,而第三種情況則可能導(dǎo)致變更。基于此,我們建議定期檢查各自的集群權(quán)限設(shè)置,確保對所需資源的訪問不受影響。
語法
-- 設(shè)置默認集群
SET PROPERTY 'default_cloud_cluster' = '{clusterName}';
-- 為用戶設(shè)置默認集群
SET PROPERTY FOR {user} 'default_cloud_cluster' = '{clusterName}';
參數(shù)說明
參數(shù)名稱 | 參數(shù)說明 |
cluster_name | 集群名稱。 |
user | 用戶名稱。 重要 指定用戶名稱的場合,需要擁有admin權(quán)限。 |
示例
示例1:
為當前用戶設(shè)置默認集群。
SET PROPERTY 'default_cloud_cluster' = 'test_cluster';
查詢當前用戶可訪問的默認集群。
SHOW PROPERTY;
返回結(jié)果如下:
+------------------------+-------------------------------+ | 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:
創(chuàng)建用戶
jack
,并設(shè)置角色為admin。CREATE USER jack IDENTIFIED BY '123456' DEFAULT ROLE "admin";
查詢
jack
可訪問的默認集群。SHOW PROPERTY FOR jack;
返回結(jié)果如下:
+------------------------+-------------------------------+ | 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:
若當前實例下不存在將要設(shè)置的默認集群會報錯,提示使用
SHOW CLUSTERS;
展示當前實例下所有有效的集群。SET PROPERTY 'default_cloud_cluster' = 'not_exist_cluster';
返回結(jié)果如下:
ERROR 5091 (42000): errCode = 2, detailMessage = Cluster not_exist_cluster not exist, use SQL 'SHOW CLUSTERS' to get a valid cluster
展示當前實例下所有有效的集群。
SHOW CLUSTERS;
返回結(jié)果如下:
+---------------+------------+-------------+ | cluster | is_current | users | +---------------+------------+-------------+ | test_cluster | FALSE | admin, jack | | test_cluster1 | FALSE | | +---------------+------------+-------------+
其中
cluster
列表示集群名稱,is_current
列表示當前用戶是否使用此集群,users
列表示這些用戶可以設(shè)置默認集群為當前行的集群。