官术网_书友最值得收藏!

Effects of plugging/unplugging operations on users, roles, and privileges

The purpose of this recipe is to show what is going to happen to users, roles, and privileges when you unplug a pluggable database from one container database (cdb1) and plug it into some other container database (cdb2).

Getting ready

To complete this recipe, you will need the following:

  • Two container databases (cdb1 and cdb2)
  • One pluggable database (pdb1) in the container database cdb1
  • Local user mike in the pluggable database pdb1 with the local create session privilege
  • The common user c##john with the create session common privilege and create synonym local privilege on the pluggable database pdb1

How to do it...

  1. Connect to the root container of cdb1 as user sys:
    SQL> connect sys@cdb1 as sysdba
    
  2. Unplug pdb1 by creating an XML metadata file:
    SQL> alter pluggable database pdb1 unplug into '/u02/oradata/pdb1.xml';
    
  3. Drop pdb1 and keep the datafiles:
    SQL> drop pluggable database pdb1 keep datafiles;
    
  4. Connect to the root container of cdb2 as user sys:
    SQL> connect sys@cdb2 as sysdba
    
  5. Create (plug) pdb1 to cdb2 by using the previously created metadata file:
    SQL> create pluggable database pdb1 using '/u02/oradata/pdb1.xml' nocopy;
    

How it works...

By completing the previous steps, you unplugged pdb1 from cdb1 and plugged it into cdb2. After this operation, all local users and roles (in pdb1) are migrated with the pdb1 database.

The following is how you try to connect to pdb1 as a local user:

SQL> connect mike@pdb1

All local privileges are migrated even if they are granted to common users/roles. However, if you try to connect to pdb1 as a previously created common user, c##john, you'll get an error, as follows:

SQL> connect c##john@pdb1 
 ERROR:
ORA-28000: the account is locked
Warning: You are no longer connected to ORACLE.

This happened because, after migration, common users are migrated in a pluggable database as locked accounts. You can continue to use objects in these users' schemas, or you can create these users in a root container of a new CDB. To do this, we first need to close pdb1:

sys@CDB2> alter pluggable database pdb1 close;
Pluggable database altered. 
 sys@CDB2> create user c##john identified by oracle container=all;
User created. 
 sys@CDB2> alter pluggable database pdb1 open;
Pluggable database altered.

If we try to connect to pdb1 as the user c##john, we will get the following error:

SQL> conn c##john/oracle@pdb1
ERROR:
ORA-01045: user C##JOHN lacks CREATE SESSION privilege; logon denied
Warning: You are no longer connected to ORACLE.

Even though c##john had the create session common privilege in cdb1, he cannot connect to the migrated PDB. This is because common privileges are not migrated! So, we need to give the create session privilege (either common or local) to the user c##john, as follows:

sys@CDB2> grant create session to c##john container=all;
 Grant succeeded.

In the earlier recipe (Granting privileges and roles locally), we granted a create synonym local privilege to a user, c##john. Let's try this privilege on the migrated pdb2:

c##john@PDB1> create synonym emp for hr.employees;
Synonym created.

This proves that local privileges are always migrated.

主站蜘蛛池模板: 象州县| 西昌市| 徐水县| 响水县| 南投市| 平昌县| 桓台县| 会理县| 黄陵县| 平舆县| 错那县| 平度市| 灵山县| 宝鸡市| 阜新| 驻马店市| 南城县| 南溪县| 阿勒泰市| 天镇县| 宁武县| 本溪| 油尖旺区| 襄垣县| 波密县| 丰都县| 榆林市| 永德县| 天津市| 宜兰市| 祥云县| 农安县| 囊谦县| 玛多县| 濮阳县| 伊宁市| 洞口县| 大厂| 巴塘县| 昔阳县| 会东县|