KingbaseES 与 Oracle 用户口令管理与资源管理
一、概述
KingbaseES可以对用户口令与用户占用资源进行必要的管理。其管理方式,在这里与Oracle数据库进行参考比较。
KingbaseES 使用扩展插件建立的系统参数,这组参数可以对数据库资源使用进行限制。
口令有效期,单位是天,0表示无限,默认值是 30
ALTER SYSTEM SET identity_pwdexp.password_change_interval = 7;
Oracle 使用CREATE PROFILE语句创建配置文件,这是对数据库资源的一组限制。如果将配置文件分配给用户,则该用户不能超过这些限制。
指定同一密码所容许运用的天数。
ALTER PROFILE DEFAULT LIMIT Password_life_time 7;
二、KingbaseES的扩展插件
为了管理用户口令和资源,使用到如下插件:
-
passwordcheck
密码规则校验,检查密码的最小长度,所包含数字、字母和符号等要求。
-
identity_pwdexp
口令有效期管理,可以启闭有效期管理,和设置口令有效期的天数。
-
sys_audlog
用户登录记录管理,记载帐户登录成功和失败的历史信息。可以在ksql工具登录成功时,显示出来相关信息。以及根据配置参数值,限制登录失败次数。
-
passwordhistory
口令历史管理, 是由数据库管理员对初次设定的口令或更改过的口令使用天数进行设置后,在修改用户口令时,自动对口令已使用天数进行相关方面的检查。如果口令不满足指定的条件,那么更改口令将不成功。
这些插件的使用方法如下:
#修改参数配置文件kingbase.conf
shared_preload_libraries = 'passwordcheck, identity_pwdexp, sys_audlog, passwordhistory'
#建立扩展
create extension passwordcheck;
create extension identity_pwdexp;
create extension sys_audlog;
create extension passwordhistory;
#默认开启口令有效期配置
identity_pwdexp.enable_common_user_autoset_interval = on
#默认关闭口令检查配置
passwordcheck.enable = on
#默认关闭口令历史管理配置
passwordhistory.enable = on
三、Oracle的配置文件
创建profile 语法:
CREATE|ALTER PROFILE profile
LIMIT { resource_parameters
| password_parameters
}...
[ CONTAINER = { CURRENT | ALL } ] ;
四、KingbaseES 用户口令配置项
1、连续尝试失败次数
允许帐户登录到用户帐户的连续失败尝试次数,如果达到失败次数,则帐户被锁定。
-
KingbaseES 环境参数
#可设置最大失败次数,默认值为 2147483647 sys_audlog.max_error_user_connect_times = 2147483647 #默认值为 0 , 不限次数 sys_audlog.error_user_connect_times = [0,errtimes_max]
-
Oracle profile 参数
#默认值为 10 FAILED_LOGIN_ATTEMPTS { integer | UNLIMITED | DEFAULT }
2、用户被锁定的时长
指定帐户在指定连续失败的登录尝试次数后,将被锁定的时长。
-
KingbaseES 环境参数
#被锁定的分钟数,默认值为 0 分钟 sys_audlog.error_user_connect_interval = [0,int_max]
-
Oracle profile 参数
#被锁定的天数,默认值为 1 天 PASSWORD_LOCK_TIME{ integer | UNLIMITED | DEFAULT }
3、口令的有效期
指定同一密码可用于身份验证的天数,在限期内未更改密码,则密码将过期,并且会拒绝进一步的连接。
-
KingbaseES 环境参数
#可设置最大有效期的天数,默认值为 30 天 identity_pwdexp.max_password_change_interval = [30,int_max] #最大有效期的天数,默认值为 30 天 identity_pwdexp.password_change_interval = [1,interval_max]
-
Oracle profile 参数
#有效期的天数,默认值为 180 天 PASSWORD_LIFE_TIME { integer | UNLIMITED | DEFAULT }
4、口令重复使用
指定密码不能重复使用的天数。
-
KingbaseES 环境参数
#不能重复使用的天数,默认值为 0 天,即不限制口令重复使用 passwordhistory.password_time = [0,int_max]
-
Oracle profile 参数
#不能重复使用的天数,默认值为 UNLIMITED PASSWORD_REUSE_TIME { integer | UNLIMITED | DEFAULT } #重新使用当前密码之前所需的密码更改次数,默认值为 UNLIMITED PASSWORD_REUSE_MAX { integer | UNLIMITED | DEFAULT }
这两个参数必须一起设置,要使这些参数产生任何效果,必须为它们指定一个值。
-
如果为这两个参数都指定了值,则在为 指定的天数中,将密码更改为 指定的次数之前,用户无法重复使用密码。
例如,如果 PASSWORD_REUSE_TIME 30 和 PASSWORD_REUSE_MAX 10,则如果密码已更改 10 次,则用户可以在 30 天后重复使用该密码。 -
如果为其中一个参数指定一个值,并为另一个参数指定
UNLIMITED
,则用户永远不能重复使用密码。 -
如果为任一参数指定默认值,则Oracle数据库将使用默认配置文件中定义的值。
-
如果将这两个参数都设置为
UNLIMITED
,则数据库会忽略这两个参数。如果省略这两个参数,这是默认值。
-
5、口令宽限期
在口令失效前,给予的重新设该口令的宽限天。当口令失效之后,会在登录时会出现警告信息显示该天数。如果没有在宽限天内修改口令,口令将失效。
-
KingbaseES 环境参数
#无此功能
-
Oracle profile 参数
#宽限期的天数,默认值为 7 天 PASSWORD_GRACE_TIME { integer | UNLIMITED | DEFAULT }
6、非活跃用户
允许的连续不登录用户帐户的天数,超过此天数,该帐户将被锁定。
-
KingbaseES 环境参数
#无此功能
-
Oracle profile 参数
#连续不登录帐户的天数,最小值为 15 天,默认值为 UNLIMITED INACTIVE_ACCOUNT_TIME { integer | UNLIMITED | DEFAULT }
7、口令复杂度
指定密码的最小长度,所包含数字、字母和符号等要求,如果不能通过口令复杂度检查,则不能创建用户,或修改用户口令。
-
KingbaseES 环境参数
#密码中的最小数字个数,默认值为 2 passwordcheck.password_condition_digit = 2 #密码中的最小字母个数,默认值为 2 passwordcheck.password_condition_letter = 2 #密码中的最小符号个数,默认值为 2 passwordcheck.password_condition_punct = 0 #用户的最小密码长度,默认值为 8 passwordcheck.password_length = [8,63]
口令包含的特殊符号是指,除了空白符、数字、英文字母、单引号之外的所有可见字符。
-
Oracle profile 参数
#允许将 PL/SQL 密码复杂性验证脚本作为参数传递给语句 PASSWORD_VERIFY_FUNCTION { function | NULL | DEFAULT }
Oracle 数据库提供了验证函数,但您可以创建自己的例程或改用第三方软件。
- VERIFY_FUNCTION
- 检查密码是否与用户名相同
- 检查密码是否至少包含四个字符,包括一个字母、一个数字和一个标点符号。
- 检查密码是否太简单。要求,长度 4,字母 1,数字1 ,特殊符号 1。
- 检查密码是否与之前的密码至少相差3个字母
- VERIFY_FUNCTION_11G
- ORA12C_VERIFY_FUNCTION
- ORA12C_STRONG_VERIFY_FUNCTION
- ORA12C_STIG_VERIFY_FUNCTION
- VERIFY_FUNCTION
五、用户资源配置项
1、并发会话数
限制用户能建立多少并发连接 。
-
KingbaseES DDL
#限制指定用户的并发连接数 CREATE|ALTER USER role_specification CONNECTION LIMIT 10 ;
-
Oracle profile 参数
#限制用户的并发连接数 SESSIONS_PER_USER { integer | UNLIMITED | DEFAULT }
2、会话时长
指定会话期间允许的连续非活动时间, 用于避免不必要的连接。
-
KingbaseES 环境参数
设定任何客户端空载间隔的最大允许持续时间(秒),默认值 0,不限制。 client_idle_timeout = 0
-
Oracle profile 参数
指定会话期间允许的连续非活动时间,以分钟为单位。 IDLE_TIME { integer | UNLIMITED | DEFAULT }
指定会话的总已用时间限制,以分钟为单位表示。 CONNECT_TIME { integer | UNLIMITED | DEFAULT }
3、CPU时长
指定会话或语句的 CPU 时间限制, 用于避免不必要的CPU开销。
-
KingbaseES 环境参数
设置任何语句执行时间的最大值(毫秒),默认值 0,不限制。 statement_timeout = 0 设定任何空载事务的最大允许持续时间(毫秒),默认值 0,不限制。 idle_in_transaction_session_timeout = 0 等待锁的最长时间值(毫秒),默认值 0,不限制。 lock_timeout = 0
-
Oracle profile 参数
指定调用(解析、执行或提取)的 CPU 时间限制(百分之一秒)。 限制单个语句可以使用的CPU量,违反限制只会创建ORA错误(=终止执行)。 CPU_PER_CALL { integer | UNLIMITED | DEFAULT } 指定会话的 CPU 时间限制(百分之一秒)。 限制在单个会话中运行的所有SQL语句可以消耗的CPU总量,违反限制会产生ORA错误并记录到日志(=终止执行和会话)。 CPU_PER_SESSION { integer | UNLIMITED | DEFAULT }
4、数据总量
指定会话或语句的使用数据块数量限制, 用于避免过量的内存开销。
-
KingbaseES 环境参数
无此功能
-
Oracle profile 参数
指定在会话中读取的数据块的允许数,包括从内存和磁盘读取的数据块。 LOGICAL_READS_PER_SESSION { integer | UNLIMITED | DEFAULT } 指定为处理 SQL 语句(解析、执行或提取)的调用读取的数据块的允许数。 LOGICAL_READS_PER_CALL { integer | UNLIMITED | DEFAULT } 指定会话可以在系统全局区域 (SGA) 的共享池中分配的专用空间量。 PRIVATE_SGA { size_clause | UNLIMITED | DEFAULT }
5、综合权重
指定会话的时长、CPU时长和内存等资源,进行加权计算的总成本,
-
KingbaseES 环境参数
无此功能
-
Oracle profile 参数
指定会话的总资源成本,以服务单位表示。Oracle数据库将总服务单元计算为 CPU_PER_SESSION、CONNECT_TIME、LOGICAL_READS_PER_SESSION 和 PRIVATE_SGA 的加权和。 COMPOSITE_LIMIT { integer | UNLIMITED | DEFAULT }
六、个性化配置参数
因为业务模式的区别,不同的用户对口令或资源,需要不同的参数配置方案。
-
KingbaseES 环境参数
针对用户user01,使用口令有效期,并且要求其每周必须修改密码 ALTER USER user01 SET session_preload_libraries = 'identity_pwdexp' ; ALTER USER user01 SET identity_pwdexp.password_change_interval = 7 ;
-
Oracle profile 参数
针对用户user01,使用口令有效期,并且要求其每周必须修改密码 CREATE PROFILE prof_user01 LIMIT PASSWORD_LIFE_TIME 7 ; ALTER USER user01 PROFILE prof_user01;