ORA-65096: 公用用户名或角色名无效

在Oracle12版本中,由于新的特性,创建用户时需使用c##前缀。如`CREATEUSERc##zabbixIDENTIFIEDBYzabbix`,然后进行用户授权。另一种方案是通过`ALTERSESSIONSET_ORACLE_SCRIPT=TRUE`来创建和授权。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错:【ORA-65096: 公用用户名或角色名无效】
查询数据库版本

SELECT * FROM v$version;

在这里插入图片描述

创建用户失败

create user zabbix identified by zabbix; // ORA-65096: 公用用户名或角色名无效

查询官方文档得知,这是oracle_12版本的特性,有兴趣的朋友可以查阅下 官方文档

在CDB容器中用户名必须加c##前缀才能创建成功:

create user c##zabbix identifed by zabbix;
grant connect, resource to c##zabbix; // 用户授权

查看用户

select username, user_id, account_status from dba_users where username like ‘%zabbix%’;

或者采用方案二:
解决Oracle创建用户报ORA-65096错的解决(创建用户和授权等的操作需要这个来进行)

alter session set “_ORACLE_SCRIPT”=true;

<think>嗯,用户遇到了ORA-65096错误,需要解决无效的通用用户名角色称的问题。首先,我得回忆一下Oracle数据库的相关知识。这个错误通常发生在12c及以上版本,特别是当用户尝试创建通用用户角色时没有正确的权限格式不对。 根据引用[2],创建用户时必须选择正确的容器,如果是本地用户,需要先切换到特定的可插拔数据库(PDB)。通用用户(Common User)的字需要以C##c##开头,否则会触发这个错误。所以,用户可能没有使用正确的前缀,者没有在正确的容器下操作。 接下来,可能的解决方案包括:1. 检查当前是否在CDB$ROOT容器下创建通用用户,如果是,确保用户名以C##开头。2. 如果是要在PDB中创建本地用户,需要先切换到目标PDB,然后创建不带前缀的用户。3. 修改用户名格式,添加C##前缀。此外,权限问题也可能导致错误,需要确保用户有CREATE USER的权限,并且使用ALTER SESSION切换容器。 可能还需要检查Oracle的版本,确认是否是12c更高,因为这个问题主要出现在这些版本中。用户可能需要使用ALTER SESSION SET CONTAINER = pdbname;来切换到PDB,然后再创建用户。同时,如果用户确实需要创建通用用户,必须确保命符合规范,并且有足够的权限。 另外,引用[2]还提到,如果希望为某个PDB创建本地用户,必须先选择该PDB。所以,用户可能错误地在根容器下创建本地用户,而没有切换到对应的PDB。需要指导用户如何查看当前容器,以及如何切换容器。例如,使用SHOW CON_NAME查看当前容器,再用ALTER SESSION切换。 总结下来,解决步骤应该是:确认要创建的是通用用户还是本地用户,检查命是否符合规范,切换到正确的容器,确保有足够的权限。同时,提供具体的SQL命令示例,帮助用户一步步操作。此外,提醒用户注意版本差异,避免在错误的上下文中执行命令。</think>### ORA-65096错误解决方案 **错误原因** ORA-65096表示在Oracle 12c及以上版本中尝试创建通用用户(Common User)角色时,未遵循命规范操作环境不正确。具体原因包括: 1. **命格式错误**:通用用户名需以`C##``c##`开头(例如`C##test_user`)[^2]。 2. **容器环境错误**:未在正确的容器(CDBPDB)中操作。通用用户需在根容器(CDB$ROOT)中创建,而本地用户需在可插拔数据库(PDB)中创建。 3. **权限不足**:缺少`CREATE USER`权限未启用`ALTER SESSION`切换容器。 --- ### 分步解决方案 1. **确认操作目标** - 若需创建**通用用户**(跨所有PDB),必须使用`C##`前缀。 - 若需创建**本地用户**(仅限单个PDB),需先切换到目标PDB。 2. **检查当前容器** 执行以下SQL确认当前容器环境: ```sql SELECT SYS_CONTEXT('USERENV', 'CON_NAME') AS current_container FROM DUAL; ``` 3. **通用用户创建方法** - 确保当前在根容器(CDB$ROOT): ```sql ALTER SESSION SET CONTAINER = CDB$ROOT; ``` - 创建用户时添加`C##`前缀: ```sql CREATE USER C##test_user IDENTIFIED BY password; ``` 4. **本地用户创建方法** - 切换到目标PDB(例如`PDBORCL`): ```sql ALTER SESSION SET CONTAINER = PDBORCL; ``` - 创建不带前缀的用户: ```sql CREATE USER local_user IDENTIFIED BY password; ``` 5. **权限验证** 确保当前用户拥有`CREATE USER`权限: ```sql GRANT CREATE USER TO current_user; ``` --- ### 示例操作流程 ```sql -- 切换到PDB ALTER SESSION SET CONTAINER = ORCLPDB1; -- 创建本地用户 CREATE USER app_user IDENTIFIED BY Welcome123; -- 授权并分配表空间 GRANT CONNECT, RESOURCE TO app_user; ALTER USER app_user DEFAULT TABLESPACE users QUOTA UNLIMITED ON users; ``` --- ### 相关问题 1. **如何查看所有PDB的列表?** ```sql SELECT NAME, OPEN_MODE FROM V$PDBS; ``` 2. **ORA-65049错误如何解决?** 该错误通常因未切换到PDB直接创建本地用户导致,需先执行`ALTER SESSION SET CONTAINER`。 3. **通用用户与本地用户的权限差异?** 通用用户可跨多个PDB管理对象,而本地用户仅限单个PDB。权限分配需通过`COMMON`关键字指定(例如`GRANT CREATE SESSION TO C##admin CONTAINER=ALL;`)。 --- **引用说明** [^1]: ORA-06508错误通常与程序单元缺失相关,与本问题无直接关联。 : Oracle官方文档明确要求通用用户需以`C##`开头,并在正确容器中操作。 [^3]: 部分Oracle错误可通过版本兼容性调整解决,但ORA-65096需严格遵循命规范。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值