Oracle PUP(PRODUCT_USER_PROFILE)配置和使用

Posted gavanwanggw

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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:\app\Administrator\product\11.2.0\dbhome_1\sqlplus\admin\pupbld.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命令
[email protected]> insert into product_user_profile values(‘SQL*Plus‘, ‘HR‘, ‘DROP‘, NULL, NULL, ‘DISABLED‘, NULL, NULL);


已创建 1 行。


[email protected]> commit;


提交完毕。


2、PUP表结构概览
[email protected]> 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操作证明设置生效:
[email protected]> conn hr/hr
已连接。


[email protected]> create table t(x int);


表已创建。


[email protected]> drop table t;
SP2-0544: 在产品用户概要文件里禁用命令 "drop"
[email protected]> conn system/[email protected]
已连接。


[email protected]> delete from product_user_profile;


已删除 1 行。


[email protected]> commit;


提交完毕。


[email protected]> conn hr/[email protected]
已连接。


[email protected]> 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


样例:
[email protected]> create role r_t;
角色已创建。
[email protected]> grant select on t to r_t;
授权成功。
[email protected]> grant r_t to hr;
授权成功。


[email protected]> conn hr/hr
已连接。
[email protected]> select * from sys.t;


未选定行
[email protected]> conn system/oracle
已连接。


会话已更改。


[email protected]> insert into product_user_profile values(‘SQL*Plus‘, ‘HR‘, ‘ROLES‘, NULL, NULL, ‘r_t‘, NULL, NULL);


已创建 1 行。




[email protected]> commit;


提交完毕。




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


[email protected]> select username, granted_role
  2      from user_role_privs
  3     where granted_role=‘R_T‘;


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


[email protected]> conn system/oracle
已连接。


会话已更改。




[email protected]> delete from product_user_profile;


已删除 1 行。
[email protected]> commit;


提交完毕。
[email protected]> conn hr/hr
已连接。




会话已更改。


[email protected]> select * from sys.t;


未选定行






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

































































































































































































以上是关于Oracle PUP(PRODUCT_USER_PROFILE)配置和使用的主要内容,如果未能解决你的问题,请参考以下文章

markdown Cub n Pup - 益智游戏演示

删除JS:Miner-AI [PUP]

Oracle ogg同步SQL server 问题排查

想将方法放入 QThread

数组中元素的动态增加和删除

关于c语言结构体变量成员引用的问题