暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

海量智库第39期 | 掌握Vastbase身份认证机制细粒度配置,加固系统安全

海量数据库 2025-07-25
445


身份认证机制作为安全的第一道防线,可有效控制攻击者非法访问数据库。为进一步提高系统安全性,Vastbase提供多项身份认证配置参数,可有效规避多项针对身份认证的攻击。

本期海量智库将为大家介绍如何通过PROFILE功能,细粒度控制与身份认证相关的配置参数。


01

Vastbase身份认证机制


用户连接数据库时,身份认证机制要求用户提供身份凭证,在鉴别成功后,才允许用户执行其他操作,有效控制攻击者非法访问数据库。

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出于安全考虑,会检查新密码是否与曾用过的旧密码相同。


02

PROFILE功能介绍


PROFILE功能用于管理身份认证与资源消耗的配置参数。一个集群存在多个用户,每个用户的角色不同,有高权限的系统管理员,有低权限的普通用户,不同用户的密码有效期、密码错误阈值等要求也应不同。通过GUC参数,控制粒度较粗,无法为不同用户设置不同的配置参数,而通过PROFILE功能,可为每个用户设置不同的配置参数,实现细粒度控制。


未使用PROFILE功能时,需通过以下GUC配置身份认证参数,无法满足为不同用户设置不同参数值的要求。


03

PROFILE功能使用


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;


04

PROFILE功能原理


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系列,全栈国产化,应用满足度高,目前广泛应用于政务、制造、金融、通信、能源、交通等多个重点行业,已成为国产企业级数据库的首选之一。





文章转载自海量数据库,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论