暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

如何在 19c 容器数据库环境中通过 OS 身份验证连接到 PDB

原创 lxs_data 2022-06-20
1674

            学习翻译自Oracle官方文档  

版本

      Oracle 数据库 - 企业版 19.3.0.0.0 及更高版本。

目的

    19c容器数据库环境下通过OS认证连接PDB的方法。

方法

      由于 PDB 中没有可用的遗赠连接,因此无法通过 OS 身份验证直接连接到 PDB。可以通过登录触发器 SYS 或其他外部用户可以在没有密码的情况下连接到 PDB。


1. 设置ORACLE_PDB_SID 。SYS用户可以通过预定义的触发器DBMS_SET_PDB和环境变量ORACLE_PDB_SID连接到PDB。设置ORACLE_PDB_SID

$export ORACLE_PDB_SID=PDB1

$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 17 13:25:04 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show con_name

CON_NAME
------------------------------
PDB1
SQL> quit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

$ unset ORACLE_PDB_SID
$ sqlplus / as sysdba

SQL*Plus: Release 19.0.0.0.0 - Production on Tue Nov 17 13:27:49 2020
Version 19.3.0.0.0

Copyright (c) 1982, 2019, Oracle.  All rights reserved.


Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

SQL> show con_name

CON_NAME
------------------------------
CDB$ROOT
SQL> quit
Disconnected from Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.3.0.0.0

2.对于非SYS用户,通过触发器定义SET_PDB和环境变量ORACLE_PDB连接到PDB。

sqlplus / as sysdba   
--修改初始化 parameter os_authent_prefix 与 common_user_prefix参数为相同值
show parameter os_authent_prefix
alter system set os_authent_prefix='C##' scope=spfile;

--创建普通用户并授予必要的权限,例如创建会话、设置容器等。
create user c##<OS_USER_NAME> identified externally container=all;
grant create session,set container,<Other Privilege> to c##<OS_USER_NAME>;

----重新启动数据库
shutdown immediate
startup

--为这个普通用户创建登录触发器。
sqlplus / as sysdba
CREATE OR REPLACE TRIGGER SYS.set_pdb
AFTER LOGON ON DATABASE
WHEN (USER like '&USERNAME')
DECLARE
pdb_name varchar(64);
BEGIN
 sys.DBMS_SYSTEM.get_env('ORACLE_PDB',pdb_name);
 if(pdb_name is not null) then
  EXECUTE IMMEDIATE 'alter session set container='||'"'||pdb_name||'"';
 end if;
EXCEPTION when others then
 null;
END set_pdb;
/

--sqlnet.ora 设置:
SQLNET.AUTHENTICATION_SERVICES = (ALL)


--Connect test
export ORACLE_PDB=<Target PDB name>
sqlplus /
show con_name
show user






「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论