others linux服务器运维 django3 监控 k8s golang 数据库 大数据 前端 devops 理论基础 java oracle 运维日志

oracle 12c 用户 user

访问量:1669 创建时间:2021-04-09

oracle官方文档地址

oracle12c 多租户环境,有2种用户:公用用户(Common User)和本地用户(Local User)。 多租户环境中,CDB Common User和 application common users可以访问其各自的容器,而本地用户(Local User)只用于特定于PDB。

CDB普通用户在CDB根目录中定义,并且可以访问CDB内的所有PDB,包括应用程序根目录及其应用程序PDB。应用程序普通用户在应用程序根目录中定义,并且可以访问属于应用程序容器的PDB。CDB PDB或应用程序PDB中的本地用户只能访问本地用户所在的PDB。

CDB Common Users

oracle 12c 有CDB公共用户和Application公共用户两种公共用户 CDB公共用户是在CDB root下创建的用户,在CDB root、每个现有的或者未来创建的PDB和Application root中都存在唯一标识和密码。CDB公共用户既可以是Oracle提供的也可以自己创建,例如SYS和SYSTEM就是Oracle提供的公共用户,它们具有DBA权限,可以连接整个CDB环境。 自己创建的CDB公共用户的用户名必须以C##或c##开头。每个CDB公共用户可以在不同的PDB中拥有不同的权限,例如创建一个用户c##test,只赋予它连接PDB1的权限而不赋予连接PDB2的权限。 Application公共用户是在Application root下创建的用户,它只在Application容器中是公用的。换句话说,Application公共用户无法CDB公共用户那样,能够连接整个CDB环境。Application公共用户负责创建、打开、关闭、插拔和删除Application PDB。

[oracle@esbqasdb ~]$ sqlplus /  as  sysdba
SQL*Plus: Release 12.2.0.1.0 Production on Fri Apr 9 04:45:28 2021
Copyright (c) 1982, 2016, Oracle.  All rights reserved.
Connected to:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production

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 ESBQASPDB                      READ WRITE NO
SQL> create user C##test identified by test;
User created.
###链接pdb
SQL> conn C##test/test@192.168.52.128:1521/ESBQASPDB
ERROR:
ORA-01045: user C##TEST lacks CREATE SESSION privilege; logon denied
###连接cdb root 
SQL> conn C##test/test@192.168.52.128:1521/esbqas
ERROR:
ORA-01045: user C##TEST lacks CREATE SESSION privilege; logon denied
###授权链接CDB$ROOT权限并验证
SQL> conn / as sysdba
Connected.
SQL> grant create session to C##test container=current;
Grant succeeded.
SQL> conn C##test/test@192.168.52.128:1521/esbqas
Connected.
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
###链接未授权的pdb
SQL>  conn C##test/test@192.168.52.128:1521/ESBQASPDB
ERROR:
ORA-01045: user C##TEST lacks CREATE SESSION privilege; logon denied
###授权pdb(container=all或者container=pddname),并验证链接
SQL>  conn / as sysdba
Connected.
SQL>  grant create session to C##test container=all;
Grant succeeded.
SQL>  conn C##test/test@192.168.52.128:1521/ESBQASPDB
Connected.

Application Common Users

创建Application容器的同时,创建Application Common User apptest,与CDB公共用户不同的是用户名不需要c##开头。

[root@esbqasdb ~]# mkdir -pv /oracle/u01/app/oracle/oradata/esbqas/apptest
mkdir: created directory ‘/oracle/u01/app/oracle/oradata/esbqas/apptest’
[root@esbqasdb ~]# chown oracle:oinstall !$
chown oracle:oinstall /oracle/u01/app/oracle/oradata/esbqas/apptest
#########下面数据库操作
SQL> conn / as sysdba
SQL> alter system set db_create_file_dest='/oracle/u01/app/oracle/oradata/esbqas/apptest';
System altered.
SQL> create pluggable database apptest as application container admin user apptest identified by apptest;
Pluggable database created.
SQL> column PDB_NAME   format a40 
#######通过视图dba_pdbs.application_root字段查看是否是Application root
SQL> select pdb_id,pdb_name,status,application_root,application_pdb from dba_pdbs;

    PDB_ID PDB_NAME                                 STATUS     APP APP
---------- ---------------------------------------- ---------- --- ---
         3 ESBQASPDB                                NORMAL     NO  NO
         2 PDB$SEED                                 NORMAL     NO  NO
         4 APPTEST                                  NEW        YES NO

[oracle@esbqasdb ~]$ sqlplus apptest/apptest@192.168.52.128:1521/apptest
SQL> show con_name

CON_NAME
------------------------------
APPTEST
SQL> conn C##test/test@192.168.52.128:1521/apptest
Connected.
SQL> show con_name

CON_NAME
------------------------------
APPTEST
SQL> conn apptest/apptest@192.168.52.128:1521/ESBQASPDB
ERROR:
ORA-01017: invalid username/password; logon denied
Warning: You are no longer connected to ORACLE.

总结CDB公共用户(有create session权限)可以连接任意容器;application 公共用户可以连接application内容器;CDB公共用户前缀是c##或C##。

本地用户 local user

在独立的pdb内部创建,只有在这个pdb中有权限。

SQL> alter session set container=ESBQASPDB;
Session altered.

SQL> create user testss identified by 123456;
User created.

SQL> grant create session  to testss;
Grant succeeded.

SQL> conn testss/123456@192.168.52.128:1521/ESBQASPDB
Connected.
登陆评论: 使用GITHUB登陆