官方来源:https://www.oceanbase.com/docs/common-oceanbase-database-cn-1000000000218720
适用范围:OceanBase V4.2.1 及以上企业版 Oracle 模式租户
OceanBase 数据库通过 User Profile(用户配置文件)实现登录失败锁定功能,核心目的是防止暴力密码破解攻击,提升数据库安全性。
Profile 通过4个密码相关参数管控登录与密码策略,前两项为登录锁定核心参数:
| 参数名 | 含义 | 单位 | 默认值(DEFAULT Profile) |
|---|---|---|---|
| FAILED_LOGIN_ATTEMPTS | 连续登录失败的最大次数,达到后锁定用户 | 次 | UNLIMITED(无限制) |
| PASSWORD_LOCK_TIME | 用户被锁定的时长 | 天 | UNLIMITED(一直锁定) |
| PASSWORD_LIFE_TIME | 密码的有效使用天数 | 天 | UNLIMITED(一直有效) |
| PASSWORD_GRACE_TIME | 密码过期后的宽限期,期间仍可登录 | 天 | UNLIMITED(无宽限期) |
DEFAULT Profile;UNLIMITED,无登录锁定、密码过期策略,生产环境必须修改;UNLIMITED(无限制)、
DEFAULT(继承默认配置)。CREATE PROFILE 系统权限;ALTER USER 系统权限。
-- 语法模板
CREATE PROFILE
"profile_name"
LIMIT
FAILED_LOGIN_ATTEMPTS {
integer |
UNLIMITED |
DEFAULT}
PASSWORD_LOCK_TIME {
integer |
UNLIMITED |
DEFAULT}
[PASSWORD_LIFE_TIME {
integer |
UNLIMITED |
DEFAULT}]
[
PASSWORD_GRACE_TIME {
integer |
UNLIMITED |
DEFAULT}];
-- 示例1:连续失败5次,自动锁定1天
CREATE PROFILE
"sec_profile_5_1"
LIMIT
FAILED_LOGIN_ATTEMPTS
5
PASSWORD_LOCK_TIME
1;
-- 示例2:连续失败3次,一直锁定账号
CREATE PROFILE
"sec_profile_3_perm"
LIMIT
FAILED_LOGIN_ATTEMPTS
3
PASSWORD_LOCK_TIME
UNLIMITED;
-- 查询全部密码类Profile配置
SELECT PROFILE, RESOURCE_NAME,
LIMIT
FROM DBA_PROFILES
WHERE RESOURCE_TYPE =
'PASSWORD'
ORDER
BY PROFILE, RESOURCE_NAME;
-- 单独查看指定Profile详情
SELECT *
FROM DBA_PROFILES
WHERE PROFILE =
'SEC_PROFILE_5_1'
AND RESOURCE_TYPE =
'PASSWORD';
-- 语法模板
CREATE
USER
"user_name"
IDENTIFIED
BY
"password" PROFILE
"profile_name";
-- 实操示例
CREATE
USER
"app_user"
IDENTIFIED
BY
"App@20240605" PROFILE
"sec_profile_5_1";
-- 授予基础会话权限
GRANT
CREATE
SESSION,
CREATE
TABLE
TO
"app_user";
-- 语法模板
ALTER
USER
"user_name" PROFILE
"profile_name";
-- 实操示例
ALTER
USER
"old_user" PROFILE
"sec_profile_5_1";
> 注意:修改用户Profile仅对后续新会话生效,不影响已建立的长连接。
ERROR 5039 (01007): User locked
SELECT USERHOST, FAILED_ATTEMPTS
FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
等待
PASSWORD_LOCK_TIME 时长到期,账号自动恢复。
-- 语法模板
ALTER
USER
"user_name"
ACCOUNT
UNLOCK;
-- 示例
ALTER
USER
"app_user"
ACCOUNT
UNLOCK;
> 重要限制:已经锁定的账号,修改Profile参数无法自动解锁,必须执行上面语句。
-- 语法模板
ALTER PROFILE
"profile_name"
LIMIT
FAILED_LOGIN_ATTEMPTS {new_value}
PASSWORD_LOCK_TIME {new_value};
-- 示例:失败次数改为3次,锁定时长改为7天
ALTER PROFILE
"sec_profile_5_1"
LIMIT
FAILED_LOGIN_ATTEMPTS
3
PASSWORD_LOCK_TIME
7;
> 注意:修改Profile只对新会话生效,不会自动解锁已经锁定的用户。
关闭无限制策略,统一基线:
ALTER PROFILE
"DEFAULT"
LIMIT
FAILED_LOGIN_ATTEMPTS
5
PASSWORD_LOCK_TIME
1
PASSWORD_LIFE_TIME
90
PASSWORD_GRACE_TIME
7;
定时查询失败登录视图,及时发现暴力破解行为:
SELECT USERHOST, FAILED_ATTEMPTS
FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS;
严格收紧
ALTER USER 权限,仅少量运维管理员拥有账号解锁权限。
问题1:账号已经锁定,修改Profile锁定时长,账号依旧无法自动解锁
原因:Profile配置变更只对未来生效,不处理已经锁定的存量账号
解决:执行
ALTER USER 用户名 ACCOUNT UNLOCK; 手动解锁
问题2:配置
FAILED_LOGIN_ATTEMPTS=5,输错6次才触发锁定
原因:失败计数从0开始,累计5次失败达到阈值,第6次登录才会返回账号锁定报错
问题3:DBA_PROFILES 中看到 PASSWORD_LOCK_TIME 值为
86400000000
原因:该数字是
UNLIMITED 在数据库内部的存储值,属于正常现象,无需处理。
如果在操作过程中遇到问题,欢迎在评论区留言交流,后续我们会持续分享更多实战运维干货,记得
关注不迷路,下次见~
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/70047467/viewspace-3175972/ ,如需转载,请注明出处,否则将追究法律责任。