Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12

Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12

  • 第二期 数据库用户管理
    • 1.新的变化
    • 2.公有用户管理
    • 3.本地用户管理
    • 下期预告:

由于本周周一周二休假外出,加上周四凌晨做ADG灾备演练,所以本期就放到了星期五。

第二期 数据库用户管理

1.新的变化

容器数据库引入以后,从传统的一个实例中只有一个数据库转化到了一个实例中存在一个CDB和多个PDB,CDB作为根容器不存放数据,而各个PDB存放数据但又互相独立,因此,12c的数据库用户管理产生了较大的变化:CDB用户,作为跨容器公有用户(common_user),同时存在于CDB和PDB之中;PDB用户只存在于PDB内,为本地用户(local user)。

2.公有用户管理

CDB中的公有用户有sys,system,dbsnmp等系统用户,这些用户即存在于CDB中,也会随着PDB创建在PDB中被创建,其权限是继承CDB的,比如sys用户在PDB中也拥有dba权限。
当然除去系统用户,在CDB中也能手工创建普通公有用户,此类用户必须在CDB$ROOT容下中创建,默认必须以C##开头,由参数common_user_prefix控制,如下图所示:
参数截图
当然这个参数是可以调整,甚至可以为空,但是为了避免和PDB内用户产生冲突建议使用默然设置。在创建完普通跨PDB用户后,在CDB和各个PDB中该用户是不包含任何权限的,并且在每个PDB中需要单独赋权,即该用户虽然存在于CDB和每个PDB中,但是在CDB和每个PDB中的权限是不同的。
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第1张图片
·创建公有用户c##test,未授权情况下无法连接到CDB和PDB
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第2张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第3张图片
·在PDB1中对c##test用户授权,授权后可以连接到PDB1,但无法连接到CDB和其他PDB
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第4张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第5张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第6张图片
·在CDB中使用container=all子句对所有容器中的c##test授权,授权后可以访问CDB和所有PDB
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第7张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第8张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第9张图片
Oracle数据库管理每周一例(12.2,18c,19c) 2020-06-12_第10张图片
·授权中container子句包含all(对所有容器该公有用户授权)和current(默认,对当前容器公有用户授权)两个选项

这里顺便引入下如何在sqlplus内切换容器和连接到pdb:

alter session set container=pdb_name;
sqlplus user/password@ip:port/pdb_service_name

3.本地用户管理

PDB本地用户管理和传统数据库没有多大区别,切换至PDB,然后创建用户并赋权。这些用户仅存在于PDB内。

下期预告:

容器数据库的连接。

你可能感兴趣的:(Oracle,oracle)