普通用户和公共用户
在oracle 12c之前数据库和数据库实例之间的关系是多对一或者一对一的关系,在oracle 12c 中引进了多租户的概念,实现了数据库实例可以对应多个数据库。cdb代表的是容器数据库,pdb代表的是可插拔数据库,实际上就是传统的数据库.而且现在也衍生了两种用户,一种是cbd用户,另外一种是pdb用户
pdb用户:只能访问可插拔数据库(pdb)
cbd用户:既可以访问cbd(根数据库),也可以访问pdb数据库(需要有权限)
创建cbd 用户
(1)打开sql plus
(2)用户登录 sys / as sysdba,查看当前容器是哪个容器数据库
可以看到我们目前处于一个cbd环境下。
(3)创建一个cdb环境下的公共用户, create user c##xxx identified by xxx;这里要注意,创建cdb用户必须要加上c##,否则会创建失败 如用户名未以C##或者c##开头,则会报错:ORA-65096: 公用用户名或角色名无效。
使用命令查看,创建的用户 select username ,con_id from cdb_users where username=‘C##XXX’;
注意:这里如果显示的不是很好的话,一列就换行,我们可以使用以下步骤:①set linesize = 200,② col username format a20;
可以看到上面的用户已经创建了,同样这个con_id=3代表的是第一个pdb数据库的id,说明这个用户也在pdb中创建了。
(4)给这个用户赋权让这个用户可以访问所有的容器:grant create session to c##xxx container=all;
(5)现在可以切换到pdb数据库 :
①查看容器数据库有哪些,可以看到状态,连接名称,是否开启。
②切换到pdb数据库,alter session set container = orclpdb;
③连接pdb: conn sys/orcl@pdb as sysdba(注意这个@pdb,如下图,连接到的服务。另外as sysdba也必须要加上,文件位置:D:\developsoftware\server\oracle12\oracle\app\product\12.2.0\dbhome_1\network\admin)
④给创建的cbd用户赋权:grant resource ,create session to c##xxx;
⑤使用cbd用户连接pdb数据库:conn c##xxx/xxx@pdb;
用pl sql去连接一下
如上图可以看到,我们也是可以连接上的。也可以看到这个这个数据库中有这个用户,如下图
⑥:先查看一下这个用户的权限 select * from dba_sys_privs where grantee=‘C##XXX’;
上面我们给用户权限,由于权限比较小,所以我们无法创建本地用户和表空间:所以我们给这个用户授予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;授权可以修改表(增删改查)
创建普通用户
①创建一个表空间(xxx代表表空间的逻辑名字,datafile:表空间的物理空间,size:初始大小,autoextend on next:初始空间用完后的扩展空间/每次,maxsize:最大空间)
create tablespace xxx datafile ‘d:\xxx.dbf’ size 50M autoextend on next 30m maxsize 100m;
②创建用户pdb create user xxx1 identified by xxx1 defalut tablespace xxx temporary tablespace temp account lock;(解释:xxx1是用户名和密码,可以自己指定,tablespace:用户所属的表空间,temporary tablespace:临时表空间,用来存储临时数据的,比如:排序数据,account lock,创建出来的用户是锁定装态)
③解锁创建的用户:alter user xxx1 account unlock;
④用户连接到pdb数据库:conn xx1/xx1@pdb;
这个时候我们登录的话,还是登录不上的,因为我们还没有给用户权限:
赋权:grant resource ,create session to xxx1;
grant restricted session to xxx1;
再次去连接:conn xxx1/xxx1@pdb
创建表
①创建表:create table a(a number(11,0),name varchar2(18));
②需要给用户进行表空间分配权限,才能进行操作表:alter user xxx1 quota unlimited on xxx;
或者:alter user xxx1 quota 5m on xxx; xxx代表表空间