
身份认证机制作为安全的第一道防线,可有效控制攻击者非法访问数据库。为进一步提高系统安全性,Vastbase提供多项身份认证配置参数,可有效规避多项针对身份认证的攻击。
本期海量智库将为大家介绍如何通过PROFILE功能,细粒度控制与身份认证相关的配置参数。
用户连接数据库时,身份认证机制要求用户提供身份凭证,在鉴别成功后,才允许用户执行其他操作,有效控制攻击者非法访问数据库。
Vastbase提供多项身份认证配置参数,例如密码有效期、密码错误锁定等,可有效规避密码泄露、密码爆破等攻击。
Vastbase身份认证模块,主要采用基于密码的认证机制,常用的密码操作包括:
1、创建密码
创建新用户时,需指定密码。语法示例如下:
CREATE USER u1 PASSWORD 'u1.password';
Vastbase接收密码后,计算密码的哈希值,并将密码哈希值、密码创建时间等存储至系统表中。
2、使用密码
用户连接Vastbase时需提供密码,使用vsql连接的命令如下:
vsql -h {host} -p {port} -U u1 -W 'u1.password' -d vastbase -r
Vastbase会与vsql进行身份认证交互,基于存储的密码哈希值,校验密码是否正确。同时,Vastbase还会进行其他检查,比如密码是否过期、密码错误次数是否过多等。
3、修改密码
用户修改密码时,语法示例如下:
ALTER USER u1 PASSWORD 'u1.newpass';
Vastbsae出于安全考虑,会检查新密码是否与曾用过的旧密码相同。
PROFILE功能用于管理身份认证与资源消耗的配置参数。一个集群存在多个用户,每个用户的角色不同,有高权限的系统管理员,有低权限的普通用户,不同用户的密码有效期、密码错误阈值等要求也应不同。通过GUC参数,控制粒度较粗,无法为不同用户设置不同的配置参数,而通过PROFILE功能,可为每个用户设置不同的配置参数,实现细粒度控制。
未使用PROFILE功能时,需通过以下GUC配置身份认证参数,无法满足为不同用户设置不同参数值的要求。

1
PROFILE简单示例
首先,以一个简单的例子介绍PROFILE的使用方法。
1、假设需创建用户u1,该用户的密码有效期为10天,密码错误次数阈值为3次。
2、创建PROFILE,可理解为创建配置组,创建时可同时设置参数值。
CREATE PROFILE pro1 LIMIT password_effect_time 10 failed_login_attempts 3;
3、创建用户,并为用户设置PROFILE,即设置配置组。
CREATE USER u1 PASSWORD 'u1.password' PROFILE pro1;
4、用户u1的密码有效期、密码错误次数阈值等,将不再由GUC参数控制,而是由PROFILE参数控制,PROFILE参数存储于系统表中。
2
管理PROFILE功能
PROFILE功能是否开启,由GUC参数resource_limit控制。
resource_limit取值为on,表示开启PROFILE功能。此时,以下5个GUC参数,将不再生效,而是由PROFILE参数代替,PROFILE参数存储于系统表中:
1、password_effect_time
2、failed_login_attempts
3、password_lock_time
4、password_reuse_time
5、password_reuse_max
另外,身份认证成功的用户,用户会话超时也不再由GUC参数session_timeout控制,而是由PROFILE参数代替。
3
管理PROFILE参数
PROFILE功能新增3个语法,支持创建、修改、删除PROFILE,语法格式如下:
-- 创建
CREATE PROFILE profile_name [ LIMIT {setting_name setting_value ...} ]
-- 修改
ALTER PROFILE profile_name LIMIT {setting_name setting_value ...}
-- 删除
DROP PROFILE [IF EXISTS] profile_name [, profile_name, ...]
其中,setting_name表示PROFILE配置参数,目前支持7个参数:
PROFILE配置名 | 被替代的GUC配置名 | 功能 |
password_life_ time | password_effect_time | 无变化 |
password_ grace_time | 如果密码超过有效期,控制继续使用账号的宽容期 | |
failed_login_ attempts | failed_login_attempts | 无变化 |
password_lock_time | password_lock_time | 无变化 |
password_ reuse_time | password_reuse_time | 无变化 |
password_ reuse_max | password_reuse_max | 无变化 |
idle_time | session_timeout | 无变化 |
与原GUC相比,上述参数的取值范围、参数单位等存在差异。使用示例如下:
1、创建PROFILE
-- 创建PROFILE,参数均使用默认值
CREATE PROFILE pro1;
-- 创建PROFILE,同时设置参数值,可设置1个或多个参数,参数之间使用空格分隔。在pro2中,为主动设置的其他5个参数,均使用默认值
CREATE PROFILE pro2 LIMIT password_life_time 30 failed_login_attempts 3;
-- 参数取值可设置为 unlimited,即对相关功能不做限制。例如将password_life_time设置为unlimited,表示密码永远不会过期
CREATE PROFILE pro3 LIMIT password_life_time unlimited;
2、查询PROFILE
-- 所有PROFILE均存储于系统表中
SELECT * FROM vb_profiles;
安装集群时,Vastbase内置1个名为default的PROFILE,该PROFILE中7个参数取值均为unlimited,查询vb_profiles的结果如下:
profile | setname | setval | valunit | valtype | valmin | valmax | valdefault | setkind -- unlimited含义
---------+-----------------------+-----------+---------+--------------------+------------+------------+----------
default | failed_login_attempts | unlimited | times | int | 1 | 2147483646 | 10 | password -- 等价INT_MAX,允许无限次登录失败
default | password_lock_time | unlimited | days | double | 0.00001 | 24855 | 1 | password -- 等价0,账号永远不锁
default | password_life_time | unlimited | days | double | 0.00001 | 24855 | 180 | password -- 等价DBL_MAX,密码永远有效
default | password_grace_time | unlimited | days | double | 0.00001 | 24855 | 7 | password -- 等价DBL_MAX,密码过期也永远可用
default | password_reuse_time | unlimited | days | double | 0.00001 | 24855 | 1 | password -- 等价0,密码可无限复用
default | password_reuse_max | unlimited | times | int | 1 | 2147483646 | 1 | password -- 等价INT_MAX,密码可无限复用
default | idle_time | unlimited | minutes | double | 0.00001 | 2147483646 | 10 | kernel -- 等价INT_MAX,会话永远不过期
-- 提示:0.00001 days约为0.8 second,24855 days约为70 years
各列含义如下:
列名 | 含义 |
profile | PROFILE 名,可理解为配置组 |
setname | PROFILE 配置参数名 |
setval | 配置参数 实际值 |
valunit | 参数值 单位 |
valtype | 参数值 数据类型 |
valmin | 参数值 最小值 |
valmax | 参数值 最大值 |
valdefault | 参数值 默认值,执行CREATE PROFILE语法时,未主动设置值的配置参数,默认使用该列中的值 |
settype | 配置参数 分类 |
另外,查询视图DBA_PROFILES的结果,与查询系统表vb_profiles效果接近。
SELECT * FROM DBA_PROFILES;
3、修改PROFILE
-- 修改PROFILE,可修改1个或多个参数,参数之间使用空格分隔
ALTER PROFILE pro1 LIMIT password_life_time 100 password_reuse_max unlimited;
4、删除PROFILE
DROP PROFILE pro1;
-- 删除PROFILE,一次可删除多个
DROP PROFILE IF EXISTS pro1,pro2,pro3;
-- 注意:Vastbase内置的名为default的PROFILE不能被删除
4
管理用户PROFILE
PROFILE功能支持为不同用户设置、修改不同的PROFILE,即不同的配置组。设置语法如下:
-- 创建用户时,为用户设置PROFILE
CREATE USER user_name PASSWORD password [ PROFILE profile_name ]
-- 对于已存在的用户,修改用户PROFILE
ALTER USER user_name [ PROFILE profile_name ]
如果未主动为用户设置PROFILE,则用户默认使用名为default的PROFILE。使用示例如下:
1、设置用户PROFILE
-- 前提:请确保已通过 CREATE PROFILE 语法设置对应的PROFILE
CREATE USER u1 PASSWORD 'u1.password' PROFILE pro1;
2、查询用户PROFILE
SELECT * FROM vb_user_profiles WHERE rolname = 'u1';
查询结果示例如下:
roloid | rolname | profile
--------+---------+---------
28214 | u1 | pro1
3、修改用户PROFILE
-- 前提:请确保已通过 CREATE PROFILE 语法设置对应的PROFILE
ALTER USER u1 PROFILE pro2;
1、系统表pg_authid
创建用户时,Vastbase会为用户分配唯一的用户id,并在系统表pg_authid中,记录用户名、用户id、密码哈希值等信息。
CREATE USER u1 PASSWORD 'u1.password';
SELECT rolname,oid,rolpassword FROM pg_authid WHERE rolname = 'u1';
-- 示例输出:
rolname | oid | rolpassword
---------+-------+----------------------------
u1 | 28214 | sha25684899a888d999b97...
2、系统表pg_user_status
Vastbase会在系统表pg_user_status中,初始话密码失败次数、密码锁定状态、密码锁定时间等信息。
登录用户时,如果密码错误,Vastbase会更新系统表中密码失败次数等信息,并校验是否达到锁定条件。
SELECT roloid,failcount,rolstatus,locktime FROM pg_user_status WHERE roloid = 28214;
-- 示例输出:
roloid | failcount | rolstatus | locktime
--------+-----------+-----------+--------------------------
28214 | 0 | 0 | 2025-05-01 10:40:41....
3、系统表pg_auth_history
修改密码时,Vastbase会在系统表pg_auth_history中,记录所有曾用过的密码。
ALTER USER u1 PASSWORD 'u1.newpass';
SELECT roloid,passwordtime,rolpassword FROM pg_auth_history WHERE roloid = 28214;
-- 示例输出:
roloid | passwordtime | rolpassword
--------+-------------------------+------------------------------
28214 | 2025-05-01 10:40:41.... | sha25684899a888d999b97...
28214 | 2025-05-08 13:25:07.... | sha256b019838a88f989c8...
掌握海量数据库Vastbase身份认证机制,为系统安全保驾护航。
• END •
往期推荐

关于海量数据
北京海量数据技术股份有限公司(股票代码:603138.SH)成立于2007年,是国内首家以数据库为主营业务的主板上市企业。公司近二十年来秉承“专注做好数据库”的初心,始终致力于数据库产品的研发、销售和服务。核心产品海量数据库Vastbase系列、数据库一体机Vastcube系列,全栈国产化,应用满足度高,目前广泛应用于政务、制造、金融、通信、能源、交通等多个重点行业,已成为国产企业级数据库的首选之一。









