关键字:
概述
创建用户时可以设置用户的连接时间,若不进行设置则会默认设置为0,即不进行连接时间的限制。创建完用户后,可以使用alter对指定用户的连接时间进行修改。
系统表sys_authid新增一列bigint类型的数据,用于记录用户的连接时间单位为秒,当时间为0时,表示不对该用户的连接时间做限制。不支持将用户连接时间设置为负数。
设置指定用户连接时间后,该用户只要一连接上数据库,系统就会获取表sys_authid中记录的对应用户的连接时间并开始计时,计时到指定时间就会断开用户的连接,释放用户占有的资源。
主要功能如下:
拥有create role权限的用户在创建新用户时可以通过with选项中的connection time来实现设置新用户的连接时间。若在创建新用户时不指定连接时间限制,系统会将时间默认设置为0,表示不对新用户的连接时间进行限制。不支持将连接时间设置为负数。
例如:create user username with connection time xxx;、
拥有create role权限的用户在使用alter语句修改用户时,可以通过with选项中的connection time来实现修改指定用户的连接时间。修改时用户需要对被修改用户拥有修改权限,例如普通用户无法修改超级用户的连接时间。将时间修改为0表示不对用户进行连接时间的限制,不支持将连接时间设置为负数。
例如:alter user username with connection time xxx;
控制用户连接时间特性实际操作
--1、创建用户--正向--使用正确语法创建用户同时设置用户连接时间5s,登出后,使用创建的用户连接数据库--预期到30s后,自动断开,查系统视图sys_authid中预期可查到该用户的连接时间
./ksql test -U system -W -p22221
drop user u1;
create user u1 password '12345678ab' connection time 5;
select rolname,rolconntime from sys_authid where rolname = 'u1';
-- rolname | rolconntime
---------+-------------
-- u1 | 5
--(1 row)
\c "dbname=test user=u1 password=12345678ab port=":PORT
\! date
--2023年 09月 21日 星期四 18:47:19 CST
\! date
--2023年 09月 21日 星期四 18:47:26 CST
\d
--没有到服务器的联接
--2、修改用户属性时--正向--使用正确语法创建用户同时设置用户连接时间5s,登出后,使用创建的用户连接数据库--预期到设置时间,自动断开,查系统视图sys_authid中预期可查到该用户的连接时间
./ksql test -U system -W -p22221
select rolname,rolconntime from sys_authid where rolname = 'u1';--预期5s
alter user u1 connection time 10;
select rolname,rolconntime from sys_authid where rolname = 'u1';--预期10s
\c "dbname=test user=u1 password=12345678ab port=":PORT
\! date
--2023年 09月 21日 星期四 18:57:25 CST
\! date
--2023年 09月 21日 星期四 18:57:30 CST
\d
-- 关联列表
-- 架构模式 | 名称 | 类型 | 拥有者
------------+-------------------------+------+--------
-- public | sys_stat_statements | 视图 | system
-- public | sys_stat_statements_all | 视图 | system
--(2 行记录)
\! date
--2023年 09月 21日 星期四 18:57:36 CST
\d
--没有到服务器的联接
使用经验及注意事项
到达用户的连接时间后,需要进行操作才有,退出数据库,原理为到达连接时间后,服务端已知断开,但客户端未知晓,需要发送请求到服务端。
设置用户的连接时间后,需要使用该用户再次连接数据库时才生效,本次不生效。
到达用户的连接时间后退出,该行为即使开启服务器级的审计,也不会被审计到。
价值评价
首先,可以控制单个用户的连接时间。
其次,用户连接数据库到指定时间后断开连接,可以及时释放数据库资源,避免单个用户占用数据库资源的时间过长。




