欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

oracle12c创建用户提示ORA-65096:公用用户名或角色无效 ora-65096 invalid common user or role name 有大用

Oracle 12c创建用户时出现“ORA-65096: invalid common user or role name”的错误

这篇文章主要介绍CDB和PDB的基本管理,资料来源oracle官方。 

基本概念:

Multitenant Environment:多租户环境

CDB(Container Database):数据库容器

PDB(Pluggable Database):可插拔数据库

CDB与PDB关系图

     COMMON USERS(普通用户):经常建立在CDB层,用户名以C##或c##开头;

     LOCAL USERS(本地用户):仅建立在PDB层,建立的时候得指定CONTAINER。

在oracle 12c中,使用了一个container(容器)的概念,让我们先看看官方的对它的介绍,为了保留最原始的意思,这里引用英文而不翻译了。

The data dictionary in each container in a CDB is separate, and the current container is the container whose data dictionary is used for name resolution and for privilege authorization. The current container can be the root or a PDB. Each session has exactly one current container at any point in time, but it is possible for a session to switch from one container to another.

Each container has a unique ID and name in a CDB. You can use the CON_ID and CON_NAME parameters in the USERENV namespace to determine the current container ID and name with the SYS_CONTEXT function.

1、查看Oracle 12c的版本

SQL> select * from v$version;

SQL>select sys_context ('USERENV', 'CON_NAME') from dual; 
SYS_CONTEXT('USERENV','CON_NAME')
----------------------------------------------------------------------------------------------------
CDB$ROOT

2、我们可以通过ALTER SESSION SET CONTAINER 指定其他容器

SQL>select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

3、将Pdb open:

SQL> alter pluggable database pdborcl open;

 

4、查看容器

SQL>select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

5、切换容器到pdb

SQL> alter session set container=PDBORCL;

6、查看当前使用容器

SQL>select sys_context ('USERENV', 'CON_NAME') from dual; 

7、创建用户 

SQL>create user informix identified by gmgl;

SQL>grant dba to informix;

分类: oracle

来自 https://www.cnblogs.com/siyunianhua/p/4004361.html


错误:ORA-65096:oracle 中的通用用户名或角色名无效

我刚刚安装了Oracle,它缺少 Scott 模式。所以我想自己生成它。我得到了 Scott 模式的 sql 脚本,但是当我尝试运行查询时:

create user Scott identified by tiger; 

它显示以下错误:

ORA-65096: oracle 中的通用用户名或角色名无效。

基本上它不允许我创建用户 Scott。

为什么会这样,我该如何解决我的问题?

410

99.9% 的错误ORA-65096: invalid common user or role name意味着您在应该登录到 PDB 时登录到了 CDB。例如,如果您使用默认的 19c 安装设置,您应该登录到 ORCLPDB(PDB)而不是 ORCL(CDB)。


危险- 如果您坚持以错误的方式创建用户,请按照以下步骤操作。

像这样设置未记录的参数(如前导下划线所示)只能在 Oracle Support 的指导下完成。在没有此类指导的情况下更改此类参数可能会使您的支持合同无效。因此,请自行承担风险。

具体来说,如果您设置了"_ORACLE_SCRIPT"=true,则会在将 ORACLE_MAINTAINED 列设置为“Y”的情况下进行一些数据字典更改。这些用户和对象将被错误地从某些 DBA 脚本中排除。并且它们可能被错误地包含在某些系统脚本中。

如果您对上述风险没有问题,并且不想以正确的方式创建普通用户,请在创建用户之前运行以下命令:

alter session set "_ORACLE_SCRIPT"=true;  

我在这里找到了答案

  • 7
    请注意,它是一个隐藏参数,仅在 Oracle 支持人员推荐时使用。  2018 年 8 月 30 日 14:25
  • 6
    在生产系统中使用下划线(隐藏)参数是危险的,因为它可能会使您的支持合同无效。所以你应该建议人们在没有给出适当警告的情况下设置它们。 
    —— APC
     2018 年 10 月 15 日 6:20
  • 5
    这是错误的,并且在 oracle 中不受支持,我使用过它并导致了另一个内部问题。  2019 年 2 月 20 日 17:18
  • 4
    @Victor - 因为只有在 Oracle 支持人员指示时才允许我们更改它们。就像我说的,在我们自己的蝙蝠中设置未记录的参数可能会使我们的支持合同无效。更一般地说,Oracle 对记录和未记录参数的默认设置通常适用于所有应用程序,不需要更改。调整下划线参数对享受神秘访问快感的人很有吸引力,这是调整它们的最糟糕的原因。但是,如果您没有需要担心的支持合同,那么您可以随意选择以任何方式损坏系统的风险;-) 
    —— APC
     20 年 3 月 31 日 14:47
  • 3
    你为什么不展示如何以正确的方式修复它呢? 
    —— 克莱恩布
     20 年 10 月 15 日 6:31
84

我刚刚安装了 oracle11g

ORA-65096: oracle 中的通用用户名或角色名无效

不,您已经安装了Oracle 12c该错误只能在 上12c,不能在 上11g

始终检查您的数据库版本,最多保留 4 位小数:

SELECT banner FROM v$version WHERE ROWNUM = 1;

Oracle 12c 多租户容器数据库具有:

  • 一个根容器(CDB

  • 和/或零个、一个或多个可插拔数据库 ( PDB )。

您必须已将数据库创建为容器数据库虽然您尝试在容器中创建用户,即CDB$ROOT,但是,您应该在PLUGGABLE 数据库中创建用户

您不应该在容器中创建与应用程序相关的对象,容器保存可插入数据库的元数据。您应该将可插拔数据库用于常规数据库操作。否则,不要将其创建为容器,也不要使用multi-tenancy但是,从 12cR2 开始,您无论如何都无法创建非容器数据库。

最有可能的是,示例模式可能已经安装,您只需要在可插入数据库中解锁它们。

例如,如果您将可插入数据库创建为pdborcl

sqlplus SYS/password@PDBORCL AS SYSDBA

SQL> ALTER USER scott ACCOUNT UNLOCK IDENTIFIED BY tiger;

sqlplus scott/tiger@pdborcl

SQL> show user;
USER is "SCOTT"

要显示 PDB 并从根容器连接到可插拔数据库:

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT

SQL> show pdbs

    CON_ID CON_NAME                       OPEN MODE  RESTRICTED
---------- ------------------------------ ---------- ----------
         2 PDB$SEED                       READ ONLY  NO
         3 ORCLPDB                        READ WRITE NO

SQL> alter session set container = ORCLPDB;

Session altered.

SQL> show con_name;

CON_NAME
------------------------------
ORCLPDB

我建议阅读,Oracle 12c Post Installation Mandatory Steps


注意:建议使用_ORACLE_SCRIPT隐藏参数设置为 true 的答案在生产系统中是危险的,并且还可能使您的支持合同无效。请注意,在未咨询 Oracle 支持的情况下,请勿使用隐藏参数

69

在 Oracle 12c 及更高版本中,我们有两种类型的数据库:

  1. 容器数据库 (CDB),以及

  2. 可插拔数据库 (PDB)。

如果要创建用户,有两种可能:

  1. 您可以创建一个“容器用户”又名“普通用户”。
    普通用户属于 CBD 以及当前和未来的 PDB。这意味着他们可以根据分配的权限在 Container DB 或 Pluggable DB 中执行操作。

    create user c##username identified by password;

  2. 您可以创建一个“可插入用户”又名“本地用户”。
    本地用户只属于一个 PDB。这些用户可能被授予管理权限,但仅限于他们所在的 PDB。为此,您应该像这样连接到可插拔数据:

    alter session set container = nameofyourpluggabledatabase;

    在那里,您可以像往常一样创建用户:

    create user username identified by password;

不要忘记指定要使用的表空间,它在数据库的导入/导出过程中很有用。有关它的更多信息,请参阅https://docs.oracle.com/database/121/SQLRF/statements_8003.htm#SQLRF01503

13
SQL> alter session set "_ORACLE_SCRIPT"=true;  
SQL> create user sec_admin identified by "Chutinhbk123@!";
2

可能是,更安全的替代方法"_ORACLE_SCRIPT"=true是将"_common_user_prefix"from更改C##为空字符串。当它为空时 - 任何名称都可以用于普通用户。那里找到

在更改该值期间,您可能会面临另一个问题 - ORA-02095 - 参数无法修改,可以根据您的配置(来源通过多种方式修复

所以对我来说:

alter system set _common_user_prefix = ''; scope=spfile;
1

如果您的目标是创建一个 Oracle 用户,然后使用它来处理您的数据库,您可能需要考虑这样做:

  • 登录为 sysdba

  • 创建一个 pdb(又名可插拔数据库)

  • 为您的 pdb 创建一个用户

下面假设您正在使用本地主机中的数据库,如果不是简单地使用数据库 uri 更改“本地主机”。

示例代码

以 sysdba 身份登录:

$ sqlplus sys/<your_admin_pws>@localhost as sysdba

然后执行这个:

create pluggable database MYDATABASE
admin user Scott identified by tiger;
file_name_convert = ('/pdbseed/', '/mydatabase/')
;

alter pluggable database MYDATABASE open;

那么您可能想要授予用户 Scott 一些权限:从@localhost 注销并以 sysdba 的身份重新登录到您的新数据库

$ sqlplus sys/<your_admin_pws>@localhost/MYDATABASE as sysdba

并授予斯科特任何你想要的权限,例如

grant connect to Scott;
grant create view to Scott;
grant create table to Scott;
grant create trigger to Scott;

现在你可以开始了:你有一个空的数据库实例和一个用户。只需登录

$ sqlplus Scott/tiger@localhost/MYDATABASE

奖金

之后我遇到了表空间和配额的问题。登录sqlplus sys/<your_admin_pws>@localhost/MYDATABASE as sysdba

您可以列出所有表空间

SELECT TABLESPACE_NAME, STATUS, CONTENTS FROM USER_TABLESPACES;

您可以创建一个新的表空间

CREATE TABLESPACE TABLESPACENAME DATAFILE 'tablespace_datafile.dat' SIZE 10M REUSE AUTOEXTEND ON NEXT 10M MAXSIZE 200M;

您可以删除损坏的表空间

Drop tablespace TABLESPACENAME including contents and datafiles;

您可以向 Scott 授予对表空间的“访问”权限

alter user Scott quota unlimited on TABLESPACENAME;

NBquota unlimited可能是一个不好的做法,检查 oracle 文档如何限制用户的配额

1

就我而言,在默认安装 oracle 后,我首先连接到orcl导致问题的原因。并重新连接到orclpdb(Pluggable DataBase、PDB)解决问题。

在此处输入图片说明 在此处输入图片说明

  • 1
    +1 这些详细信息对 Oracle 新手很有用。我将窃取您的一些答案并将其编辑为已接受的答案。(不幸的是,大多数人不会向下滚动以查看您的新答案,因为如果此线程充满了错误信息。)  8 月 12 日 21:26
-1

创建用户对数据库连接工具的依赖

sql plus
SQL> connect as sysdba;
Enter user-name: sysdba
Enter password:
Connected.
SQL> ALTER USER hr account unlock identified by hr;
User altered
 then create user on sql plus and sql developer
  • 3
    您能否正确格式化您的代码并给出一些上下文,为什么这比其他答案更好地解决了问题? 
    —— 尼可哈斯
     2018-01-09 11:27

不是您要找的答案?浏览其他标记的问题  或者问你自己的问题

来自  https://stackoverflow.com/questions/33330968/error-ora-65096-invalid-common-user-or-role-name-in-oracle
























解决 ORA-65096: invalid common user or role name问题

杨花落尽子规啼





在oracle执行:create user tff identified by tff 的
时候报错了:ORA-65096: invalid common user or role name

SQL> create user tff identified by tff;
create user tff identified by tff
ERROR at line 1:
ORA-65096: invalid common user or role name

报错:ORA-65096: invalid common user or role name(公用用户名或角色名无效).

错误原因:用户想在PDBORCL中创建tff用户,却未设置会话container到PDB,而在CDB中创建公有用户因无法通过名称或角色验证出错.

解决方法:
1、查看Oracle 12c的版本

SQL> select * from v$version;
select sys_context ('USERENV', 'CON_NAME') from dual;

image.png

2、我们可以通过ALTER SESSION SET CONTAINER 指定其他容器

SQL> alter pluggable database PDB19 open;

image.png
4、查看容器

SQL>select con_id,dbid,NAME,OPEN_MODE from v$pdbs;

image.png
5、切换容器到PDB19
image.png
6、查看当前使用容器

SQL>select sys_context ('USERENV', 'CON_NAME') from dual;

image.png
7、创建用户

create user tff identified by tff;
grant dba to tff

image.png

以上问题就可以解决了.





来自 https://segmentfault.com/a/1190000038344836



Oracle] 尝试创建用户时出现ORA-65096: invalid common user or role name 的解决方法





解决法

99.9% 的时间出现错误 ORA-65096: invalid common user or role name 意味着您在应该登录到 PDB 时登录到了 CDB

根据stack overflow的回答,ORA-65096 错误的原因似乎99.9% 都与CDB 相关,所以:清白的:
通过连接PDB 而不是CDB 来创建用户。:肌肉:





好的

# 确认当前连接的容器名称(连接到CDB的状态)
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT

# 查PDB名
SQL> select pdb_name from cdb_pdbs;

PDB_NAME
--------------------------------------------------------------------------------------------------------------------------------
ORCLPDB1
PDB$SEED

# 连接到PDB
SQL> alter session set container = ORCLPDB1;

Session altered.

# 创建用户。
SQL> create user qiita identified by password default tablespace USERS temporary tablespace TEMP;

User created.



NG

# 确认当前连接的容器名称(连接到CDB的状态)
SQL> show con_name;

CON_NAME
------------------------------
CDB$ROOT

# 因为连接到CDB,所以如果想创建用户的话会被骂。
SQL> create user qiita identified by password default tablespace USERS temporary tablespace TEMP;
create user qiita identified by password default tablespace USERS temporary tablespace TEMP
            *
ERROR at line 1:
ORA-65096: invalid common user or role name

版本信息

  • Oracle Database 19c 企业版 19.0.0.0.0 版 - 生产版 19.3.0.0.0


来自 https://qiita.com/HiromasaNojima/items/bb2e8903ab199b34ac70



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





用户8708553
用户8708553 成员 帖子:41
 2019 年 9 月 14 日下午 12:38 编辑

大家好,


希望大家都过得好!


我刚刚下载并安装了 Oracle Database 19c(版本 19.0.0.0.0)。

当我跑:

     创建由 abc123 标识的用户 john_doe;

它给了我:

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


我做错了什么?还是我在安装步骤中遗漏了什么?


非常感谢,


厘米

欢迎!

看起来你是新来的。登录或注册以开始使用。

最佳答案

  • 所罗门雅各布森
    所罗门雅各布森 成员 帖子数:18,618 黑钻石
     已编辑 2019 年 8 月 31 日下午 5:08 接受的答案

    正如 Frank 所指出的,您登录的数据库是容器数据库。您需要登录到该容器中的可插入数据库,然后创建普通用户。容器数据库中只能创建普通用户,并且他们的名字必须以C##为前缀(除非你改变了前缀)。我建议您阅读有关用户类型的文档。


    SY。

答案

  • 弗兰克·库拉什 会员、主持人 帖子数:40,848 红钻
     2019 年 8 月 31 日 10:09 已编辑

    你好,

    user8708553写道:大家好,希望大家做的好,我刚刚下载!安装Oracle数据库19 C(排放19.00.00)。 我跑:创造由ABC123识别的用户john_doe即,它给了我:ORA - 65096:无效的普通用户角色nameWhat为什么我做的不正确?还是安装步骤中遗漏了什么?非常感谢,cmh


    请参阅:在 12c 数据库中创建用户的问题


    您是要在容器数据库中还是在可插拔数据库中创建用户?

  • 用户8708553
    用户8708553 成员 帖子:41
     2019 年 8 月 31 日下午 4:53 编辑

    我以 SYSTEM 身份登录。我想在任何数据库中创建一个用户

    我被允许创建。


    谢谢,


    厘米

  • 所罗门雅各布森
    所罗门雅各布森 成员 帖子数:18,618 黑钻石
     已编辑 2019 年 8 月 31 日下午 5:08 接受的答案

    正如 Frank 所指出的,您登录的数据库是容器数据库。您需要登录到该容器中的可插入数据库,然后创建普通用户。容器数据库中只能创建普通用户,并且他们的名字必须以C##为前缀(除非你改变了前缀)。我建议您阅读有关用户类型的文档。


    SY。

  • 用户8708553
    用户8708553 成员 帖子:41
     已编辑 2019 年 8 月 31 日下午 5:18

    我猜我在默认数据库中。我想

    在其中创建用户。


    厘米

  • 用户8708553
    用户8708553 成员 帖子:41
     2019 年 8 月 31 日下午 5:22 编辑

    我试图连接到我的可插拔数据库。

    但是我没有用户名和密码。


    能否请你帮忙?谢谢你。


    厘米

  • 数学小子
    数学小子 成员 帖子数:9,924 金皇冠
     2019 年 8 月 31 日下午 5:50 编辑

    从 Oracle 12.1 开始,仅知道谁的身份登录已不再足够你也需要知道在那里你登录。


    出于各种非常好的原因,Oracle 引入了一种比您连接的“一个数据库”更复杂的设置。它现在具有“多租户”结构;有一个容器数据库(通常,您不应该在其中创建新用户,除非您有充分的理由,并且您完全了解正在发生的事情)和一个或多个“可插入”数据库 - 所有部分都是相同的安装。您应该在 PLUGGABLE 数据库中而不是在 CONTAINER 中创建像 JOHN_DOE 这样的用户。


    当您以 SYSTEM 身份登录时,您很可能正在连接到容器数据库。(正如我将在下面展示的,SYSTEM 也可以登录到可插拔数据库,但这可能不是您所做的。)


    下一步是找出系统上有哪些数据库。从那里决定应该在哪里创建新用户。连接到正确的可插入数据库(作为 SYSTEM)并创建用户。


    SQL> 连接系统输入密码:已连接。SQL> column pdb_name format a30SQL> select pdb_name, status from dba_pdbs; PDB_NAME 状态------------------------------- ---------- ORCLPDB NORMAL PDB$SEED NORMAL


    说明:您的输出可能与我的不同。PDB$SEED 是一个可插拔的数据库模板;它应该总是出现在输出中,你不应该碰它在我的系统上,我有一个“用户”可插入数据库 ORCLPDB。我在安装 Oracle 时创建了它(并将其命名为 ORCLPDB)(在我的例子中它是 12.2 版,但我相信它在以后的版本中类似)。


    好的,所以如果我必须创建一个新用户,我应该在 ORCLPDB 中这样做。首先,我必须以SYSTEM 身份连接到那个数据库,然后创建用户:(注意 - 不要盲目编写 ORCLPDB;使用您在上一步中确定的实际 PDB 名称!)


    SQL>连接 系统@orclpdb输入密码:已连接。SQL> 创建由 abc123 标识的用户 john_doe;用户创建。SQL>连接john_doe @orclpdb输入密码:错误:ORA- 01045:用户 JOHN_DOE 缺少 CREATE SESSION 权限;登录被拒绝警告:您没有再连接到ORACLE。


    如您所见,我(以 SYSTEM 身份)连接到 ORCLPDB,并在那里创建了用户。那是成功的。


    然后,如果 JOHN_DOE 需要连接到数据库,他必须连接到 ORCLPDB,如我在示例中所示。现在你会遇到一个新问题:SYSTEM 创建了新用户,但它没有授予新用户任何权限;甚至不是最简单的权限,即 CREATE SESSION 权限。用户可以登录,但他真的不能,因为登录会启动一个新会话,而我(系统)没有授予他这样做的权利。


    您应该从这里开始 - 决定必须向该用户授予哪些权限。如上所示,以 SYSTEM 身份登录到 ORCLPDB,然后从那里执行剩余的所需工作。

  • 用户8708553
    用户8708553 成员 帖子:41
     已编辑 2019 年 8 月 31 日下午 6:13

    你好数学家,


    非常感谢你的回复。我真的很感激。


    我运行了“select pdb_name, status from dab_pdbs”。和“ORCLPDB”

    被列在退货中。


    在 SQL> 提示符下,我尝试了:


               SQL> 连接SYSTEM@ORCLPDB ;


    接下来,我输入了我的密码。它给了我:


    ORA-12154: TNS: 无法解析指定的连接标识符


    你有机会知道是什么原因造成的吗?


    谢谢,


    厘米

  • 数学小子
    数学小子 成员 帖子数:9,924 金皇冠
     已编辑 2019 年 8 月 31 日下午 7:15
    user8708553写道:您好mathguy,非常感谢你你的答复。我真的很感激那个。我跑了“选择pdb_name,状态从dab_pdbs”“ORCLPDB”被列入  回报.ATSQL>提示符下,我想:SQL>连接系统@ ORCLPDB;接下来,我输入我的密码。它给了:ORA -12154:TNS:能不能化解连接标识符specifiedWould你?任何机会知道是什么引起这种谢谢你,CMH



    这是一个更长、更复杂的问题——而且,重要的是,它与你最初的问题完全无关;您最好关闭这个问题并开始另一个线程。但是,这是一个常见问题;在开始关于它的另一个主题之前,最好先看看已经写过的内容。另外,看看这个“姐妹”社区(论坛):  你最好在那里问你的问题。


    答案取决于几个因素:您的 Oracle 版本、您的操作系统、您的用户界面(您用来连接数据库的程序,例如 SQL*Plus 或 SQL Developer)等。


    我自己也是一个相对新手,我在安装我的系统时遇到了类似的问题(用于学习和实践)。我记得@EdStevens随附的博客文章非常有用;它可能有点旧(没有解决与更新的 Oracle 版本有关的问题),但它可能仍然足以了解问题并弄清楚您需要做什么。


    https://edstevensdba.wordpress.com/2011/02/09/sqlnet_overview/





来自 https://community.oracle.com/tech/developers/discussion/4288833/ora-65096-invalid-common-user-or-role-name



ORA-65096: create 12c user without c## prefix

Oracle Database Tips by Donald BurlesonNovember 21, 2015

Question:  I am trying to create a user in Oracle 12c and I don't give a rat's butt about pluggable databases.  When I try to create a user with the c## prefix I get the dreaded ORA-65096 error:

create user fred identified by flintstone;
ORA-65096: invalid common user or role name

I don't care if the user ID is used as a pluggable database, I just want to create a user named fred without being required to add the c## prefix (create user c##fred).

How do I fix the ORA-65096 error and create my use without a container database c## prefix?

Answer:  First, read my notes on common vs. local_user ID's. The oerr utility is not at all helpful for the ORA-65096 error:

ORA-65096: invalid common user or role name

Cause: An attempt was made to create a common user or role with a name that was not valid for common users or roles. In addition to the usual rules for user and role names, common user and role names must start with C## or c## and consist only of ASCII characters.

Action: Specify a valid common user or role name.

The solution to the ORA-06596 is to set a hidden parameter "_oracle_script".  When you set the undocumented (hidden) parameter "_oracle_script"=true  you can create the fred user without a C## in from of the user ID.  However, this user will not used useful in a pluggable/container database:

connect system/manager as sysdba

alter session set "_ORACLE_SCRIPT"=true;

create user fred identified by flintstone;

grant dba to pubs;

connect fred/flintstone

Always consult Oracle support before using any hidden Oracle parameters. Oracle makes a distinction in multitenant databases for local vs. "common" user ID's:

  • COMMON USERS:  Common user ID's must always be created at the CDB level and start with a C## or c## prefixes.

  •  LOCAL USERS:  Local users can only be created at the PDB layer; also must use the CONTAINER clause set to CURRENT for the user to be created.





Oracle Training from Don Burleson 

The best on site "Oracle training classes" are just a phone call away! You can get personalized Oracle training by Donald Burleson, right at your shop!



来自  http://www.dba-oracle.com/t_ora_65096_create_user_12c_without_c_prefix.htm







普通分类: