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. 参数配置 ¶
口令复杂度管理参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
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. 参数配置 ¶
口令有效期参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
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. 参数配置 ¶
帐户异常登录锁定相关参数参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
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;
注意
解锁时需要注意以下两点:
-
超过时间间隔后自动解锁用户需要登录成功,若达到解锁时间后重新登录且再次失败,用户会继续锁定。
-
登录时若不加-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. 参数配置 ¶
登录信息显示参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
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_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. 参数配置 ¶
口令历史管理参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
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. 功能开启 ¶
空闲自动断开连接参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
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. 参数配置 ¶
弱口令扫描的参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
---|---|---|---|
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'...];
说明:
-
可以同时创建或删除多个弱口令,使用方法见上配置语法。
-
弱口令字符串类型为text,不限制长度,且配置语法不限制弱口令个数。
-
当存在if not exists或if exists,将忽略已存在或不存在的弱口令,避免报错,否则会报错提示。
-
不允许输入的弱口令为null,例如 set weak password null。
-
输入的弱口令为空字符串时,例如 set weak password '',处理方法与第三点相同。
-
弱口令扫描支持三种口令加密方式,包括 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. 参数配置 ¶
来源限制参数如下表所示:
参数名 | 取值范围 | 默认值 | 描述 |
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数据库进行身份验证。
另请参阅
了解更多可参考 强身份验证
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数据库用户名在逻辑上是和服务器运行的操作系统中的用户名相互独立的。如果一个特定服务器的所有用户在那台服务器的机器上也有帐号,那么分配与操作系统用户名匹配的数据库用户名是有意义的。不过,一个接受远程连接的服务器可能有许多没有本地操作系统帐号的用户,并且在这种情况下数据库用户和操作系统用户名之间不必有任何联系。
另请参阅
了解更多可参考 强身份验证