最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
如何查看Oracle用户正在使用哪个Profile
时间:2026-08-21 09:30:49 编辑:袖梨 来源:一聚教程网
最直接方式是查询dba_users视图:SELECT username, profile FROM dba_users WHERE username = UPPER('your_user');需注意大小写,查自身可用USER替代,查他人需DBA权限。
查用户当前绑定的 Profile 名称
最直接的方式是查 dba_users 视图,它明确记录了每个用户被分配的 profile:
SELECT username, profile FROM dba_users WHERE username = UPPER('your_user');
注意大小写:Oracle 默认用户名大写,UPPER() 能避免因输入小写导致查不到。如果查的是当前会话用户,可用 USER 替代:
SELECT profile FROM dba_users WHERE username = USER;
不需要额外权限就能查自己的 profile;查别人则需 SELECT_CATALOG_ROLE 或 DBA 权限。
确认 Profile 是否生效(特别是资源限制)
Profile 创建后不自动启用资源限制——必须开启 resource_limit 参数,否则像 CPU_PER_SESSION、IDLE_TIME 这类设置全无效:
- 检查当前值:
SHOW PARAMETER resource_limit,返回FALSE就没开 - 启用它:
ALTER SYSTEM SET resource_limit = TRUE;(需 SYS 权限) - 密码类参数(如
PASSWORD_LIFE_TIME、FAILED_LOGIN_ATTEMPTS)不受此开关影响,始终生效
常见误判:看到 profile 里写了 IDLE_TIME 10,但用户空闲半小时也没断开——大概率就是 resource_limit 没开。
查看该 Profile 的具体限制项
知道 profile 名后,要确认它到底限制了什么,得查 dba_profiles:
SELECT resource_name, resource_type, limitFROM dba_profiles
WHERE profile = 'DEFAULT'
ORDER BY resource_type, resource_name;
resource_type 分两类:KERNEL(资源类,如 CPU_PER_CALL)和 PASSWORD(密码类,如 PASSWORD_VERIFY_FUNCTION)。常被忽略的是:limit 列显示 DEFAULT 并非“不限制”,而是继承自 Oracle 内置默认值(比如 FAILED_LOGIN_ATTEMPTS 的 DEFAULT 是 10)。
若想快速区分密码策略是否启用,重点看:PASSWORD_VERIFY_FUNCTION 是否为 NULL(未启用)或函数名(如 VERIFY_FUNCTION);FAILED_LOGIN_ATTEMPTS 是否为数字而非 UNLIMITED。
Profile 修改后何时生效
Profile 本身修改后(如 ALTER PROFILE ... LIMIT ...),对已存在的会话不立即生效:
- 新建立的会话:下次连接时生效
- 当前活跃会话:资源限制(如
IDLE_TIME)只在下一次空闲检测周期触发时才起作用,不会中断正在进行的操作 - 密码策略(如
PASSWORD_LIFE_TIME)会在下次密码修改或登录校验时生效
特别容易踩坑的是 ALTER USER ... PROFILE ...:切换 profile 后,旧 profile 的限制不会立刻清除,新限制也要等下次会话启动才完整接管。别指望改完 profile 立刻让某个正在长事务中的会话被 CPU_PER_SESSION 中断。