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

KCP 模拟题练习 19 - 帐户异常登录锁定

原创 Lucifer三思而后行 2024-10-12
148

【单选题】哪个参数可以设置用户被锁定时长,若用户被锁定的时长超过了该参数,则该用户可自动解锁?

  • sys_audlog.error_user_connect_times
  • sys_audlog.error_user_interval
  • sys_audlog.error_user_connect_interval
  • sys_audlog.error_sys_interval

解题思路:

帐户异常登录锁定

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

KingbaseES 通过插件的方式来进行帐户异常登录锁定以及账户登录信息显示。这种方式更为灵活,当数据库的实用场景需要进行帐户异常登录锁定以及账户登录信息显示时,加载插件即可。而不需要该功能时,卸载插件即可。

插件名为 sys_audlog

加载插件

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

shared_preload_libraries = 'sys_audlog' create extension sys_audlog;

参数配置

sys_audlog.error_user_connect_times

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

设置密码连续最大失败次数为 10:

ALTER SYSTEM SET sys_audlog.max_error_user_connect_times = 10; CALL sys_reload_conf();

sys_audlog.max_error_user_connect_times

用户登录失败次数的最大值界限,error_user_connect_times的最大取值,取值范围为[0,INT_MAX],缺省为 2147483647。

设置密码连续最大失败次数为 6:

ALTER SYSTEM SET sys_audlog.error_user_connect_times = 6; CALL sys_reload_conf();

sys_audlog.error_user_connect_interval

用户被锁定时间,若用户被锁定的时间超过了该参数,则该用户可自动解锁。单位是分钟,取值范围为[0,INT_MAX],缺省为 0。

设置被封锁用户的自动解封时间为 1 小时:

ALTER SYSTEM SET sys_audlog.error_user_connect_interval = 60; CALL sys_reload_conf();

演示

在 kingbaseES 数据库中加载插件 sys_audlog:

## 检查当前 kes 是否配置 sys_audlog 插件 [kingbase@kes:/data]$ cat kingbase.conf | grep shared_preload_libraries shared_preload_libraries = 'liboracle_parser, synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, ora_commands,kdb_ora_expr, sepapower, dblink, sys_kwr, sys_spacequota, sys_stat_statements, backtrace, kdb_utils_function, auto_bmr, sys_squeeze, src_restrict' ## 未加载插件 sys_audlog [kingbase@kes:/data]$ cat kingbase.conf | grep shared_preload_libraries | grep sys_audlog [kingbase@kes:/data]$ ## 修改 kingbase.conf 文件中 shared_preload_libraries 参数,加入 sys_audlog [kingbase@kes:/data]$ vi kingbase.conf ## 加入以下内容,sys_audlog 要拼接在 shared_preload_libraries 参数值中,以逗号分开 shared_preload_libraries = 'sys_audlog' ## 再次查看 kingbase.conf 文件 [kingbase@kes:/data]$ cat kingbase.conf | grep shared_preload_libraries | grep sys_audlog shared_preload_libraries = 'liboracle_parser, synonym, plsql, force_view, kdb_flashback,plugin_debugger, plsql_plugin_debugger, plsql_plprofiler, ora_commands,kdb_ora_expr, sepapower, dblink, sys_kwr, sys_spacequota, sys_stat_statements, backtrace, kdb_utils_function, auto_bmr, sys_squeeze, src_restrict, sys_audlog' ## 重启数据库生效 [kingbase@kes:/home/kingbase]$ sys_ctl restart sys_ctl: PID 文件 "/data/kingbase.pid" 不存在 服务器进程是否正在运行? 尝试启动服务器进程 等待服务器进程启动 ....2024-10-11 16:53:53.881 CST [3949] 日志: sepapower extension initialized 2024-10-11 16:53:53.885 CST [3949] 日志: 正在启动 KingbaseES V008R006C007B0024 on x86_64-pc-linux-gnu, compiled by gcc (GCC) 4.8.5 20150623 (Red Hat 4.8.5-28), 64-bit 2024-10-11 16:53:53.885 CST [3949] 日志: 正在监听IPv4地址"0.0.0.0",端口 54321 2024-10-11 16:53:53.885 CST [3949] 日志: 正在监听IPv6地址"::",端口 54321 2024-10-11 16:53:53.886 CST [3949] 日志: 在Unix套接字 "/tmp/.s.KINGBASE.54321"上侦听 2024-10-11 16:53:53.985 CST [3949] 日志: 日志输出重定向到日志收集进程 2024-10-11 16:53:53.985 CST [3949] 提示: 后续的日志输出将出现在目录 "sys_log"中. 完成 服务器进程已经启动

在数据库中创建 sys_audlog:

test=# create extension sys_audlog; CREATE EXTENSION

使用 sso 用户设置被封锁用户的自动解封时间为 1 分钟:

test=> \conninfo 以用户 "sso" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test" test=> ALTER SYSTEM SET sys_audlog.error_user_connect_interval = 1; ALTER SYSTEM test=> CALL sys_reload_conf(); sys_reload_conf ----------------- t (1 行记录) test=> show sys_audlog.error_user_connect_interval ; sys_audlog.error_user_connect_interval ---------------------------------------- 1 (1 行记录)

📢注意:这个需要在 sso 用户进行设置,否则会报错没有权限:

test=# \conninfo 以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test" test=# ALTER SYSTEM SET sys_audlog.error_user_connect_interval = 1; 错误: 权限不够

关于 sso 用户没有密码以及本地免密认证登录的方式可以参考:《KingbaseES KSQL 免密登录的几种方式》

使用 sso 用户设置密码连续最大失败次数为 3:

test=> ALTER SYSTEM SET sys_audlog.error_user_connect_times = 3; ALTER SYSTEM test=> CALL sys_reload_conf(); sys_reload_conf ----------------- t (1 行记录) test=> show sys_audlog.error_user_connect_times; sys_audlog.error_user_connect_times ------------------------------------- 3 (1 行记录)

创建一个用户:

test=# \conninfo 以用户 "system" 的身份,通过套接字"/tmp"在端口"54321"连接到数据库 "test" test=# create user lucifer with password 'lucifer'; CREATE ROLE

多次不使用密码连接用户,模拟登录失败:

[kingbase@kes:/home/kingbase]$ ksql -U lucifer -W test -p 54321 -h 127.0.0.1 口令: ksql: 错误: 无法连接到服务器:致命错误: password authentication failed for user "lucifer" NOTICE: This is the 1 login failed. There are 2 left. [kingbase@kes:/home/kingbase]$ ksql -U lucifer -W test -p 54321 -h 127.0.0.1 口令: ksql: 错误: 无法连接到服务器:致命错误: password authentication failed for user "lucifer" NOTICE: This is the 2 login failed. There are 1 left. [kingbase@kes:/home/kingbase]$ ksql -U lucifer -W test -p 54321 -h 127.0.0.1 口令: ksql: 错误: 无法连接到服务器:致命错误: The user "lucifer" is locked.please wait 1 minutes to retry

可以发现,用户输错密码连接 3 次之后,用户直接锁定 1 分钟,等待 1 分钟后,我们再次尝试输入密码:

# 如果输入的密码还是错误的,会再次锁定 1 分钟 [kingbase@kes:/home/kingbase]$ ksql -U lucifer -W test -p 54321 -h 127.0.0.1 口令: ksql: 错误: 无法连接到服务器:致命错误: The user "lucifer" is locked.please wait 1 minutes to retry

又等待 1 分钟后,输入正确的密码:

[kingbase@kes:/home/kingbase]$ ksql -U lucifer -W test -p 54321 -h 127.0.0.1 口令: ksql (V8.0) 输入 "help" 来获取帮助信息. test=> \conninfo 以用户 "lucifer" 的身份, 在主机"127.0.0.1", 端口"54321"连接到数据库 "test"

可以正常登录。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论