• Oracle PUP(PRODUCT_USER_PROFILE)配置和使用


    近期在翻Oracle SQLPLUS官方文档,在讲SQLPLUS Security章节介绍了PUP这个机制。借此。我来使用下面:


    PUP(PRODUCT_USER_PROFILE)介绍
      PRODUCT_USER_PROFILE是SYSTEM账户下一个表,可提供用户级别的安全限制。


      PUP设置对DBA权限用户无效。


      PUP仅仅针对本地数据库生效(Local Database)。




    1、SYSTEM 用户创建PUP:
    SQLPLUS SYSTEM

    @ D:appAdministratorproduct11.2.0dbhome_1sqlplusadminpupbld.sql

    脚本内容

    DROP SYNONYM PRODUCT_USER_PROFILE;
    
    CREATE TABLE SQLPLUS_PRODUCT_PROFILE AS
      SELECT PRODUCT, USERID, ATTRIBUTE, SCOPE, NUMERIC_VALUE, CHAR_VALUE,
      DATE_VALUE FROM PRODUCT_USER_PROFILE;
    
    DROP TABLE PRODUCT_USER_PROFILE;
    ALTER TABLE SQLPLUS_PRODUCT_PROFILE ADD (LONG_VALUE LONG);
    
    -- Create SQLPLUS_PRODUCT_PROFILE from scratch
    
    CREATE TABLE SQLPLUS_PRODUCT_PROFILE
    (
      PRODUCT        VARCHAR2 (30) NOT NULL,
      USERID         VARCHAR2 (30),
      ATTRIBUTE      VARCHAR2 (240),
      SCOPE          VARCHAR2 (240),
      NUMERIC_VALUE  DECIMAL (15,2),
      CHAR_VALUE     VARCHAR2 (240),
      DATE_VALUE     DATE,
      LONG_VALUE     LONG
    );
    
    -- Remove SQL*Plus V3 name for sqlplus_product_profile
    
    DROP TABLE PRODUCT_PROFILE;
    
    -- Create the view PRODUCT_PRIVS and grant access to that
    
    DROP VIEW PRODUCT_PRIVS;
    CREATE VIEW PRODUCT_PRIVS AS
      SELECT PRODUCT, USERID, ATTRIBUTE, SCOPE,
             NUMERIC_VALUE, CHAR_VALUE, DATE_VALUE, LONG_VALUE
      FROM SQLPLUS_PRODUCT_PROFILE
      WHERE USERID = 'PUBLIC' OR USER LIKE USERID;
    
    GRANT SELECT ON PRODUCT_PRIVS TO PUBLIC;
    DROP PUBLIC SYNONYM PRODUCT_PROFILE;
    CREATE PUBLIC SYNONYM PRODUCT_PROFILE FOR SYSTEM.PRODUCT_PRIVS;
    DROP SYNONYM PRODUCT_USER_PROFILE;
    CREATE SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.SQLPLUS_PRODUCT_PROFILE;
    DROP PUBLIC SYNONYM PRODUCT_USER_PROFILE;
    CREATE PUBLIC SYNONYM PRODUCT_USER_PROFILE FOR SYSTEM.PRODUCT_PRIVS;
    



    --禁用HR用户的DROP命令
    SYSTEM@orcl> insert into product_user_profile values('SQL*Plus', 'HR', 'DROP', NULL, NULL, 'DISABLED', NULL, NULL);


    已创建 1 行。


    SYSTEM@orcl> commit;


    提交完毕。


    2、PUP表结构概览
    SYSTEM@orcl> desc product_user_profile
     名称                                     是否为空?

    类型
     ---------------------------------------- -------- ---------------------------
     PRODUCT                                  NOT NULL VARCHAR2(30)
     USERID                                            VARCHAR2(30)
     ATTRIBUTE                                         VARCHAR2(240)
     SCOPE                                             VARCHAR2(240)
     NUMERIC_VALUE                                     NUMBER(15,2)
     CHAR_VALUE                                        VARCHAR2(240)
     DATE_VALUE                                        DATE
     LONG_VALUE                                        LONG


     --PRODUCT : 说明要限制的程序 
     --USERID : 要限制的用户(大写)
     --ATTRIBUTE : 要限制的命令或角色
     --SCOPE : 不适用;放NULL
     --NUMERIC_VALUE : 不适用。放NULL
     --CHAR_VALUE :DISABLED
     --DATE_VALUE :不适用。放NULL
     --LONG_VALUE :不适用;放NULL
     


    3、HR登录进行DROP操作证明设置生效:
    SYSTEM@orcl> conn hr/hr
    已连接。


    HR@orcl> create table t(x int);


    表已创建。


    HR@orcl> drop table t;
    SP2-0544: 在产品用户概要文件里禁用命令 "drop"
    HR@orcl> conn system/oracle@orcl
    已连接。


    SYSTEM@orcl> delete from product_user_profile;


    已删除 1 行。


    SYSTEM@orcl> commit;


    提交完毕。


    SYSTEM@orcl> conn hr/hr@orcl
    已连接。


    HR@orcl> drop table t;


    表已删除。




    4、禁用角色
    PRODUCT USERID ATTRIBUTE SCOPE NUMERIC_VALUE CHAR_VALUE DATE_VALUE LONG_VALUE
    ------- ------ --------- ----- -------- ------ ----- -----
    SQL*Plus HR     ROLES                           ROLE1
    SQL*Plus PUBLIC ROLES                          ROLE2


    用户登录期间PUP行记录将翻译为下面命令
    During login, these table rows are translated into the command
    SET ROLE ALL EXCEPT ROLE1, ROLE2


    样例:
    SYS@orcl> create role r_t;
    角色已创建。
    SYS@orcl> grant select on t to r_t;
    授权成功。
    SYS@orcl> grant r_t to hr;
    授权成功。


    SYS@orcl> conn hr/hr
    已连接。
    HR@orcl> select * from sys.t;


    未选定行
    HR@orcl> conn system/oracle
    已连接。


    会话已更改。


    SYSTEM@orcl> insert into product_user_profile values('SQL*Plus', 'HR', 'ROLES', NULL, NULL, 'r_t', NULL, NULL);


    已创建 1 行。




    SYSTEM@orcl> commit;


    提交完毕。




    SYSTEM@orcl> conn hr/hr
    已连接。
    HR@orcl> select * from sys.t;
    select * from sys.t
                      *
    第 1 行出现错误:
    ORA-00942: 表或视图不存在


    HR@orcl> select username, granted_role
      2      from user_role_privs
      3     where granted_role='R_T';


    USERNAME                       GRANTED_ROLE
    ------------------------------ ------------------------------
    HR                             R_T


    HR@orcl> conn system/oracle
    已连接。


    会话已更改。




    SYSTEM@orcl> delete from product_user_profile;


    已删除 1 行。
    SYSTEM@orcl> commit;


    提交完毕。
    SYSTEM@orcl> conn hr/hr
    已连接。




    会话已更改。


    HR@orcl> select * from sys.t;


    未选定行






    ------------------------‘
    Dylan    Presents.


  • 相关阅读:
    Linux文件系统介绍
    httpd 2.4连接php-fpm
    基于lnmp环境安装Discuz
    apache 与 php-fpm 几种处理方式
    Discuz!安装搭建
    Linux中实现文本过滤
    httpd-2.4安装配置
    firewall-cmd.man
    了解JSON
    JSTL和EL表达式
  • 原文地址:https://www.cnblogs.com/gavanwanggw/p/6693004.html
Copyright © 2020-2023  润新知