首批通过分布式安全可靠测评,为关键业务系统打造
登录失败处理
更新时间:2026-07-16 19:52:04
OceanBase 数据库会锁定多次登录失败的用户,主要目的在于防止恶意的密码攻击,保护数据库,提升数据库的安全性。
OceanBase 数据库的 Oracle 模式利用 User Profile 实现用户锁定功能。
功能适用性
本文档仅适用于 OceanBase 数据库 Oracle 模式。目前 OceanBase 数据库社区版仅提供了 MySQL 模式,有关 MySQL 模式下的登录失败处理,参见 登录失败处理。
概念介绍
Profile 文件是限制数据库用户使用的资源的一种手段。在 OceanBase 数据库的 Oracle 模式中,Profile 文件主要用来控制用户的登录验证策略。通过使用用户的 Profile 文件,可以实现用户的锁定功能。
Profile 文件对密码提供了两个参数来实现连续登录失败后锁定用户:
- failed_login_attempts:连续登录失败的次数。
- password_lock_time:锁定时间,单位为天。
用户被锁定后,其锁定和解锁策略如下:
- 用户锁定:每次因密码不正确登录失败,如果检查失败次数达到阈值,则触发锁定用户。
- 用户解锁:如果登录用户被锁定,再次登录时,系统会检查锁定时间,如果锁定时间已达到,系统会进行解锁,然后重新尝试登录。如果锁定时间未到,系统会报错,您也可以利用 SQL 语句解锁用户。
实现方式
管理员可以通过创建 Profile 并将其应用给用户的方式来实现用户密码的失败处理。主要包含以下两步:
创建 Profile。
您可以通过
CREATE PROFILE语句创建 Profile,并指定用户连续登录失败的次数及对应的锁定时间。SQL 语句如下:
CREATE PROFILE "profile_name" LIMIT { FAILED_LOGIN_ATTEMPTS | PASSWORD_LOCK_TIME | PASSWORD_LIFE_TIME | PASSWORD_GRACE_TIME } { integer | UNLIMITED | DEFAULT };语句说明:
执行该语句需要具备
CREATE PROFILE权限。FAILED_LOGIN_ATTEMPTS:用于指定连续登录用户帐户失败的次数。如果不指定该参数,则默认使用
DEFAULTProfile 的限制,默认DEFAULTProfile 中该参数的值为UNLIMITED,表示连续登录用户帐户失败的次数无限制。PASSWORD_LOCK_TIME:当连续登录失败次数达到阈值后,用于指定用户帐户被锁定的天数。如果不指定该参数,则默认使用
DEFAULTProfile 的限制,默认DEFAULTProfile 中该参数的值为UNLIMITED,表示不限制用户锁定的天数。PASSWORD_LIFE_TIME:用于指定同一密码可用于身份验证的有效天数。如果不指定该参数,则默认使用
DEFAULTProfile 的限制,默认DEFAULTProfile 中该参数的值为UNLIMITED,表示不限制同一密码可用于身份验证的天数。PASSWORD_GRACE_TIME:当达到身份验证的有效天数后,系统会发出警告,该参数用于指定发出警告后仍允许用户账户登录的宽限期天数。如果不指定该参数,则默认使用
DEFAULTProfile 的限制,默认DEFAULTProfile 中该参数的值为UNLIMITED,表示不限制用户登录的天数。integer | UNLIMITED | DEFAULT:用于指定参数值的取值范围,其中:integer表示整数。UNLIMITED表示没有为该参数设置限制。DEFAULT表示使用DEFAULTProfile 的限制。
更多
CREATE PROFILE语句的详细信息,参见 CREATE PROFILE。应用 Profile 至用户。
应用 Profile 至用户主要有以下两种场景:
在创建用户时,直接指定已创建的 Profile 文件。
SQL 语句如下:
obclient> CREATE USER user_name IDENTIFIED BY password PROFILE {"profile_name" | default};如果在创建用户时未指定 Profile,则默认使用
DEFAULTProfile。DEFAULTProfile 的配置可以通过系统视图DBA_PROFILES查看。更多
CREATE USER语句的详细信息,参见 CREATE USER。如果用户已创建,则可以通过修改用户的 Profile 文件将已创建的 Profile 文件应用至用户。
SQL 语句如下:
obclient> ALTER USER user_name PROFILE {"profile_name" | default};更多
ALTER USER语句的详细信息,参见 ALTER USER。
操作示例
使用
SYS用户登录集群的 Oracle 租户。obclient -usys@oracle -h127.1 -P2881 - P*******创建 Profile 并设置连续错误登录策略。
创建名为
userprof1的 Profile,连续错误登录 5 次即锁定一天。obclient> CREATE PROFILE "userprof1" LIMIT FAILED_LOGIN_ATTEMPTS 5 PASSWORD_LOCK_TIME 1;完成后,可以执行以下语句,确认设置是否成功。
obclient> SELECT * FROM DBA_PROFILES; +-----------+--------------------------+---------------+-------------+ | PROFILE | RESOURCE_NAME | RESOURCE_TYPE | LIMIT | +-----------+--------------------------+---------------+-------------+ | DEFAULT | FAILED_LOGIN_ATTEMPTS | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_GRACE_TIME | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_LIFE_TIME | PASSWORD | UNLIMITED | | DEFAULT | PASSWORD_LOCK_TIME | PASSWORD | 86400000000 | | DEFAULT | PASSWORD_VERIFY_FUNCTION | PASSWORD | NULL | | userprof1 | FAILED_LOGIN_ATTEMPTS | PASSWORD | 5 | | userprof1 | PASSWORD_GRACE_TIME | PASSWORD | DEFAULT | | userprof1 | PASSWORD_LIFE_TIME | PASSWORD | DEFAULT | | userprof1 | PASSWORD_LOCK_TIME | PASSWORD | 86400000000 | | userprof1 | PASSWORD_VERIFY_FUNCTION | PASSWORD | DEFAULT | +-----------+--------------------------+---------------+-------------+ 10 rows in set创建用户,并指定 Profile。
obclient> CREATE USER secuser IDENTIFIED BY ****** PROFILE "userprof1"; obclient> GRANT all privileges ON *.* to secuser;验证设置结果。
当连续输入 5 次错误密码时,用户会被锁定一天。
$ obclient -h127.1 -P2881 -usecuser@oracle -p*******; obclient: [Warning] Using a password on the command line interface can be insecure. ERROR 5039 (01007): User locked使用
sys用户登录到数据库的sys租户,查看失败登录信息。obclient> SELECT * FROM information_schema.CONNECTION_CONTROL_FAILED_LOGIN_ATTEMPTS; +-------------+-----------------+ | USERHOST | FAILED_ATTEMPTS | +-------------+-----------------+ | 'test'@'%' | 5 | +-------------+-----------------+ 1 row in set (0.005 sec)解锁用户。
注意
解锁用户的操作一般由管理员完成,普通用户如果需要执行锁定和解锁操作,必须具备全局的
ALTER USER权限。关于查看用户权限和授权的相关操作,参见 查看用户权限 和直接授予权限。obclient> ALTER USER secuser ACCOUNT UNLOCK;
修改登录失败处理策略
对于已经创建好的 Profile 可以通过 ALTER PROFILE 语句进行修改。
更多 ALTER PROFILE 语句的详细信息,参见 ALTER PROFILE。
注意
对于已经被锁定的用户无法通过 ALTER PROFILE 语句修改 FAILED_LOGIN_ATTEMPTS 的方式来进行解锁。对带有 ALTER PROFILE 语句的配置文件所做的更改仅影响其后续会话中的用户,而不影响其当前会话中的用户。