Welcome 微信登录

首页 / 数据库 / MySQL / 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 scratchCREATE 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_profileDROP TABLE PRODUCT_PROFILE;-- Create the view PRODUCT_PRIVS and grant access to thatDROP 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;
 未选定行Oracle教程:实例故障恢复 http://www.linuxidc.com/Linux/2011-08/40857.htmLinux-6-64下安装Oracle 12C笔记 http://www.linuxidc.com/Linux/2013-07/86805.htm在CentOS 6.4下安装Oracle 11gR2(x64) http://www.linuxidc.com/Linux/2014-02/97374.htmOracle 11gR2 在VMWare虚拟机中安装步骤 http://www.linuxidc.com/Linux/2013-09/89579p2.htmDebian 下 安装 Oracle 11g XE R2 http://www.linuxidc.com/Linux/2014-03/98881.htm更多Oracle相关信息见Oracle 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=12本文永久更新链接地址