一、问题
今天在创建Oracle用户时,报错:【ORA-65096: 公用用户名或角色名无效】
什么原因呢?
查看数据库版本信息:
select version from v$instance;
我的oracle版本是19c,应该是oracle_12版本及以上版本的特性
在CDB容器中用户名必须加c##或者C##前缀才能创建成功,但会改变用户名的预期格式
Oracle官方文档介绍:https://docs.oracle.com/database/121/DBSEG/users.htm#DBSEG99780
这里面又牵扯到了容器CDB(Container Database)与PDB(Pluggable Database)的概念,具体大家可以自己深究,这英文文档也看不懂
二、解决
方案一、直接创建以c##或者C##开头的用户
当前容器为CDB,CDB容器下创建用户必须以c##或者C##开头,那就改下用户名呗,仅仅是个用户名而已,也不影响什么
方案二、将当前容器改为PDB,然后再创建用户
将当前容器改为PDB,PDB容器创建用户无需以c##或者C##开头
使用sys用户进行操作,其他用户权限级别不足
查询容器是否CDB
select name,cdb,open_mode,con_id from v$database;
查看当前容器名称
show con_name;
查看已经创建的pdb容器
show pdbs;
打开上述ORCLPDB容器
ALTER PLUGGABLE DATABASE ORCLPDB OPEN;
将当前容器切换到指定的PDB容器中,可插拔数据库(PDB)
alter session set CONTAINER=ORCLPDB;
查看当前容器,会发现以及切换到ORCLPDB的容器了
show con_name;
就可以正常创建用户了
CREATE USER ROOTUSER1 IDENTIFIED BY ROOTUSER;
查看用户是否创建成功
select username from dba_users where username = 'ROOTUSER1';
授予用户权限
创建用户后,需要授予用户执行数据库操作的权限。通常,会授予用户如CREATE SESSION
、CREATE TABLE
、CREATE VIEW
等基本权限,以及根据需要授予更高级的权限。例如:
GRANT CONNECT, RESOURCE TO 用户名;
-- 注意:DBA权限应谨慎授予,因为它提供了对数据库的广泛控制权
-- GRANT DBA TO 用户名; (仅在必要时授予)
使用新创建的用户进行登录
不知道为什么,这个用户无法以普通用户登录,必须以超级管理员 sysdba进行登录才行
而使用超级管理员登录后,虽然密码输入的是刚新的的用户的密码,但登陆的不是刚创建的用户,而是sys用户
新创建的用户普通登录请查看文章:oracle 12c及以上 解决pdb中用户无法普通登录问题