I am struggling connecting to a pluggable DB for which I created local users.
I have an Oracle 21c XE on my machine. The CDB is XE. I logged into SID=XE with sys as sysdba. There I created a PDB as follows:
create pluggable database GRE
admin user manager identified by manager
roles = (dba)
file_name_convert = ('C:\ORADATA\XE\PDBSEED', 'C:\ORADATA\XE\GRE')
;
ALTER PLUGGABLE DATABASE GRE OPEN;
Then I switched to the pluggable DB:
alter session set container = GRE;
select sys_context('USERENV', 'CON_NAME') from dual;
SYS_CONTEXT('USERENV','CON_NAME')
GRE
Then I created a user and assigned roles and priviledges:
-- USER SQL
CREATE USER "user1" IDENTIFIED BY "user1"
DEFAULT TABLESPACE "DATA"
TEMPORARY TABLESPACE "TEMP" container=current;
-- QUOTAS
ALTER USER "user1" QUOTA UNLIMITED ON "DATA";
-- ROLES
GRANT "CONNECT" TO "user1" ;
GRANT "RESOURCE" TO "user1" ;
ALTER USER "user1" DEFAULT ROLE "CONNECT","RESOURCE";
-- SYSTEM PRIVILEGES
GRANT DROP ANY MATERIALIZED VIEW TO "user1" ;
GRANT CREATE ANY SYNONYM TO "user1" ;
GRANT DROP ANY SYNONYM TO "user1" ;
GRANT DROP ANY VIEW TO "user1" ;
GRANT CREATE ANY VIEW TO "user1" ;
GRANT CREATE ANY MATERIALIZED VIEW TO "user1" ;
This is the output of lsnrctl status
:
Services Übersicht...
Dienst "541e76d5c7264140b887e5606a1a0486" hat 1 Instanzen.
Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Dienst "CLRExtProc" hat 1 Instanzen.
Instanz "CLRExtProc", Status UNKNOWN, hat 1 Handler für diesen Dienst...
Dienst "XE" hat 1 Instanzen.
Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Dienst "XEXDB" hat 1 Instanzen.
Instanz "xe", Status READY, hat 1 Handler für diesen Dienst...
Dienst "gre" hat 1 Instanzen.
Instanz "xe", Status READY, hat 2 Handler für diesen Dienst...
Der Befehl wurde erfolgreich ausgeführt.
It can be seen that the PDB gre
is available.
When I try to connect to the PDB using the local user, the login is denied with ORA-01017.
I tried to figure out how to deal with PDBs and local users, but I am unable to understand how I can get this working. Maybe I understand the concept wrongly, and I need to use common users and connect to the CDB first and from there switch to the PDB?
lsnrctl status
to get a list of active service names for the server.lsnrctl status
.