Oracle PUP(PRODUCT_USER_PROFILE)配置和使用(一)

2014-11-24 17:18:16 · 作者: · 浏览: 0

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