首页 / 数据库 / 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本文永久更新链接地址