oracle的user profile,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命令

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;

未选定行

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
struct ring_buffer { int head; int tail; struct msg *data; int size; unsigned int capacity; }; struct msg { u16 module_id; u16 cmd_id; u16 cmd_subid; u16 complete; u8 data[128]; };struct pokemon_uart_port { struct uart_port port; struct clk *clk; const struct vendor_data vendor; unsigned int im; / interrupt mask / unsigned int old_status; unsigned int fifosize; unsigned int old_cr; / state during shutdown */ unsigned int fixed_baud; struct ring_buffer tx_buf; struct ring_buffer rx_buf; char type[12]; };struct ring_buffer ring_buffer_init(unsigned int capacity) { struct ring_buffer rbuf=kmalloc(sizeof(struct ring_buffer),GFP_KERNEL); rbuf->capacity=capacity; rbuf->head = rbuf->size=0; rbuf->tail = capacity - 1; rbuf->data = kmalloc(rbuf->capacity * sizeof(struct msg), GFP_KERNEL); printk(KERN_DEBUG "ring_buffer create successfully!/n"); return rbuf; }static int pokemon_uart_probe(struct amba_device *dev, const struct amba_id *id) { struct pokemon_uart_port *pup; struct vendor_data *vendor = id->data; int portnr, ret; portnr = pokemon_find_free_port(); if (portnr < 0) return portnr; pup = devm_kzalloc(&dev->dev, sizeof(struct pokemon_uart_port), GFP_KERNEL); if(!pup) return -ENOMEM; pup->clk = devm_clk_get(&dev->dev, NULL); if(IS_ERR(pup->clk)) return PTR_ERR(pup->clk); pup->port.irq = dev->irq[0]; pup->port.line = portnr; pup->vendor = vendor; pup->fifosize = 32; pup->port.iotype = pup->vendor->access_32b ? UPIO_MEM32 : UPIO_MEM; pup->port.ops = &pokemon_uart_ops; snprintf(pup->type, sizeof(pup->type), "PL011 rev%u", amba_rev(dev)); pup->tx_buf = ring_buffer_init(10); pup->rx_buf = ring_buffer_init(10); ret = pokemon_setup_port(&dev->dev, pup, &dev->res, portnr); if (ret) return ret; amba_set_drvdata(dev, pup); return pokemon_register_port(pup); }检查一下这段linux内核驱动代码中,有无代码逻辑和格式错误,如果有,请给出修改之后的代码
最新发布
06-08

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值