一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

如何查看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_SESSIONIDLE_TIME 这类设置全无效:

  1. 检查当前值:SHOW PARAMETER resource_limit,返回 FALSE 就没开
  2. 启用它:ALTER SYSTEM SET resource_limit = TRUE;(需 SYS 权限)
  3. 密码类参数(如 PASSWORD_LIFE_TIMEFAILED_LOGIN_ATTEMPTS)不受此开关影响,始终生效

常见误判:看到 profile 里写了 IDLE_TIME 10,但用户空闲半小时也没断开——大概率就是 resource_limit 没开。

查看该 Profile 的具体限制项

知道 profile 名后,要确认它到底限制了什么,得查 dba_profiles

SELECT resource_name, resource_type, limit

FROM 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_ATTEMPTSDEFAULT 是 10)。

若想快速区分密码策略是否启用,重点看:PASSWORD_VERIFY_FUNCTION 是否为 NULL(未启用)或函数名(如 VERIFY_FUNCTION);FAILED_LOGIN_ATTEMPTS 是否为数字而非 UNLIMITED

Profile 修改后何时生效

Profile 本身修改后(如 ALTER PROFILE ... LIMIT ...),对已存在的会话不立即生效

  1. 新建立的会话:下次连接时生效
  2. 当前活跃会话:资源限制(如 IDLE_TIME)只在下一次空闲检测周期触发时才起作用,不会中断正在进行的操作
  3. 密码策略(如 PASSWORD_LIFE_TIME)会在下次密码修改或登录校验时生效

特别容易踩坑的是 ALTER USER ... PROFILE ...:切换 profile 后,旧 profile 的限制不会立刻清除,新限制也要等下次会话启动才完整接管。别指望改完 profile 立刻让某个正在长事务中的会话被 CPU_PER_SESSION 中断。

热门栏目