由于我安装的ORACLE
12C中是不自带scott这个用户的,所以我需要用到测试环境来做数据库测试的时候,还需要手动创建一个scoot用户。
默认登陆SQLPLUS的sysdba是在CDB中。
因为CDB环境中创建的用户又太通用了,所以不准备用c##USER_NAME这种方式来创建CDB的scott用户,所以我需要查看一下我的PDB名称都有哪些:
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB READ WRITE YES
SQL>
这里需要注意的是,你的PDB是否正常开启了,如果OPEN下显示的不是READ WRITE 而是 MOUNTED:
SQL> show pdbs;
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB MOUNTED
SQL>
需要将PDB开启:SQL> alter pluggable database all open;
开启了PDB之后使用我们登陆的SYS用户从CDB切换到PDB
SQL> alter session set container=ORCLPDB;
会话已更改。
查看当前所在的名称:
SQL> show con_name;
CON_NAME
------------------------------
ORCLPDB
所在的实例为上面查到的PDB实例,在ORCLPDB内创建scott用户:
SQL> CREATE USER scott IDENTIFIED BY tiger
2 DEFAULT TABLESPACE users
3 TEMPORARY TABLESPACE temp
4 ACCOUNT UNLOCK;
创建完成scott用户后查看一下是否有这个用户:
SQL> select username from dba_users;
USERNAME
--------------------------------------------------------------------------------
SYSKM
ORACLE_OCM
SYS$UMF
SCOTT --已经创建完成了scott用户
SYSDG
SPATIAL_CSW_ADMIN_USR
已选择 39 行。
为刚创建的scott用户赋予使用权限:
SQL> grant connect,resource,unlimited tablespace to scott;
Grant succeeded.
已经创建完成了scott用户,但是目前我们还不能以scott用户登陆我们的数据库,因为我们还没有写本地连接接口配置。
在oracle安装目录下的/product/12/db_1/network/admin/tnsnames.ora文件内增加:
ORCL = --这里写CDB实例名称
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orclpdb) --这里写你的PDB实例名称
)
)
写完之后再登陆sqlplus 还是会提示错误,但是提示的不会是用户错误这个异常了,而是没有权限:
SQL> conn scott/tiger@orclpdb;
ERROR:
ORA-01035: ORACLE 只允许具有 RESTRICTED SESSION 权限的用户使用
警告: 您不再连接到 ORACLE。
SQL> show user;
USER 为 ""
SQL>
需要用sys用户来给scott用户赋予警告里提示的RESTRICTED SESSION权限:
在pdb(使用上面说过的alter session进入)中查看一下scott所拥有的权限
SQL> select * from dba_role_privs where grantee='SCOTT';
GRANTEE GRANTED_ROLE ADM DEL DEF COM INH
-------------------------------------------------------------------------------------------------------------------------------- -------------------------------------------------------------------------------------------------------------------------------- --- --- --- --- ---
SCOTT RESOURCE NO NO YES NO NO
SCOTT CONNECT NO NO YES NO NO
SQL> select grantee,privilege from dba_sys_privs where grantee='SCOTT';
GRANT PRIVILEGE
----- ----------------------------------------
SCOTT UNLIMITED TABLESPACE
发现scott用户确实没有RESTRICTED SESSION权限,需要赋予scott用户RESTRICTED SESSION权限:
SQL> GRANT RESTRICTED SESSION TO scott;
Grant succeeded.
这时我们再使用scott用户登陆数据库PDB就可以正常进入了:
[oracle@localhost ~]$ sqlplus scott/tiger@orclpdb
SQL*Plus: Release 12.2.0.1.0 Production on 星期二 3月 31 11:10:30 2020
Copyright (c) 1982, 2016, Oracle. All rights reserved.
连接到:
Oracle Database 12c Enterprise Edition Release 12.2.0.1.0 - 64bit Production
SQL> show user;
USER 为 "SCOTT"
到这里自行创建的SCOTT用户就可以正常登陆PDB实例了,但是想要查看SCOTT用户只能在PDB中才可以查看得到,如果以sys用户进入CDB下查看所有用户是没有SCOTT这个用户的。