首批通过分布式安全可靠测评,为关键业务系统打造
登录失败处理
更新时间:2026-02-12 15:03:20
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 语句的配置文件所做的更改仅影响其后续会话中的用户,而不影响其当前会话中的用户。