Oracle 数据库 Profile 详解
一 Profile 基本概念
Profile 是 Oracle 数据库中用于管理用户资源和密码策略的重要对象,它是一组命名的资源限制和密码规则的集合。通过 Profile 可以:
- 控制用户对系统资源的使用
- 实施密码安全策略
- 简化用户权限管理
二 Profile 的主要功能
1.1 资源限制功能
参数 | 说明 |
---|---|
SESSIONS_PER_USER | 每个用户的最大并发会话数 |
CPU_PER_SESSION | 单个会话可使用的CPU时间(百分之一秒) |
CPU_PER_CALL | 单个SQL调用可使用的CPU时间(百分之一秒) |
CONNECT_TIME | 会话最大连接时间(分钟) |
IDLE_TIME | 会话最大空闲时间(分钟) |
LOGICAL_READS_PER_SESSION | 会话可读取的数据块总数 |
LOGICAL_READS_PER_CALL | 单个SQL调用可读取的数据块数 |
PRIVATE_SGA | 会话在SGA中可分配的私有空间(KB/MB) |
COMPOSITE_LIMIT | 综合资源限制(基于多个资源的加权计算) |
1.2 密码策略功能
参数 | 说明 |
---|---|
FAILED_LOGIN_ATTEMPTS | 允许的连续失败登录次数 |
PASSWORD_LIFE_TIME | 密码有效期(天) |
PASSWORD_REUSE_TIME | 密码可重用时间(天) |
PASSWORD_REUSE_MAX | 密码可重用次数 |
PASSWORD_LOCK_TIME | 密码锁定时间(天) |
PASSWORD_GRACE_TIME | 密码过期后的宽限期(天) |
PASSWORD_VERIFY_FUNCTION | 密码复杂度验证函数 |
1.3 用户状态限制
INACTIVE_ACCOUNT_TIME是 Oracle 12c (12.2) 及以上版本引入的一个 Profile 密码参数,用于设置用户账户在不活动(未登录)多长时间后自动被锁定。
参数 | 说明 |
---|---|
INACTIVE_ACCOUNT_TIME | 控制账户因不活动而被自动锁定的时间阈值(天) |
三 Profile 管理命令
3.1 创建 Profile
CREATE PROFILE app_profile LIMIT
SESSIONS_PER_USER 5
CPU_PER_SESSION 100000
CONNECT_TIME 480
IDLE_TIME 30
FAILED_LOGIN_ATTEMPTS 5
PASSWORD_LIFE_TIME 90
PASSWORD_REUSE_TIME 180
PASSWORD_REUSE_MAX 3
PASSWORD_LOCK_TIME 1;
3.2 修改 Profile
ALTER PROFILE app_profile LIMIT
IDLE_TIME 60
PASSWORD_LIFE_TIME 60;
3.3 删除 Profile
DROP PROFILE app_profile [CASCADE];
-- CASCADE选项会将该profile从已分配的用户上移除
3.4 分配 Profile 给用户
ALTER USER test PROFILE app_profile;
3.5 查看 Profile 信息
-- 查看所有profile
SELECT * FROM DBA_PROFILES;
-- 查看特定profile的设置
SELECT * FROM DBA_PROFILES WHERE PROFILE = 'APP_PROFILE';
-- 查看用户分配的profile
SELECT USERNAME, PROFILE FROM DBA_USERS;
四 默认 Profile
Oracle 提供两个默认 Profile:
- DEFAULT:基本的资源限制和密码策略
- MONITORING_PROFILE:用于监控用户,有更严格的限制
五 Profile 使用最佳实践
-
分类管理:根据用户角色创建不同的profile
- 开发人员profile
- 应用程序profile
- DBA profile
- 报表用户profile
-
密码安全:
CREATE PROFILE secure_profile LIMIT FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LIFE_TIME 60 PASSWORD_REUSE_TIME 365 PASSWORD_REUSE_MAX 5 PASSWORD_LOCK_TIME 1/24 -- 锁定1小时 PASSWORD_GRACE_TIME 7;
-
资源控制:
CREATE PROFILE app_profile LIMIT SESSIONS_PER_USER 10 CPU_PER_SESSION UNLIMITED CONNECT_TIME 1440 IDLE_TIME 30 LOGICAL_READS_PER_SESSION 1000000;
-
启用资源限制:
ALTER SYSTEM SET RESOURCE_LIMIT=TRUE SCOPE=BOTH;
-
自定义密码验证函数:
-- 使用Oracle提供的UTLPWDMG包创建密码验证函数 @?/rdbms/admin/utlpwdmg.sql -- 然后可以在profile中引用 ALTER PROFILE secure_profile LIMIT PASSWORD_VERIFY_FUNCTION verify_function;
六 注意事项
- 修改profile后,新设置只对新会话生效
- 资源限制需要RESOURCE_LIMIT参数设为TRUE才能生效
- 删除profile时,如果有用户正在使用,需要加CASCADE选项
- 密码策略对SYS用户无效
- 过于严格的限制可能导致应用程序异常
Profile是Oracle数据库安全管理的重要组成部分,合理使用可以显著提高数据库的安全性和稳定性。
谨记:心存敬畏,行有所止。