Kingbase安全之身份验证

这篇具有很好参考价值的文章主要介绍了Kingbase安全之身份验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

3.2. 身份验证 ¶

身份验证是指验证连接到数据库的用户或其他实体的身份。

  • 关于身份验证

  • 口令保护和管理

  • 用户的数据库身份验证

  • 用户的网络身份验证

  • 用户的客户端认证

3.2.1. 关于身份验证 ¶

身份验证指的是当用户、设备或其他实体连接数据库,需要验证他们的身份。验证标识可为进一步的交互建立信任关系。身份验证还通过将访问和操作链接到特定标识来实现问责制。身份验证后,授权过程可以允许或限制允许该实体的访问和操作级别。

您可以对 KingbaseES 数据库的数据库用户进行身份验证。为简单起见,通常对所有数据库用户使用相同的身份验证方法,但KingbaseES数据库允许单个数据库实例使用任何或所有方法。KingbaseES数据库对一些特殊的用户执行特殊的身份验证过程。KingbaseES数据库还会在传输过程中对密码进行加密,以确保网络身份验证的安全性。身份验证后,授权过程可以允许或限制允许该实体的访问和操作级别。

KingbaseES支持基于强化口令的身份鉴别,它包括对数据库用户施加口令复杂度检查、帐户和口令有效期限设置、帐户锁定等安全策略管理等机制。此外,KingbaseES还支持基于Kerberos、Radius、LDAP认证协议和 CA 等技术在内的与第三方身份认证产品相结合的外部统一身份鉴别或集中化身份认证方式。通过强化身份鉴别与SSL安全传输相结合,KingbaseES建立了服务器与客户端的可信路径安全通道,实现了双向可信认证,杜绝假冒用户身份或者假冒数据库服务器的恶意行为,并进一步防范这些恶意行为可能引发的重放攻击。

注意

身份验证的方法和详细介绍,参见 强身份验证 。

3.2.2. 口令保护和管理 ¶

KingbaseES支持基于强化口令的身份鉴别,包括对数据库用户的口令加密,以及复杂度进行检查、帐户口令的有效期限设置、帐户异常登录锁定、账户登录信息显示等安全策略的管理机制。

3.2.2.1. 口令加密 ¶
3.2.2.1.1. 口令加密认证 ¶

在配置文件kingbase.conf中的password_encryption参数决定用户口令加密的算法。当在CREATE/ALTER USER 中指定了口令时,这个参数决定用于加密该口令的算法。默认值是 scram-sha-256 。目前支持的口令加密算法有 md5 、 sm3 、 scram-sm3 、 sm4 

有几种基于口令的认证方法。这些方法的过程类似,但是区别在于用户口令如何被存放在服务器上以及客户端提供的口令如何被通过连接发送。

scram-sha-256

方法 scram-sha-256 按照 RFC 7677 中的描述执行SCRAM-SHA-256认证。它使用的是一种挑战-响应的方案,可以防止在不可信连接上对口令的嗅探并且支持在服务器上以一种加密哈希的方式存放口令,因此被认为是安全的。

这是当前提供的方法中最安全的一种,但是旧的客户端库不支持这种方法。

md5

方法 md5 使用一种自定义的安全性较低的挑战-响应机制。它能防止口令嗅探并且防止口令在服务器上以明文存储,但是无法保护攻击者想办法从服务器上窃取了口令哈希的情况。此外,现在认为MD5哈希算法对于确定攻击已经不再安全。

md5 方法不能与 db_user_namespace 特性一起使用。

为了简化从 md5 方法到较新的SCRAM方法的转变,如果在 sys_hba.conf 中指定了 md5 但是用户在服务器上的口令是为SCRAM(见下文)加密的,则将自动选择基于SCRAM的认证。

password

方法 password 以明文形式发送口令,因此它对于口令“嗅探”攻击很脆弱。如果可能应该尽量避免使用它。不过,如果连接被SSL加密保护着,那么可以安全地使用 password (不过如果依靠SSL,SSL证书认证可能是更好的选择)。

sm3

方法 sm3 是中华人民共和国政府采用的一种密码散列函数标准,相关标准为“GM/T0004-2012《sm3密码杂凑算法》”。当进行口令认证时,会在传输前结合用户名和salt(服务器发送给客户端的随机数)对密码进行单向 sm3 加密,以增加安全性。

据国家密码管理局表示,其安全性及效率与SHA-256相当。

scram-sm3

国密算法的scram身份认证,通过sm3 hmac算法完成scram身份认证,用来替换掉sha-256算法。sha256算法为国际标准,不符合国密要求。

sm4

根据标准 GM/T --91-2020 ,支持使用PBKDF2密钥生成算法及sm4算法加密的身份认证。

不同的基于口令的认证方法的可用性取决于用户的口令在服务器上是如何被加密(或者更准确地说是哈希)的。这由设置口令时的配置参数 password_encryption 控制。如果口令使用 scram-sha-256 设置加密,那么它可以被用于认证方法 scram-sha-256 和 password (但后一种情况中口令将以明文传输)。如上所释,在这种情况下,指定的认证方法 md5 将自动切换到使用 scram-sha-256 方法。如果口令使用 md5 设置加密,那么它仅能用于 md5 和 password 认证方法说明(同样,后一种情况中口令以明文传输)。(之前的KingbaseES发行版支持在服务器上存储明文口令。现在已经不可能了)。要检查当前存储的口令哈希,可以参考系统目录 sys_authid 

要把现有的安装从 md5 升级到 scram-sha-256 ,可以在确保所有在用的客户端已经足以支持SCRAM之后,在 kingbase.conf 中设置 password_encryption = 'scram-sha-256' ,然后让所有用户设置新口令并且在 sys_hba.conf 中将认证方法说明改为 scram-sha-256 

3.2.2.1.2. 设置口令密文 ¶

在KingbaseES中使用密码配置工具sys_encpwd来设置口令密文。用户密码配置工具sys_encpwd可以通过事先配置好指定用户的密码,将该用户的密码以密文形式存在.encpwd或encpwd.conf文件中。

使用方法:

该工具包含5个参数,5个参数均需要输入才能配置成功。

参数说明:

-H, --hostname=

主机地址,允许单主机地址匹配和全匹配,全匹配时使用*指定

-P, --portnum=

端口号,仅允许单端口匹配

-D, --database=

数据库名,允许单数据库匹配和全匹配,全匹配时使用*指定

-U, --user=

用户名,仅允许单用户匹配

-W, --password=

用户对应的密码,仅允许单用户匹配

注意

当前四个参数输入与原文件中的某一条记录完全相同时,会修改该条记录相应的密码,否则生成一条新的记录。

示例:

第一步:修改sao用户密码

ALTER USER SAO PASSWORD '12345678abc';

第二步:使用sys_encpwd工具配置密码

./sys_encpwd -H 127.0.0.1 -P 54321 -D security -U sao -W 12345678abc
./sys_encpwd -H \* -P 54321 -D \* -U sao -W 12345678abc

查看.encpwd文件可以看到密码为密文

cat ~/.encpwd
3.2.2.2. 口令大小写的区分 ¶

使用 CREATE USER 创建用户时,PASSWORD指定用户口令。口令需要使用单引号括起来,所以在KINGBASEES数据库中用户口令是区分大小写的。

3.2.2.3. 口令复杂性管理 ¶

口令的复杂度检查是由数据库安全员对口令的最小长度,所包含的数字、英文字母、特殊符号的数目进行设置后,在创建和修改用户时,自动对口令进行相关方面的检查。如果口令不满足指定的条件,那么创建用户将不成功。

KingbaseES通过插件的方式来进行口令的复杂度管理。这种方式更为灵活,当数据库的实用场景需要进行口令的复杂度管理时,加载插件即可。而不需要该功能时,卸载插件即可。 KingbaseES中通过4个全局级参数配合插件来实现用户口令复杂度管理。详情参见插件 passwordcheck 。

3.2.2.3.1. 加载插件 ¶

修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库,创建插件并打开密码复杂度 开关。

shared_preload_libraries = 'passwordcheck'
\c - system
create extension passwordcheck;
CREATE EXTENSION
\c - sso
show passwordcheck.enable;
passwordcheck.enable
----------------------
off
(1 行记录)
alter system set passwordcheck.enable=on;
ALTER SYSTEM
select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)
show passwordcheck.enable;
passwordcheck.enable
----------------------
on
(1 行记录)
3.2.2.3.2. 参数配置 ¶

口令复杂度管理参数如下表所示:

表 3.2.30 口令复杂度管理参数  ¶

参数名

取值范围

默认值

描述

passwordcheck.enable

true/false

false

密码复杂度功能开关,默认为关闭状态

passwordcheck.password_length

[8,63]

8

密码的最小长度

passwordcheck.password_condition_letter

[2,61]

2

密码至少包含几个字母

passwordcheck.password_condition_digit

[2,61]

2

密码至少包含几个字母

passwordcheck.password_condition_punct

[0,59]

0

密码至少包含几个特殊字符

passwordcheck.enable 密码复杂度开关,默认为关闭状态。

\c - sso
show passwordcheck.enable;
passwordcheck.enable
----------------------
off
(1 行记录)
alter system set passwordcheck.enable=on;
ALTER SYSTEM
select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)
show passwordcheck.enable;
passwordcheck.enable
----------------------
on
(1 行记录)

passwordcheck.password_length 口令的最小长度,取值范围为 [8,63],缺省为8。

\c - sso
SHOW passwordcheck.password_length;
passwordcheck.password_length
-------------------------------
8
(1 row)

alter system SET passwordcheck.password_length = 10;
select sys_reload_conf();

SHOW passwordcheck.password_length;
passwordcheck.password_length
-------------------------------
10
(1 row)

\c - system
CREATE USER u_pwd PASSWORD '123ab';
ERROR: password length 5 is too short, should be longer than min
password length 10.
CREATE USER u_pwd PASSWORD '1234567890ab';
CREATE ROLE

passwordcheck.password_condition_letter 口令至少包含几个字母,取值范围为[2,61],缺省为2。

\c - sso
SHOW passwordcheck.password_condition_letter;
passwordcheck.password_condition_letter
-----------------------------------------
2
(1 row)

alter system SET passwordcheck.password_condition_letter = 3;
select sys_reload_conf();

SHOW passwordcheck.password_condition_letter;
passwordcheck.password_condition_letter
-----------------------------------------
3
(1 row)

\c - system
ALTER USER u_pwd PASSWORD '1234567890';
ERROR: Password should contain at least 3 letter and the current
number is 0
ALTER USER u_pwd PASSWORD '1234567890ab';
ERROR: Password should contain at least 3 letter and the current
number is 2
ALTER USER u_pwd PASSWORD '1234567890abC';
ALTER ROLE

passwordcheck.password_condition_digit 口令至少包含几个数字,取值范围为 [2,61],缺省为2。

\c - sso
SHOW passwordcheck.password_condition_digit;
passwordcheck.password_condition_digit
----------------------------------------
2
(1 row)

alter system SET passwordcheck.password_condition_digit = 3;
select sys_reload_conf();

SHOW passwordcheck.password_condition_digit;
passwordcheck.password_condition_digit
----------------------------------------
3
(1 row)

\c - system
ALTER USER u_pwd PASSWORD 'abcdefghij';
ERROR: Password should contain at least 3 digit and the current
number is 0
ALTER USER u_pwd PASSWORD 'abcdefghij123';
ALTER ROLE

passwordcheck.password_condition_punct 口令至少包含几个特殊字符,取值范围为 [0,59],缺 省为 0。其中特殊符号为除空白符、英文字母、单引号和数字外的所有可见字符。

\c - sso
SHOW passwordcheck.password_condition_punct;
passwordcheck.password_condition_punct
----------------------------------------
0
(1 row)

alter system SET passwordcheck.password_condition_punct = 2;
select sys_reload_conf();

SHOW passwordcheck.password_condition_punct;
passwordcheck.password_condition_punct
----------------------------------------
2
(1 row)

\c - system
ALTER USER u_pwd PASSWORD '1234567890abc.';
ERROR: Password should contain at least 2 punct and the current
number is 1
ALTER USER u_pwd PASSWORD '1234567890abc./';
ALTER ROLE
3.2.2.3.3. 卸载插件 ¶

修改 kingbase.conf 文件中shared_preload_libraries 参数后重启数据库。

shared_preload_libraries = ''
3.2.2.4. 口令有效期设置 ¶

KingbaseES的用户管理中含有口令有效期这一属性,用户密码过期检查就是通过设置用户密码的有效期,在 用户密码过期后限制用户登录数据库,并输入新密码的功能。

KingbaseES通过插件的方式来进行用户密码过期检查。这种方式更为灵活,当数据库的实用场景需要进行用 户密码过期检查时,加载插件即可。而不需要该功能时,卸载插件即可。 KingbaseES中通过 1 个全局级参数配合插件来实现用户密码过期检查。详情参见插件 identity_pwdexp 。

3.2.2.4.1. 加载插件 ¶

修改 kingbase.conf 文件中shared_preload_libraries 参数 。

shared_preload_libraries = 'identity_pwdexp'
3.2.2.4.2. 参数配置 ¶

口令有效期参数如下表所示:

表 3.2.31 口令有效期参数  ¶

参数名

取值范围

默认值

描述

identity_pwdexp.password_change_interval

[1,INT_MAX]

30

密码有效期

identity_pwdexp.max_password_change_interval

[1,INT_MAX]

30

最大密码有效期

语句:

Alter system set 参数名= 参数值 ;

修改后再运行 select sys_reload_conf(); 不用重启服务器,对所有数据库及连接立即生效。

指定密码创建用户时,可通过 valid until 选项指定该用户的密码有效期,指定的密码有效期必须晚于当前时间且早于更换周期 identity_pwdexp.password_change_interval 指定的时间。

对已创建成功且已拥有密码的用户,也可通过alter语句的valid until选项修改其密码有效期,但仅安全管理员有这个权限,其它用户无法修改自己及他人的口令更换周期。

若在创建用户或修改用户密码时未显示的通过 valid until 选项指定该用户的密码有效期,那么系统会根据 identity_pwdexp.password_change_interval 参数设定的值自动为其计算密码有效期。

identity_pwdexp.max_password_change_interval 最大密码有效期,单位是天,取值范围为 [1,INT_MAX],缺省为30。

参数只能在postmaster启动或由安全管理员通过 SQL 语言 (alter 命令)进行设置。

此参数用于限制密码有效期的设置范围,当设置的密码有效期大于最大密码有效期时,系统会报错提示。

\c - system
create extension identity_pwdexp;
CREATE EXTENSION
\c - sso
show identity_pwdexp.password_change_interval;
identity_pwdexp.password_change_interval
--------------------------
30
(1 row)
alter system set identity_pwdexp.password_change_interval = 5;
ALTER SYSTEM
show identity_pwdexp.password_change_interval;
identity_pwdexp.password_change_interval
------------------------------------------
0
(1 行记录)
select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)
show identity_pwdexp.password_change_interval;
identity_pwdexp.password_change_interval
------------------------------------------
5
(1 行记录)

\c - system
call now();
now
-------------------------------
2020-04-30 15:34:30.408304+08
(1 行记录)
CREATE USER u_pwd_et PASSWORD '1234567890abC/.' VALID UNTIL '
2020-05-01';
CREATE ROLE
SELECT USENAME, VALUNTIL FROM SYS_USER WHERE USENAME =
'u_pwd_et';
usename | valuntil
----------+------------------------
u_pwd_et | 2020-05-01 00:00:00+08
(1 行记录)
ALTER USER u_pwd_et PASSWORD '/.1234567890abC';
警告: user "u_pwd_et" does not be locked
ALTER ROLE
SELECT USENAME, VALUNTIL FROM SYS_USER WHERE USENAME =
'u_pwd_et';
usename | valuntil
----------+-------------------------------
u_pwd_et | 2020-05-05 15:35:23.448381+08
(1 行记录)
3.2.2.5. 帐户异常登录锁定 ¶

帐户异常登录锁定是指如果用户连续若干次不能正确的登录数据库,那么这个用户的帐户将被系统禁用。系统允许的用户连续错误登录次数由数据库管理员指定。被禁用的帐户可以由安全员利用 SQL 命令使其重新 可用或者等待一段时间自动解锁。

KingbaseES通过插件的方式来进行帐户异常登录锁定以及账户登录信息显示。这种方式更为灵活,当数据库的实用场景需要进行帐户异常登录锁定以及账户登录信息显示时,加载插件即可。而不需要该功能时,卸载插件即可。 插件名为sys_audlog,相关参数由数据库安全员负责配置。详情参见插件 sys_audlog 。

3.2.2.5.1. 加载插件 ¶

修改 kingbase.conf 文件中shared_preload_libraries 参数。

shared_preload_libraries = 'sys_audlog'
create extension sys_audlog;
3.2.2.5.2. 参数配置 ¶

帐户异常登录锁定相关参数参数如下表所示:

表 3.2.32 帐户异常登录锁定参数  ¶

参数名

取值范围

默认值

描述

sys_audlog.max_error_user_connect_times

[0,INT_MAX]

2147483647

用户登录失败次数的最大值界限

sys_audlog.error_user_connect_times

[0,INT_MAX]

0

允许用户连续登录失败的最大次数

sys_audlog.error_user_connect_interval

[0,INT_MAX]

0

用户被锁定时间

sys_audlog.max_error_user_connect_times 用户登录失败次数的最大值界限,error_user_connect_times的最大取值,取值范围为 [0,INT_MAX],缺省为2147483647。 设置密码最大失败次数为 6。

\c - sso
ALTER SYSTEM SET sys_audlog.max_error_user_connect_times = 6;
CALL sys_reload_conf();

sys_audlog.error_user_connect_times 允许用户连续登录失败的最大次数,用户登录失败的次数大于超过该值,用户自动锁定,取值范围为[0,INT_MAX],缺省为 0。 设置密码连续最大失败次数为 6。

\c - sso
ALTER SYSTEM SET sys_audlog.error_user_connect_times = 6;
CALL sys_reload_conf();

注意

参数error_user_connect_times值不能大于max_error_user_connect_times值,否则会报错。

sys_audlog.error_user_connect_interval 用户被锁定时间,若用户被锁定的时间超过了该参数,则该用户可自动解锁。单位是分钟,取值范围为[0,INT_MAX],0时关闭自动解锁功能,需手动解锁,缺省为0。 设置被封锁用户的自动解封时间为 1 小时。

\c - sso
ALTER SYSTEM SET sys_audlog.error_user_connect_interval = 60;
CALL sys_reload_conf();
3.2.2.5.3. 解除锁定 ¶

超过时间间隔自动解除用户封锁。 用户可由具有 ALTER USER 权限的用户通过 SQL 语句进行手动解锁,解锁后用户登录的信息自动删除。

\c - sso
ALTER USER username WITH LOGIN;

注意

解锁时需要注意以下两点:

  1. 超过时间间隔后自动解锁用户需要登录成功,若达到解锁时间后重新登录且再次失败,用户会继续锁定。

  2. 登录时若不加-W 时会自动进行一次不带密码的登录尝试,因此会多增加一次失败记录,且在解锁用户时使用不加-W的方式登录,会导致再次被锁定,因此在解锁用户时注意加-W参数进行登录尝试。

3.2.2.6. 账户登录信息显示 ¶

账户登录信息显示则会在用户登录数据库时给出用户一些提示信息,如此次登录信息、最后一次成功登录信息、此次登录与上次登录之间登录失败的次数、最近一次尝试登录的信息等。 。详情参见插件 sys_audlog 。

3.2.2.6.1. 加载插件 ¶

修改 kingbase.conf 文件中shared_preload_libraries 参数。

shared_preload_libraries = 'sys_audlog'
create extension sys_audlog;
3.2.2.6.2. 参数配置 ¶

登录信息显示参数如下表所示:

表 3.2.33 登录信息显示参数  ¶

参数名

取值范围

默认值

描述

sys_audlog.user_logonlog_level

[0,2]

0

数据库对用户登录信息记录的级别

0 表示不记录任何用户的登录信息;

1 表示只记录用户成功登录的信息;

2 表示记录用户登录成功和失败的信息。

sys_audlog.user_logonlog_level 数据库对用户登录信息记录的级别,控制是否要记录用户登录信息的开关,通过该参数来控制是否要记录用户登录的信息,以及记录用户的哪些登录信息。取值范围为[0,2],缺省为 0。

示例如下:

--ksql使用system用户登录
ksql test -U system -p 54344
ksql (V8.0)
Type "help" for help.


WARNING:License file will expire in 2 days.

--加载插件
create extension sys_audlog;

--切换sso用户
\c - sso
You are now connected to database "test" as user "sso".

--设置既记录用户成功登陆信息又记录失败登录信息
alter system set sys_audlog.user_logonlog_level = 2;
select sys_reload_conf();

 sys_reload_conf
-----------------
 t
(1 row)

--退出
\q
You have mail in /var/spool/mail/test

--再次使用system用户登录,显示用户登录信息
ksql test -U system -p 54344
ksql (V8.0)
Type "help" for help.


WARNING:License file will expire in 2 days.


This time login information:
            User Name: system
                 Host: [local]
           Login Time: 2022-06-17 00:20:46.936437+08


This is your first time login.


The fail times between this login and the last login: 0


The password's expire time is not set.
3.2.2.6.3. 相关数据字典 ¶
  • 系统表 sys_audit_userlog

    用户的登录信息保存在系统表 sys_audit_userlog 中,管理员可查看所有用户的登录信息;

  • 系统视图 sys_user_audit_userlog

    普通用户可通过sys_user_audit_userlog查看本用户的登录信息。管理员查看最近登录的 10条信息。

    select * from sys_audlog.sys_user_audit_userlog order by audtimestamp desc limit 10;
    
  • 系统函数sys_del_user_logonlog_before_days

    超级管理员可删除指定天数之前的登录信息。例如,安全员删除30 天以前的用户登录信息:

    SELECT sys_audlog.sys_del_user_logonlog_before_days(30);
    
  • 系统函数sys_del_user_logonlog_by_ip

    超级管理员可删除指定 IP 地址的用户登录信息。例如,安全员删除IP 为 127.0.0.1的用户登录信息:

    SELECT sys_audlog.sys_del_user_logonlog_by_ip('127.0.0.1');
    
  • 系统函数sys_del_user_logonlog_by_name

    超级管理员可删除指定用户的登录信息。例如,安全员删除用户user1的登录信息:

    SELECT sys_audlog.sys_del_user_logonlog_by_name('user1');
    

另请参阅

了解更多系统表和视图参见《 KingbaseES数据库参考手册 》中的 静态数据词典视图 章节

了解更多用户登录信息系统函数参见《 KingbaseES插件参考手册 》中的 sys_audlog 章节

3.2.2.7. 口令历史管理 ¶

口令的历史检查是由数据库管理员对初次设定的口令或更改过的口令使用天数进行设置后,在修改用户口令时,自动对口令已使用天数进行相关方面的检查。如果口令不满足指定的条件,那么更改口令将不成功。

KingbaseES通过插件的方式来进行口令历史管理。这种方式更为灵活,当数据库的实用场景需要进行口令历史管理时,加载插件即可。而不需要该功能时,卸载插件即可。 KingbaseES中通过 2 个全局级参数配合插件来实现用户口令历史管理。详情参见插件 passwordhistory 。

3.2.2.7.1. 加载插件 ¶

修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库,创建插件并打开口令历史开关。

shared_preload_libraries = 'passwordhistory'

\c - system
create extension passwordhistory;

show passwordhistory.enable;
passwordhistory.enable
----------------------
off
(1 行记录)

alter system set passwordhistory.enable=on;

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

show passwordhistory.enable;
passwordhistory.enable
----------------------
on
(1 行记录)
3.2.2.7.2. 参数配置 ¶

口令历史管理参数如下表所示:

表 3.2.34 口令历史管理参数  ¶

参数名

取值范围

默认值

描述

passwordhistory.enable

true/false

false

口令历史功能开关,默认为关闭状态

passwordhistory.password_time

[0,INT_MAX]

0

口令历史天数,默认为0

示例如下:

\c - system

--打开开关
show passwordhistory.enable;
passwordhistory.enable
----------------------
off
(1 行记录)


alter system set passwordhistory.enable=on;

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

show passwordhistory.enable;
passwordhistory.enable
----------------------
on
(1 行记录)


--设置passwordhistory.password_time 口令历史天数,缺省为 0。
show passwordhistory.password_time;
passwordhistory.password_time
-------------------------------
0
(1 row)

alter system SET passwordhistory.password_time = 2;
call sys_reload_conf();
sys_reload_conf
-----------------
t
(1 row)

SHOW passwordhistory.password_time;
passwordhistory.password_time
-------------------------------
2
(1 row)

create user test with password '123';
alter user test with password '123';
ERROR: The password has been used recently.
3.2.2.8. 空闲自动断开连接 ¶
3.2.2.8.1. 功能开启 ¶

空闲自动断开连接参数如下表所示:

表 3.2.35 空闲自动断开连接参数  ¶

参数名

取值范围

默认值

描述

client_idle_timeout

[0,1800]

0

客户端最大空闲时间,单位是秒,超时需要重新连接。0为关闭功能。

3.2.2.8.2. 功能关闭 ¶

可以关闭功能:

  • 本进程关闭空闲自动断开连接功能

    set client_idle_timeout = 0;
    
  • 所有连接均关闭空闲自动断开连接功能

    alter system set client_idle_timeout = 0;
    
3.2.2.8.3. 示例 ¶

在功能开启后,用户或数据库管理员system登录数据库后,可直接设置空闲自动断开连接:

--普通用户设置当前连接空闲时间为5min
set client_idle_timeout = 300;

--数据库管理员system设置全局连接空闲时间为30min
alter system set client_idle_timeout = 1800;
select sys_reload_conf();

可通过show 命令,查看设置的参数值,例如:

show client_idle_timeout;
3.2.2.9. 弱口令扫描 ¶

弱口令扫描是由数据库管理员对弱口令字典进行配置后,既可以在创建或修改用户口令时对口令进行弱口令检查,也可以由数据库管理员进行对数据库用户口令的弱口令扫描。当创建或修改口令时口令未通过弱口令检查,则创建或修改口令将不成功;当数据库管理员进行弱口令扫描时,将所有口令强度符合弱口令字典配置的用户及其弱口令显示输出。

KingbaseES通过插件的方式来进行弱口令扫描。这种方式更为灵活,当数据库的实用场景需要进行弱口令扫描时,加载插件即可。而不需要该功能时,卸载插件即可。 KingbaseES中通过 1 个全局级参数配合插件来实现弱口令检查及扫描。详情参见插件 security_utils 。

3.2.2.9.1. 加载插件 ¶

修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库,创建插件并打开弱口令扫描开关。

shared_preload_libraries = 'security_utils'

\c - system
create extension security_utils;

show security_utils.weak_pwd_check_enable;
security_utils.weak_pwd_check_enable
------------------------------------
off
(1 行记录)

alter system set security_utils.weak_pwd_check_enable = on;

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

show security_utils.weak_pwd_check_enable;
security_utils.weak_pwd_check_enable
------------------------------------
on
(1 行记录)
3.2.2.9.2. 参数配置 ¶

弱口令扫描的参数如下表所示:

表 3.2.36 弱口令扫描参数  ¶

参数名

取值范围

默认值

描述

security_utils.weak_pwd_check_enable

true/false

false

弱口令检查功能,默认为关闭状态

3.2.2.9.3. 使用方法 ¶

弱口令字典配置语法:

--设置弱口令字典
set weak password [if not exists] 'wpwd1'[, 'wpwd2'...];
--删除弱口令字典
remove weak password [if exists] 'wpwd1'[, 'wpwd2'...];

说明:

  1. 可以同时创建或删除多个弱口令,使用方法见上配置语法。

  2. 弱口令字符串类型为text,不限制长度,且配置语法不限制弱口令个数。

  3. 当存在if not exists或if exists,将忽略已存在或不存在的弱口令,避免报错,否则会报错提示。

  4. 不允许输入的弱口令为null,例如 set weak password null。

  5. 输入的弱口令为空字符串时,例如 set weak password '',处理方法与第三点相同。

  6. 弱口令扫描支持三种口令加密方式,包括 sha256、md5、sm3 。

提示

1.当弱口令扫描与口令复杂度功能同时开启时,且检查的口令既属于弱口令,又不符合口令复杂度要求,报错提示的内容与两个功能的加载顺序相关,报错提示会显示写在 shared_preload_libraries 中靠前的插件的提示内容。

2.当数据库中已创建了弱口令扫描的扩展 security_utils ,请使用数据库管理员进行备份恢复以避免报错导致备份恢复失败。

3.V008R006C006B0021之前的版本,当使用sys_upgrade升级后无法正常使用弱口令功能时,请删除扩展并重新创建。

3.2.2.9.4. 示例 ¶

在功能开启后,数据库管理员system登录数据库后,可以进行弱口令字典的配置:

\c - system
set weak password '123qwe';--成功
set weak password '123qwe','1234asdf';--失败,重复弱口令报错
错误:  weak passwd dic "123qwe" already exists
set weak password if not exists '123qwe','1234asdf';--成功,忽略已存在的弱口令

--查看弱口令配置
select * from security_utils.weak_pwd_dic;
 weak_passwd |         created_time
-------------+-------------------------------
 123qwe      | 2022-08-01 15:11:21.102412+08
 1234asdf    | 2022-08-01 15:12:52.640116+08
(2 rows)

创建新用户u1,使用弱口令作为口令:

\c - system
create user u1 with password '123qwe';--失败,口令不符合弱口令检查
错误:  password is too weak!
create user u1 with password '123qwer';--成功
alter user u1 with password '123qwe';
错误:  password is too weak!--失败,口令不符合弱口令检查

数据库管理员进行弱口令扫描

\c - system
--将u1用户的口令设置为弱口令字典
set weak password '123qwer';

--进行弱口令扫描
select * from security_utils.weak_passwd_scan_result;
 username | weak_passwd
----------+-------------
 u1       | 123qwer
(1 row)

数据库管理员删除弱口令配置

\c - system
--查看现有弱口令配置
select * from security_utils.weak_pwd_dic;
 weak_passwd |         created_time
-------------+-------------------------------
 123qwe      | 2022-08-01 15:11:21.102412+08
 1234asdf    | 2022-08-01 15:12:52.640116+08
 123qwer     | 2022-08-01 15:22:12.404342+08
(3 rows)

--删除弱口令配置
remove weak password '123qwe';--成功
remove weak password '123qwe','1234asdf','123qwer';--失败,不存在的弱口令报错
错误:  weak passwd dic "123qwe" does not exists
remove weak password if exists '123qwe','1234asdf','123qwer';--成功,忽略不存在的弱口令

--查看弱口令字典
select * from security_utils.weak_pwd_dic;
 weak_passwd | created_time
-------------+--------------
(0 rows)
3.2.2.10. 来源限制 ¶

来源限制是由数据库管理员对要登录数据库的用户及IP进行设置,对于处于黑名单中的用户及IP,数据库将不允许登录。这里黑名单的优先级较高。

KingbaseES通过插件的方式来进行来源限制。这种方式更为灵活,当数据库的实用场景需要进行来源限制时,加载插件即可。而不需要该功能时,卸载插件即可。该插件默认加载。 KingbaseES中通过 1 个全局级参数配合插件来实现用户来源限制管理。该插件功能默认开启。详情参见插件 src_restrict 。

3.2.2.10.1. 加载插件 ¶

修改 kingbase.conf 文件中 shared_preload_libraries 参数后重启数据库,创建插件并打开来源限制开关。

shared_preload_libraries = 'src_restrict'

show src_restrict.enable;
src_restrict.enable
-------------------
on
(1 行记录)

alter system set  src_restrict.enable=off;
ALTER SYSTEM

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

show src_restrict.enable;
src_restrict.enable
-------------------
off
(1 行记录)
3.2.2.10.2. 参数配置 ¶

来源限制参数如下表所示:

表 3.2.37 来源限制参数  ¶

参数名

取值范围

默认值

描述

src_restrict.enable

true/false

true

来源限制开关,默认为开启状态

示例如下:

show src_restrict.enable;
src_restrict.enable
-------------------
on
(1 行记录)

alter system set  src_restrict.enable=off;
ALTER SYSTEM

select sys_reload_conf();
sys_reload_conf
-----------------
t
(1 行记录)

show src_restrict.enable;
src_restrict.enable
----------------------
off
(1 行记录)
3.2.2.10.3. 相关接口 ¶
  • 系统函数 src_restrict.add_rules

    src_restrict.add_rules(
    filter_type int,
    rule_user text,
    rule_ip text,
    outrule_ip text,
    limited_info text)
    

    功能说明:

    添加来源限制的规则,可通过参数选择配置白名单或黑名单。

    参数说明:

    filter_type

    限制规则的类型,0为白名单,1为黑名单。

    rule_user

    限制的用户名,多个用户时需使用逗号分隔,null表示限制所有用户。当用户名中存在特殊字符时,请将该用户名使用双引号括起来,避免用户名识别失败。

    用户名参数最大长度255。

    rule_ip

    限制的IP,多个IP之间需使用逗号分隔,null表示限制所有IP。

    允许使用*号进行IP网段匹配,但网段后不允许出现具体IP,例如192.168.*.123。

    outrule_ip

    不受限制的IP,与rule_ip相同。

    不受限制仅表示该参数与rule_ip的类型相反,例如filter_type为0,则rule_ip为白名单,outrule_ip为黑名单,不影响黑白名单优先级。

    limited_info

    限制规则,内容中包含IP段,mac地址,时间段,分别使用关键字ip_range、mac、time_range进行标识。

    关键字使用“=”号连接具体的规则内容,同一关键字内的内容,如果想输入多条,用“/”号连接,不同关键字之间用“;”号连接。填写格式为“ip_range=XXXXXX~XXXXXX/XXXXXX~XXXXXX;mac=XXXXX/XXXXX;time_range=XXXXXX~XXXXXX/XXXXXX~XXXXXX”。其中三个字段可以选择填写,也可以置空。

    返回值说明:

    无返回值

  • 系统函数 src_restrict.remove_rules

    src_restrict.remove_rules(
    filter_type int,
    rule_user text,
    rule_ip text,
    limited_info text)
    

    功能说明:

    删除来源限制的规则。

    参数说明:

    filter_type

    规则的类型,0为白名单,1为黑名单。

    rule_user

    规则的用户名,多个用户时需使用逗号分隔,null等于all。当用户名中存在特殊字符时,请将该用户名使用双引号括起来,避免用户名识别失败。

    用户名参数最大长度255。

    rule_ip

    规则的IP,只允许删除一个IP,不支持删除多个规则,null等于 0.0.0.0/0 

    允许使用*号进行IP网段匹配,但网段后不允许出现具体IP,例如 192.168.*.123 

    limited_info

    限制规则,内容中包含IP段,mac地址,时间段,分别使用关键字ip_range、mac、time_range进行标识。

    关键字使用“=”号连接具体的规则内容,同一关键字内的内容,如果想输入多条,用“/”号连接,不同关键字之间用“;”号连接。填写格式为“ip_range=XXXXXX~XXXXXX/XXXXXX~XXXXXX;mac=XXXXX/XXXXX;time_range=XXXXXX~XXXXXX/XXXXXX~XXXXXX”。其中三个字段可以选择填写,也可以置空。

    返回值说明:

    无返回值

    提示

    删除函数中,要删除的规则中类型,用户名(包括用户个数),规则IP都要与规则一一对应,否则将无法删除。

  • 系统视图 src_restrict.show_rules

    所有用户都可以通过该视图查看当前的限制规则。

    select * from src_restrict.show_rules;
    

    参数说明:

    filter_type

    规则的类型,allow为白名单,reject为黑名单。

    rule_user

    规则的用户名。

    rule_ip

    规则的IP。

    netmask

    规则IP对应的子网掩码。

    login_limited_info

    登录限制信息(包括IP段,mac地址,日期时间段)。

3.2.3. 用户的数据库身份验证 ¶

用户的数据库身份验证需要使用数据库本身中的信息来执行身份验证。

  • 关于数据库身份验证

    KingbaseES数据库可以使用存储在数据库本身中的信息对尝试连接到数据库的用户进行身份验证。

  • 数据库身份验证的优势

    使用数据库对用户进行身份验证具有三个优点。

  • 创建数据库认证的用户

    进行身份验证的用户创建由数据库进行身份验证的用户时,请为此用户分配一个密码口令。

3.2.3.1. 关于数据库身份验证 ¶

KingbaseES数据库可以使用存储在数据库本身中的信息来验证尝试连接到数据库的用户。要将数据库配置为使用数据库身份验证,您必须为每个用户创建一个关联的密码口令。用户名可以使用国家语言支持字符格式,但密码中不能包含双引号字符。用户在尝试建立连接时必须提供此用户名和密码口令。

KingbaseES数据库口令独立于操作系统用户口令。每个数据库用户的口令被存储在sys_authid系统目录中。口令在创建用户时使用CREATE USER PASSWORD语句指定,也可以使用ALTER USER PASSWORD语句来修改用户口令。例如,CREATE ROLE foo WITH LOGIN PASSWORD 'secret' ,或者使用ksql的password命令。如果没有为一个用户设置口令,那么存储的口令为空并且对该用户的口令认证总会失败。

要查找任何给定用户的密码版本列表,请查询 DBA_USERS 视图的 password_versions 列:

SELECT username, password_versions FROM DBA_USERS;

username |password_versions |
---------+------------------+
system   |V008R006          |
sao      |V008R006          |
sso      |V008R006          |
3.2.3.2. 数据库身份验证的优势 ¶

使用数据库对用户进行身份验证具有三个优势:

  • 用户帐户和所有身份验证均由数据库控制,不依赖数据库之外的任何东西。

  • KingbaseES数据库提供强大的密码管理功能,以增强使用数据库身份验证时的安全性。

  • 当用户数据量较少时,管理起来会更容易。

3.2.3.3. 创建数据库认证的用户 ¶

当您创建一个由数据库验证的用户时,需要为该用户设置一个密码口令。要创建由数据库验证的用户,请在创建用户时包含PASSWORD子句。

例如,以下 SQL 语句创建一个由KingbaseES数据库识别和验证的用户u1。 使用u1连接到数据库时必须指定密码。

CREATE USER u1  PASSWORD '12345';

3.2.4. 用户的网络身份验证 ¶

您可以通过将传输层安全性与第三方服务结合使用,通过网络对用户进行身份验证。

  • 使用传输层安全性

    支持强化身份鉴别与SSL安全传输相结合

  • 使用第三方服务

    支持第三方服务Kerberos、RADIUS、LDAP 认证协议和CA等技术通过网络对KingbaseES数据库进行身份验证。

另请参阅

了解更多可参考 强身份验证文章来源地址https://www.toymoban.com/news/detail-787558.html

3.2.4.1. 使用传输层安全性进行身份验证 ¶

KingbaseES 本地支持使用SSL 连接加密客户端/服务器通信以提高安全性。通过强化身份鉴别与SSL 安全传输相结合,KingbaseES 建立了服务器与客户端的可信路径安全通道,实现了双向可信认证,杜绝假冒用户身份或者假冒数据库服务器的恶意行为,并进一步防范这些恶意行为可能引发 的重放攻击。

3.2.4.2. 使用第三方服务进行身份验证 ¶

KingbaseES 还支持基于Kerberos、Radius、LDAP 认证协议和CA等技术在内的与第三方身份认证产品相结合的外部统一身份鉴别或集中化身份认证方式。如果要通过网络对数据库用户进行身份验证,则必须使用第三方网络身份验证服务。

3.2.5. 用户的客户端认证 ¶

当一个客户端应用连接一个数据库服务器时,它将指定以哪个KingbaseES数据库用户名连接,就像我们以一个特定用户登录一台 Unix 计算机一样。在SQL 环境中,活动的数据库用户名决定对数据库对象的访问权限 ,详见 数据库角色 。因此,它本质上是哪些数据库用户可以连接。

注意

如 数据库角色 中所释,KingbaseES实际上以“角色”来进行权限管理。

认证是数据库服务器建立客户端身份的过程,并且服务器决定客户端应用(或者运行客户端应用的用户)是否被允许以请求的数据库用户名来连接。

KingbaseES提供多种不同的客户端认证方式。被用来认证一个特定客户端连接的方法可以基于(客户端)主机地址、数据库和用户来选择。

KingbaseES数据库用户名在逻辑上是和服务器运行的操作系统中的用户名相互独立的。如果一个特定服务器的所有用户在那台服务器的机器上也有帐号,那么分配与操作系统用户名匹配的数据库用户名是有意义的。不过,一个接受远程连接的服务器可能有许多没有本地操作系统帐号的用户,并且在这种情况下数据库用户和操作系统用户名之间不必有任何联系。

另请参阅

了解更多可参考 强身份验证

到了这里,关于Kingbase安全之身份验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • windows远程连接出现身份验证错误,要求的函数不受支持,这可能是由于credssp加密数据库修正解决办法

    第一种解决办法 WIN+R 运行 gpedit.msc: 本地组策略: 计算机配置管理模板系统凭据分配加密数据库修正 选择启用并选择易受攻击。 第二种解决办法 WIN+R,运行gpedit.msc 打开注册表,进入下面路径 HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionPoliciesSystemCredSSPParameters 右击Sy

    2024年02月16日
    浏览(48)
  • 【Kingbase8数据库】springboot jpa集成Kingbase8各种报错

    Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set 去了stackoverflow: java - Spring Boot JPA - Access to DialectResolutionInfo cannot be null when ‘hibernate.dialect’ not set - Stack Overflow 不是PostgreSQL,那就换成mysql的嘛: spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Kingbase8Dialect Co

    2024年02月12日
    浏览(47)
  • 【金仓数据库】kingbase ES性能提升之传输压缩

    数据库应用场景复杂且多样,本文介绍金仓数据库在网络条件较差(小于10MB/s)场景,提供传输压缩特性进行性能提升。 当应用需要并发查询大量结果集时,容易出现网络资源争用问题。造成服务端CPU空闲而网络繁忙的状况,因为大结果集需要占用非常多的网络带宽,从而导

    2023年04月11日
    浏览(49)
  • Python数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件

    在Python中,数据权限的管理通常涉及到几个关键组件:身份验证,、授权和访问控制。这通常是通过使用数据库、ORM(对象关系映射)框架、API框架和中间件等技术来实现的。以下是一些建议的步骤和工具,用于在Python项目中实施数据权限管理: 用户身份验证: 使用如Djan

    2024年04月26日
    浏览(43)
  • Mysql迁移至KingBase(金仓数据库)避坑指南-Java版

            最近因为项目国产化需要,需要将Mysql数据库适配到金仓数据库中,就此给大家分享一下我的采坑过程。如有错误。恳请指正! 官网地址 人大金仓-成为世界卓越的数据库产品与服务提供商 金仓社区 金仓社区-数据库使用者、DBA开发人员、数据化经营者已入驻 安装

    2024年02月10日
    浏览(69)
  • Spring Boot整合JPA和人大金仓(Kingbase8)数据库

    在开发Java应用程序时,使用JPA(Java Persistence API)可以方便地进行数据库操作。而人大金仓(Kingbase8)是一款基于国产化研发的关系型数据库。本文将介绍如何在Spring Boot项目中整合JPA和人大金仓数据库,并提供相关实例来演示使用方式。 在开始之前,请确保已经满足以下条

    2024年02月12日
    浏览(44)
  • Cause: com.github.pagehelper.PageException: 无法自动获取数据库类型,请通过 helperDialect 参数指定! kingbase数据库

    目录 1.业务背景 2.解决方案 3.相关资料         现在政府项目要求国产化,数据库使用的是kingbase,在使用mybatis 分页插件的时候,遇到Cause: com.github.pagehelper.PageException: 无法自动获取数据库类型,请通过 helperDialect 参数指定! kingbase数据库。         方法很简单,人家也告诉

    2024年02月03日
    浏览(39)
  • 数据库与身份认证

    能够知道如何配置MySQL数据库环境 能够认识并使用常见的SQL语句操作数据库 能够在Express中操作MySQL数据库 能够了解Session的实现原理 能够了解JWT的实现原理 数据库的概念 安装并配置MySQL MySQL的基本使用 在Express中操作MySQL 前后端的身份认证 数据库(database)是用来 阻止、存储和

    2024年02月10日
    浏览(44)
  • Oracle连接数据库提示 ORA-12638:身份证明检索失败

    ORA-12638 是一个 Oracle 数据库的错误代码,它表示身份验证(认证)检索失败。这通常与数据库连接相关,可能由于以下几个原因之一引起: 错误的用户名或密码: 提供的数据库用户名或密码不正确,导致身份验证失败。 配置问题: 数据库配置文件(如 sqlnet.ora 或 listener.o

    2024年02月13日
    浏览(66)
  • 数据库sql 根据身份证计算年龄段mysql、oracle

    mysql: mysql通过函数可以精确到日 结果: Oracle: oracle只是年份相减,不够精确 结果:

    2024年02月12日
    浏览(63)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包