-- 查看当前登录用户的权限或角色
select * from user_role_privs;
-- 权限privilege
select * from session_privs;
-- 授予zhangsan用户创建session的权限,即登陆权限
grant create session to zhangsan;
-- 授予zhangsan用户创建session的权限,即登陆权限
grant create session to zhangsan;
-- 授予zhangsan用户使用表空间的权限
grant unlimited tablespace to zhangsan;
-- 授予创建表的权限
grant create table to zhangsan;
-- 授予删除表的权限
grant drop any table to zhangsan;
-- 插入表的权限
grant insert any table to zhangsan;
-- 修改表的权限
grant update any table to zhangsan;
-- 创建视图权限
grant create view to zhangsan ;
--创建角色
create role myrole;
--将创建session的权限授予myrole
grant create session to myrole;
--授予zhangsan用户myrole的角色
grant myrole to zhangsan;
--删除角色
drop role myrole;
-- Oracle 创建普通用户,并赋予权限
-- 连接数据库。
sys or system / manager as sysdba;
-- 创建普通用户peng:
create user peng identified by pwd_oracle;
-- 删除用户
drop user peng;
-- 授予用户登录数据库的权限
grant create session to peng;
-- 授予用户操作表空间的权限:
grant unlimited tablespace to peng;
grant create tablespace to peng;
grant alter tablespace to peng;
grant drop tablespace to peng;
grant manage tablespace to peng;
-- 授予用户操作表的权限:(包含有create index权限, alter table, drop table权限)
grant create table to peng;
-- 授予用户操作视图的权限: (包含有alter view, drop view权限)
grant create view to peng;
-- 授予用户操作触发器的权限: (包含有alter trigger, drop trigger权限)
grant create trigger to peng;
-- 授予用户操作存储过程的权限:(包含有alter procedure, drop procedure 和function 以及 package权限)
grant create procedure to peng;
-- 授予用户操作序列的权限: (包含有创建、修改、删除以及选择序列)
grant create sequence to peng;
-- 授予用户回退段权限:
grant create rollback segment to peng;
grant alter rollback segment to peng;
grant drop rollback segment to peng;
-- 授予用户同义词权限:(包含drop synonym权限)
grant create synonym to peng;
grant create public synonym to peng;
grant drop public synonym to peng;
-- 授予用户关于用户的权限:
grant create user to peng;
grant alter user to peng;
grant become user to peng;
grant drop user to peng;
-- 授予用户关于角色的权限:
grant create role to peng;
-- 授予用户操作概要文件的权限
grant create profile to peng;
grant alter profile to peng;
grant drop profile to peng;
-- 允许从sys用户所拥有的数据字典表中进行选择
grant select any dictionary to peng;
cmd sqlplus / nolog
SQL> conn / as sysdba;
SQL>create user username(zhangsan) identified by password(zhangsan);
系统权限分类【角色】
DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构
RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
CONNECT角色: --是授予最终用户的典型权利,最基本的
ALTER SESSION --修改会话
CREATE CLUSTER --建立聚簇
CREATE DATABASE LINK --建立数据库链接
CREATE SEQUENCE --建立序列
CREATE SESSION --建立会话
CREATE SYNONYM --建立同义词
CREATE VIEW --建立视图
RESOURCE角色: --是授予开发人员的
CREATE CLUSTER --建立聚簇
CREATE PROCEDURE --建立过程
CREATE SEQUENCE --建立序列
CREATE TABLE --建表
CREATE TRIGGER --建立触发器
CREATE TYPE --建立类型
--查看是否是容器服务器
show parameter enable_pluggable_database
CDB与PDB
oracle12c增加了CDB和PDB的概念。
CDB全称为Container Database,中文翻译为数据库容器,PDB全称为Pluggable Database,即可插拔数据库。
在ORACLE 12C之前,实例与数据库是一对一或多对一关系(RAC):即一个实例只能与一个数据库相关联,数据库可以被多个实例所加载。而实例与数据库不可能是一对多的关系。当进入ORACLE 12C后,实例与数据库可以是一对多的关系。
也就是说12c里面会在CDB下创建多个PDB,每个PDB类似于11g里面的实例,然后一个CDB下的各个PDB是相互隔离的。
本地用户
当连接到多租户的数据库中,用户权限的管理相对传统的 Oracle 单数据库环境稍有不同。在多租户环境中有两种类型的用户。
共同用户(Common User): 该用户存在所有容器 (根和所有的 Pdb) 中。常见的用户的用户名必须与"C##"或"c##"作为前缀,并包含唯一的 ASCII 或 EBCDIC 字符。
本地用户(Local User): 用户只有在特定的 PDB 中存在。同样的用户名中可以存在多个Pdb中创建,但它们之间没有关系。
同样,有两种类型的角色。
共同角色(Common Role): 该角色在所有容器 (根和所有的 Pdb) 中。
本地角色(Local Role): 该角色只存在于特定的 PDB。可以在多个 Pdb中创建相同的角色名称,但它们之间没有关系。
一些 DDL 语句有扩充,以使他们能够定向到当前容器还是所有容器的CONTAINER子句。它的使用将在以下各节中进行演示。
使用idea连接Oracle19c PDB数据库
只要将URL中端口号后面的冒号,改成斜杠即可
jdbc:oracle:thin:@127.0.0.1:1521/orclpdb1
容器操作
--打开容器
alter pluggable database pdb名称 open;
--关闭容器
alter pluggable database pdb名称 close;
--保存容器当前状态,避免主机/orcl服务重启时,pdb自动关闭
alter pluggable database all save state;
--切换容器
alter session set container=pdb名称(指定容器);
-- 删除pdb,同时删除数据文件
SQL> drop pluggable database pdb_name including datafiles;
-- 删除pdb 默认保留数据文件
SQL> drop pluggable database pdb_name;
-- 删除pdb,但保留数据文件
SQL> drop pluggable database pdb_name keep datafiles;
-- 关闭PDB
SQL> alter pluggable database pdb2 close immediate;
-- 拨出PDB
SQL> alter pluggable database pdb2 unplug into '/home/oracle/pdb2.xml';
-- 删除PDB
SQL> drop pluggable database pdb2;
-- 删除PDB 使用参数 keep datafiles
SQL> drop pluggable database pdb2 keep datafiles;
-- 创建PDB
SQL> create pluggable database pdb2 using '/home/oracle/pdb2.xml' nocopy;
-- 打开PDB
SQL > alter pluggable database pdb2 open;
-- 查看插入的PDB是否有报错
SQL > select name,cause,type,message,status from PDB_PLUG_IN_VIOLATIONs order by name;
Oracle12c数据库创建pdb的3种方法
-- 根据seed创建pdb
CREATE PLUGGABLE DATABASE salespdb
ADMIN USER salesadm IDENTIFIED BY password
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/pdbseed/',
'/disk1/oracle/dbs/salespdb/');
--说明:/disk1/oracle/dbs/pdbseed/为种子数据库数据文件存放路径,/disk1/oracle/dbs/salespdb/为新的pdb数据库文件存放路径。
-- 通过已知的pdb创建新的pdb
CREATE PLUGGABLE DATABASE newpdb FROM salespdb
FILE_NAME_CONVERT = ('/disk1/oracle/dbs/salespdb/', '/disk1/oracle/dbs/newpdb/')
PATH_PREFIX = '/disk1/oracle/dbs/newpdb';
-- 说明:此处没有明确的指定存储空间的限制,创建出的newpdb与salespdb是比较相似的。
-- 通过xml的方式创建pdb
CREATE PLUGGABLE DATABASE salespdb
USING '/disk1/usr/salespdb.xml'
SOURCE_FILE_NAME_CONVERT =
('/disk1/oracle/dbs/salespdb/', '/disk2/oracle/dbs/salespdb/')
NOCOPY
STORAGE (MAXSIZE 2G)
TEMPFILE REUSE;