zoukankan      html  css  js  c++  java
  • Oracle 19c 新特性:Schema Only Account详解

    点击▲关注 “数据和云”   给公众号标星置顶

    更多精彩 第一时间直达


    640?wx_fmt=jpeg


    老张拉呱:thomas zhang,甲骨文云平台事业部资深技术顾问,2008年加入甲骨文公司数据库咨询部门,10+年甲骨文解决方案咨询支持经验,资深系统工程师、Oracle OCM认证专家,具有丰富的Cloud /IT项目经验。目前主要负责甲骨文中国北方区(医院/卫生、交通、制造、教育、政府、证券、媒体、金融、零售等行业)客户的数据库、中间件、IaaS/PaaS、集成系统等相关技术解决方案咨询工作。


    签名:我为人人,人人为我,三人行,必有我师

    新浪微博: http://weibo.com/tomszrp



    从 Database 18c 开始,可以创建 Schema Only Account(可以拥有对象、权限/角色,但不允许直接连接的 Schema),不过可以通过 single session proxy 的方式连接访问。

     

    这种类型的 account 设计既是为了满足 Oracle-provided schemas 同时也适用于客户应用设计的需要,创建用户的时候不需要指定密码或授权方式。除非使用 ALTER USER 语句分配身份验证方法,否则无法对 Schema Only Account 进行身份验证。DBA_USERS_WITH_DEFPWD数据字典视图中不再包含Schema Only Account 信息。

     

    从19c开始,大部分Oracle-providedschemas,除了SYS,SYSTEM以及Sample Schema User Accounts(比如HR)都是Schema Only Account。也就是说,这些帐户都是在没有密码的情况下创建的,好处是管理员无需周期性的维护这些密码,同时也降低了攻击者使用默认密码侵入这些帐户的安全风险。我们可以通过dba_users数据字典的authentication_type字段来判断,如果是NONE,表示该account是Schema Only的。当然了,当我们确实有需要的时候,可以为这些帐户分配密码,但是为了更好的安全性,Oracle 建议您使用完毕后将它们再设置为Schema Only。

     

    •关于Schema Only Account的一些说明:

         1)可以是 administrator 和 non-administratoraccounts

         2)这种account只能在data base instance中创建,不支持 ASM instance

         3)可以授予 system privileges (比如CREATE ANY TABLE)和管理员角色(比如DBA)

         4)可以创建对象比如tables 、procedures等(根据所授权限决定)

         5)可以配置通过 single session proxy的方式连接访问

         6)不能通过 data base link 使用


    tips:18c中Schema Only Account不能拥有SYSDBA,SYSOPER, SYSBACKUP, SYSKM, SYSASM, SYSRAC, SYSDG这些管理权限,19c中取消了这一限制。

     

    下面是在18.3和19.2综合体验的一个笔记,希望能给大家一点启发,后面大部分都是脚本,介绍性的话语很少,我想大家应该能看明白。

     

    1)创建一个Schema-Only Account


    CDB$ROOT@SYS>conn sys/Alpha2019#@pdb1 as sysdba;

      Connected.

      PDB1@SYS>CREATE USER study NO AUTHENTICATION;

      User created.

      PDB1@SYS>CREATE USER toms IDENTIFIED BY toms default tablespace users;

      User created.

      PDB1@SYS>SELECT username, password, password_versions, account_status, authentication_type

               FROM dba_users 

               WHERE username in ('STUDY','TOMS');


    640?wx_fmt=png

         CREATE USER "STUDY" NO AUTHENTICATION

            DEFAULT TABLESPACE "USERS"

            TEMPORARY TABLESPACE "TEMP"


      PDB1@SYS>

     

    2)AUTHENTICATION 和 NO AUTHENTICATION之间的转换


    通过如下命令可以很容易的在Schema Only Account和Normal Account之间转换:

           ALTER USER ... IDENTIFIED BY ...;

           ALTER USER ... NO AUTHENTICATION;


    说明:18c的时候Schema only accounts可以被授予所有的normal database roles和privileges,但不能是administrative privileges(比如SYSDBA, SYSOPER, SYSRAC等),否则会遇到类似如下的错误:


           CDB$ROOT@cdb1>grant sysdba to study;

           grant sysdba to study

           *

           ERROR at line 1:

           ORA-40366: Administrative privilege cannot be granted to this user.

          

     但19.2中是可以的,比如


           CDB$ROOT@demo>grant sysdba to study;

           Grant succeeded.

           CDB$ROOT@demo>


      PDB1@SYS>ALTER USER study IDENTIFIED BY study quota unlimited on users;

      User altered.

      PDB1@SYS>grant create session, create table to study;

      Grant succeeded.

      PDB1@SYS>conn study/study@pdb1

      Connected.


      PDB1@STUDY>

      PDB1@STUDY>create table a (no int);

      Table created.

      PDB1@STUDY>create table b (str varchar2(32));

      Table created.

      PDB1@STUDY>conn sys/Alpha2019#@pdb1 as sysdba

      Connected.

      PDB1@SYS>grant sysdba to study;

      Grant succeeded.


    注意:在18c测试的时候,会遇到类似如下错误,所以必须先通过V$PWFILE_USERS 视图找到那些administrative privileges并收回。


           PDB1@pdb1>ALTER USER study no authentication;

           ALTER USER study no authentication

           *

           ERROR at line 1:

           ORA-40367: An Administrative user cannot be altered to have no authentication type.


           CDB$ROOT@cdb1>revoke sysdba from study;

           Revoke succeeded.

           CDB$ROOT@cdb1>ALTER USER study no authentication;

           User altered.

           CDB$ROOT@cdb1>

      

    说明:19c(19.2)测试中,是支持administrative privileges的,所以可以直接ALTER USER study no authentication;


    这个时候,study用户就不能直接连接访问了,因为已经切换为Schema Only Account了 ,示例如下:


         PDB1@pdb1>conn study/study@pdb1

           ERROR:

           ORA-01017: invalid username/password; logon denied


           Warning: You are no longer connected to ORACLE.

           PDB1@>


    3)通过single session proxy方式访问


    我这里用之前创建的toms用户来做proxy user,下面先在toms用户下创建个测试表

      PDB1@SYS>conn sys/Alpha2019#@pdb1 as sysdba

      Connected.

      PDB1@SYS>grant connect, resource to toms;

      Grant succeeded.

      PDB1@SYS>conn toms/toms@pdb1

      Connected.

      PDB1@TOMS>create table test (no int );

      Table created.

      PDB1@TOMS>


    设置study(Scheam Only Account)通过toms代理连接(简单示例,详细语法参见相关手册)

      PDB1@TOMS>conn sys/Alpha2019#@pdb1 as sysdba

      Connected.

      PDB1@SYS>ALTER USER study GRANT CONNECT through toms;

      User altered.


      连接测试

      PDB1@SYS>CONNECT toms[study]/toms@pdb1

      Connected.


      PDB1@STUDY>show user

      USER is "STUDY"

      PDB1@STUDY>SELECT sys_context('USERENV','SESSION_USER') AS session_user,

                       sys_context('USERENV','SESSION_SCHEMA') AS session_schema,

                       sys_context('USERENV','PROXY_USER') AS proxy_id,

                       USER

                FROM dual;


      SESSION_USER    SESSION_SCHEMA     PROXY_ID    USER

      --------------- ------------------ ----------- ------------

      STUDY           STUDY              TOMS        STUDY


      PDB1@STUDY>select table_name from tabs;  ##看到的是study用户下的对象

      TABLE_NAME

      -----------------

      B

      A

      PDB1@STUDY>insert into a values(1);

      1 row created.

      PDB1@STUDY>commit;

      Commit complete.

      PDB1@STUDY>select * from a;

              NO

      ----------

               1

      PDB1@STUDY>  

      

    4)回收single session proxy访问设置


      PDB1@STUDY>conn sys/Alpha2019#@pdb1 as sysdba

      Connected.

      PDB1@SYS>select * from proxy_users;

      PROXY  CLIENT     AUT     FLAGS 

      ------ ---------- ------- -------------------------------------

      TOMS   STUDY      NO      PROXY MAY ACTIVATE ALL CLIENT ROLES

      PDB1@SYS>ALTER USER study revoke CONNECT through toms;

      User altered.

      PDB1@SYS>select * from proxy_users;

      no rows selected

      PDB1@SYS>CONNECT toms[study]/toms@pdb1

      ERROR:

      ORA-01017: invalid username/password; logon denied


      Warning: You are no longer connected to ORACLE.

      PDB1@>


    好了,本小节的简单示例就到这里,希望能给大家起到一点简单的引导示范作用,不当之处,请以实际环境和当前文档说明为准。



  • 相关阅读:
    iOS 5.0 后UIViewController新增:willMoveToParentViewController和didMoveToParentViewCon[转]
    数字统计(0)<P2010_1>
    数字反转(0)<P2011_1>
    质因数分解(0)<P2012_1>
    记数问题(0)<P2013_1>
    珠心算测验(0)<P2014_1>
    金币(0)<P2015_1>
    归并排序
    循环语句(while语句和do...while语句)
    循环语句(for语句的用法)
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13312151.html
Copyright © 2011-2022 走看看