身份标识与鉴别功能用于对登录数据库访问数据的用户进行身份验证,确认该用户是否能够与某一个数据库用户进行关联,并根据关联的数据库用户的权限,对该用户在数据库中的数据访问活动进行安全控制。OceanBase 同时支持了 MySQL 和 Oracle 两种模式的身份鉴别功能。
MySQL 模式
身份鉴别
MySQL 中,一个 user 由 user_name 和 host 共同体组成。使用下列语句创建 3 个具有相同用户名的用户的示例如下:
create user 'u1'@'%' identified by '123';
create user 'u1'@'1.1.1.1' identified by '111';
create user 'u1'@'2.2.2.2' identified by '222';
用户登录时,OBServer 会根据 user_name、client_ip、password 匹配,来控制用户登录。
密码复杂度
为了防止恶意的密码攻击,OceanBase 数据库用户可以根据需要设置密码的复杂度函数,验证用户登录身份,来提升数据库的安全性。
MySQL 模式下,用户可以通过设置一系列系统变量规定密码复杂度规则,这些配置是租户级的。创建用户或修改用户的密码时会根据系统变量的配置对密码进行校验,未通过校验则会报错。涉及的系统变量如下表所示:
| 变量名 | 功能 | 使用说明 |
|---|---|---|
| validate_password_check_user_name | 检查用户密码,是否可以和用户名相同 | 当为 on 时,代表用户密码不可以和用户名相同。 |
| validate_password_length | 设置用户密码最小长度 | - |
| validate_password_mixed_case_count | 设置用户密码至少包含的大写字母和小写字母个数 | - |
| validate_password_number_count | 设置用户密码至少包含的数字个数 | - |
| validate_password_policy | 设置密码检查策略 |
|
| validate_password_special_char_count | 用户密码至少包含的特殊字符个数 | - |
登录失败处理
OceanBase 数据库会锁定多次登录失败的用户,主要目的在于防止恶意的密码攻击,保护数据库,提升数据库的安全性。
MySQL 模式下,使用系统变量 connection_control_failed_connections_threshold 来指定用户错误登录尝试的阀值。该变量是租户级的,为整数类型,取值范围为 [0,2147483647],默认值为 0。当用户将参数设置为 0 时表示关闭该功能,即不对用户的错误登录尝试进行处理。当用户错误登录次数超过这个变量定义的值之后,会对账户进行锁定,锁定的时间参考下面的两个参数设置。
connection_control_min_connection_delay:指定了超过错误登录次数阀值之后的第一次错误锁定账户的时长。之后的第二次错误登录的锁定时长为min( connection_control_min_connection_delay+1000,1000* trunc ( connection_control_min_connection_delay/1000,0 ))。再之后每次错误登录的锁定时间都在原来的基础上再加 1000 毫秒( 1 秒)。connection_control_max_connection_delay:指定了错误链接锁定时长的最大值,当时长达到这个最大值之后就不再增长。
Oracle 模式
身份鉴别
Oracle 模式中,用户名称在租户内是唯一的,不同租户的用户可以同名,所以通过用户名@租户名的形式在系统全局唯一确定一个用户。
密码复杂度
为了防止恶意的密码攻击,OceanBase 数据库用户可以根据需要设置密码的复杂度函数,验证用户登录身份,来提升数据库的安全性。
Oracle 模式下,用户可以使用 Profile 中的 PASSWORD_VERIFY_FUNCTION 属性来验证密码复杂度是否符合要求。用户需要先创建一个用于校验密码复杂度的 PL Function,需要满足如下接口:
FUNCTION verify_function (username IN VARCHAR2,
password IN VARCHAR2,
old_password IN VARCHAR2)
RETURN BOOLEAN;
创建用户或修改密码时,会调用该校验函数,根据函数执行结果来判断新密码是否符合复杂度要求。
登录失败处理
OceanBase 数据库会锁定多次登录失败的用户,主要目的在于防止恶意的密码攻击,保护数据库,提升数据库的安全性。
Oracle 模式利用 User Profile 实现用户锁定功能。User Profile 的密码提供两个参数,来实现连续登录失败后锁定用户:
failed_login_attempts:连续登录失败的次数。
password_lock_time:锁定时间,单位为天。




