普通用户和公共用户

在oracle 12c之前数据库和数据库实例之间的关系是多对一或者一对一的关系,在oracle 12c 中引进了多租户的概念,实现了数据库实例可以对应多个数据库。cdb代表的是容器数据库,pdb代表的是可插拔数据库,实际上就是传统的数据库.而且现在也衍生了两种用户,一种是cbd用户,另外一种是pdb用户

pdb用户:只能访问可插拔数据库(pdb)
cbd用户:既可以访问cbd(根数据库),也可以访问pdb数据库(需要有权限)

创建cbd 用户

(1)打开sql plus

容器查询数据库服务 容器数据库公共用户_数据仓库


容器查询数据库服务 容器数据库公共用户_数据库_02

(2)用户登录 sys / as sysdba,查看当前容器是哪个容器数据库

容器查询数据库服务 容器数据库公共用户_数据仓库_03

容器查询数据库服务 容器数据库公共用户_数据仓库_04


可以看到我们目前处于一个cbd环境下。(3)创建一个cdb环境下的公共用户, create user c##xxx identified by xxx;这里要注意,创建cdb用户必须要加上c##,否则会创建失败 如用户名未以C##或者c##开头,则会报错:ORA-65096: 公用用户名或角色名无效。

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_05


使用命令查看,创建的用户 select username ,con_id from cdb_users where username=‘C##XXX’;

容器查询数据库服务 容器数据库公共用户_表空间_06


注意:这里如果显示的不是很好的话,一列就换行,我们可以使用以下步骤:①set linesize = 200,② col username format a20;

可以看到上面的用户已经创建了,同样这个con_id=3代表的是第一个pdb数据库的id,说明这个用户也在pdb中创建了。

(4)给这个用户赋权让这个用户可以访问所有的容器:grant create session to c##xxx container=all;

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_07


(5)现在可以切换到pdb数据库 :

①查看容器数据库有哪些,可以看到状态,连接名称,是否开启。

容器查询数据库服务 容器数据库公共用户_数据库_08


②切换到pdb数据库,alter session set container = orclpdb;

容器查询数据库服务 容器数据库公共用户_数据库_09

③连接pdb: conn sys/orcl@pdb as sysdba(注意这个@pdb,如下图,连接到的服务。另外as sysdba也必须要加上,文件位置:D:\developsoftware\server\oracle12\oracle\app\product\12.2.0\dbhome_1\network\admin)

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_10


容器查询数据库服务 容器数据库公共用户_oracle_11


④给创建的cbd用户赋权:grant resource ,create session to c##xxx;

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_12


⑤使用cbd用户连接pdb数据库:conn c##xxx/xxx@pdb;

容器查询数据库服务 容器数据库公共用户_表空间_13


用pl sql去连接一下

容器查询数据库服务 容器数据库公共用户_oracle_14

容器查询数据库服务 容器数据库公共用户_数据库_15

如上图可以看到,我们也是可以连接上的。也可以看到这个这个数据库中有这个用户,如下图

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_16


⑥:先查看一下这个用户的权限 select * from dba_sys_privs where grantee=‘C##XXX’;

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_17


上面我们给用户权限,由于权限比较小,所以我们无法创建本地用户和表空间:所以我们给这个用户授予dba权限:

首先用sys/orcl@pdb登录上去,这个用户具有dba的权限

REVOKE DBA FROM 用户名(撤销权限)

授予权限:命令 GRANT unlimited tablespace to c##xxx;授权可以在表空间建表

GRANT CREATE USER TO C##XXX;授权可以创建用户;

GRANT CREATE TABLESPACE TO C##XXX;授权创建表空间

GRANT ALTER ANY TABLE TO C##XXX;授权可以修改表;

GRANT RESOURCE TO C##XXX;授权可以修改表(增删改查)

容器查询数据库服务 容器数据库公共用户_数据仓库_18

创建普通用户

①创建一个表空间(xxx代表表空间的逻辑名字,datafile:表空间的物理空间,size:初始大小,autoextend on next:初始空间用完后的扩展空间/每次,maxsize:最大空间)

create tablespace xxx datafile ‘d:\xxx.dbf’ size 50M autoextend on next 30m maxsize 100m;

容器查询数据库服务 容器数据库公共用户_表空间_19


②创建用户pdb create user xxx1 identified by xxx1 defalut tablespace xxx temporary tablespace temp account lock;(解释:xxx1是用户名和密码,可以自己指定,tablespace:用户所属的表空间,temporary tablespace:临时表空间,用来存储临时数据的,比如:排序数据,account lock,创建出来的用户是锁定装态)

容器查询数据库服务 容器数据库公共用户_数据仓库_20


③解锁创建的用户:alter user xxx1 account unlock;

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_21


④用户连接到pdb数据库:conn xx1/xx1@pdb;

容器查询数据库服务 容器数据库公共用户_oracle_22


这个时候我们登录的话,还是登录不上的,因为我们还没有给用户权限:

赋权:grant resource ,create session to xxx1;

grant restricted session to xxx1;

容器查询数据库服务 容器数据库公共用户_数据仓库_23


容器查询数据库服务 容器数据库公共用户_数据仓库_24

再次去连接:conn xxx1/xxx1@pdb

容器查询数据库服务 容器数据库公共用户_数据库_25

创建表

①创建表:create table a(a number(11,0),name varchar2(18));

容器查询数据库服务 容器数据库公共用户_容器查询数据库服务_26


②需要给用户进行表空间分配权限,才能进行操作表:alter user xxx1 quota unlimited on xxx;

或者:alter user xxx1 quota 5m on xxx; xxx代表表空间