1.1 Common user公共用户/通用用户
可以管理CDB,如果有权限也可以操作PDB。
公共用户可以在PDB数据库之间进行赋权操作,可以开关PDB(有权限),可以对整个CDB进行恢复操作。
公共用户可以在不同的PDB数据库中有不同的权限。
注意:如果先插入一个PDB大CDB中,如果有用户名相同的公共用户,会进行合并,密码是新插入的用户的密码,但是这个用户锁住的。
1.2 Local user本地用户
和公共用户不同之处:
1.本地用户不能创建公共用户,但是可以创建和修改本地用户权限或者赋权给本地化的公共用户和本地用户在PDB中。
2.可以赋公共角色给本地用户,但是权限只能用于本地用户的PDB。
3.同一个PDB中不能有重复名字的本地用户
4.只要有相应的权限,本地用户也可以访问公共用户里的对象。
5.可以editions-enable一个本地用户,而不是公共用户。
1.3 创建公共用户
需要注意的地方:
1.要有相应的创建权限(CREATE USER)
2.当前容器为CDB$ROOT
3.用户名必须是C##或者c##开头(可以修改),对已经存在的系统用户没有影响。例如sys,system
4.为了指定一个用户为公共用户,需要加上CONTAINER=ALL的子句。如果当前容器是root,不加也可以。
5.如果要指定表空间,临时表空间等,那么这些表空间必须在所有PDBS都存在。
6.用户创建的对象不能再PDB之间共享,但是通过数据库公共用户创建的对象可以在整个CDB中共享。
例子:
1
2
3
4
5
6
7
|
CREATE USER c##hr_admin
IDENTIFIED BY password
DEFAULT TABLESPACE data_ts
QUOTA 100M ON temp_ts
QUOTA 500K ON data_ts
TEMPORARY TABLESPACE temp_ts
CONTAINER = ALL;
|
赋权限:
1
|
GRANT SET CONTAINER, CREATE SESSION,DBA,PDB_DBA TO c##hr_admin CONTAINER = ALL;
|
注意:PDB_DBA这个角色,用于查询PDB中tables/views
common_user_prefix参数设定要求公共参数需要用C##开头,可以调整修改
1
2
3
4
|
SQL> show parameter common_user_prefix
NAME TYPE VALUE
------------------------------------ -----------------------------------------
common_user_prefix string C##
|
1.4 创建本地用户
1.首先连接到PDB,然后创建对应的PDB本地用户
2.本地用户一定不能C##或者c##开头
3.可以通过CONTAINER=CURRENT子句指定创建的用户作为本地用户,如果是已经登录到PDB中,可以不指定该子句。
4.本地用户名不可以和公共用户名相同。但是可以在不同的PDB中有相同的本地用户名。
5.使用本地用户,公共用户连接到PDB都可以创建新的本地用户。
例子:
1
2
3
4
5
6
7
8
|
CREATE USER kmurray
IDENTIFIED BY password
DEFAULT TABLESPACE data_ts
QUOTA 100M ON temp_ts
QUOTA 500K ON data_ts
TEMPORARY TABLESPACE temp_ts
PROFILE hr_profile
CONTAINER = CURRENT;
|
修改本地用户权限,去访问其他PDB(EMP_DB, HR_DB)中的对象
1
2
3
4
5
6
|
ALTER USER c##hr_admin
DEFAULT TABLESPACE data_ts
TEMPORARY TABLESPACE temp_ts
QUOTA 100M ON data_ts
QUOTA 0 ON temp_ts
SET CONTAINER_DATA = (EMP_DB, HR_DB) FOR V$SESSION CONTAINER = CURRENT;<br>转:http:
//www.cndba.cn/Expect-le/article/258
|