南大通用GBase 8a限制数据库单个用户的最大连接数

目前的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 ~]#