目前的GBase 8a版本还不能通过一个SQL设置所有节点的单个用户的最大连接数,本文提供一种替代方法可以达到相同的目的。
注意所有操作,在每个对外连接的调度(gcluster)节点都要执行。如果用户有可能直接连接gnode,且也要限制,那就每个数据节点也执行。
另外:如果开启了资源管理,也可以用最大任务数,来变相的实现这个功能。当然连接数和任务数还是不一样的,
目录导航
通过update更新指定用户最大连接数配置
gbase> update user set max_user_connections=1 where user='u1';
Query OK, 1 row affected (Elapsed: 00:00:00.00)
Rows matched: 1 Changed: 1 Warnings: 0
gbase> select * from user where user='u1'\G;
*************************** 1. row ***************************
Host: %
User: u1
Password: *556BEF296211C2AF58F53DA3EDDD0A3371B6ECD5
Select_priv: N
Insert_priv: N
Update_priv: N
Delete_priv: N
Create_priv: N
Drop_priv: N
Reload_priv: N
Shutdown_priv: N
Process_priv: N
File_priv: N
Grant_priv: N
References_priv: N
Index_priv: N
Alter_priv: N
Show_db_priv: N
Super_priv: N
Create_tmp_table_priv: N
Lock_tables_priv: N
Execute_priv: N
Repl_slave_priv: N
Repl_client_priv: N
Create_view_priv: N
Show_view_priv: N
Create_routine_priv: N
Alter_routine_priv: N
Create_user_priv: N
Event_priv: N
Trigger_priv: N
ssl_type:
ssl_cipher:
x509_issuer:
x509_subject:
max_questions: 0
max_updates: 0
max_connections: 0
max_user_connections: 1
max_cpus: 0
max_memories: 0
max_tmp_space: 0
resource_group: 0
task_priority: 2
user_limit_storage_size:
user_storage_size: 0
UID: 14337
1 row in set (Elapsed: 00:00:00.00)
刷新权限信息
gbase> flush privileges;
Query OK, 0 rows affected (Elapsed: 00:00:00.01)
验证
尝试同时连接超过设定的并发数,会出现如下的报错信息:User 'u1' has exceeded the 'max_user_connections' resource (current value: 1)
[root@gbase101 ~]# gccli -uu1 -pu1
ERROR 1226 (42000): User 'u1' has exceeded the 'max_user_connections' resource (current value: 1)
[root@gbase101 ~]#