Oracle用户的单张表的读写权限控制

标签: oracle 用户 张表 | 发表时间:2013-10-29 23:53 | 作者:mikixiyou
出处:http://blog.csdn.net
在oracle数据库的用户下,一张表需要做读写控制,只能读和写,不能删除和修改。开发人员开始想从用户权限上去实现。
经过一番讨论,判读从权限上去实现该需求是不合适的。
这个用户下很多表,根本不会被一个人控制的。用户本身有一个权限组resource,可以对其下所有表进行增删改查。
如果要用权限来实现,那么就得将这个组去掉。这样,该用户下的其他表就得一个一个授权。还得考虑到以后新建的表。如何处理又是个问题。

因此,判断该解决方式不合适。

这种单独一张表的读写控制,不知道审计能不能实现。我想到一种另外的控制方法,让表只能读写,不能删改。这个方法就是利用触发器。
在表的每一行纪录进行增删改之前做判断,如果是增,则不做任何处理,如果是删除或者修改,直接rollback。
这样就实现了这种读写控制。

触发器代码如下:

create or replace trigger trg_test_insert_select
  before insert or  update or  delete on t_test  
  for each row
declare
  -- local variables here
begin
    CASE
    WHEN INSERTING THEN
      DBMS_OUTPUT.PUT_LINE('Inserting');
    WHEN UPDATING THEN
      DBMS_OUTPUT.PUT_LINE('Updating');
      rollback;
    WHEN DELETING THEN
      DBMS_OUTPUT.PUT_LINE('Deleting');
      rollback;
  END CASE;

end trg_test_insert_select;


测试结果如下:

SQL> insert into t_test(a) select sysdate from dual;
 
1 row inserted
 
SQL> commit;
 
Commit complete
 
SQL> delete from t_test;
 
delete from t_test
 
ORA-04092: ROLLBACK 不能在触发器中
ORA-06512: 在 "SCOTT.TRG_TEST_INSERT_SELECT", line 12
ORA-04088: 触发器 'SCOTT.TRG_TEST_INSERT_SELECT' 执行过程中出错
 
SQL> update t_test set a=sysdate+1;
 
update t_test set a=sysdate+1
 
ORA-04092: ROLLBACK 不能在触发器中
ORA-06512: 在 "SCOTT.TRG_TEST_INSERT_SELECT", line 9
ORA-04088: 触发器 'SCOTT.TRG_TEST_INSERT_SELECT' 执行过程中出错
 
注意,在应用开发时,需要将这个表的操作进行封装,异常捕获很重要。

作者:mikixiyou 发表于2013-10-29 15:53:09 原文链接
阅读:105 评论:0 查看评论

相关 [oracle 用户 张表] 推荐:

Oracle用户的单张表的读写权限控制

- - CSDN博客数据库推荐文章
在oracle数据库的用户下,一张表需要做读写控制,只能读和写,不能删除和修改. 开发人员开始想从用户权限上去实现. 经过一番讨论,判读从权限上去实现该需求是不合适的. 这个用户下很多表,根本不会被一个人控制的. 用户本身有一个权限组resource,可以对其下所有表进行增删改查. 如果要用权限来实现,那么就得将这个组去掉.

Oracle数据库的权限、用户、角色管理

- - 服务器运维与网站架构|Linux运维|互联网研究
系统权限:系统规定用户使用数据库的权限. 实体权限:某种权限用户对其它用户的表或视图的存取权限. DBA: 拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构. RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构. CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构.

[转]Oracle 数据库中 SYS 、 SYSTEM 、 DBSNMP 、 SYSMAN 四用户的区别

- - 数据库 - ITeye博客
SYS,默认密码为CHANGE_ON_INSTALL,当创建一个数据库时,SYS用户将被默认创建并授予DBA角色,所有数据库数据字典中的基本表和视图都存储在名为SYS的方案中,这些基本表和视图对于Oracle数据库的操作时非常重要的. 为了维护数据字典的真实性,SYS方案中的表只能由系统来维护,他们不能被任何用户.

从 Oracle 迁移到 TiDB 的方案设计与用户实践

- - 掘金 后端
盛玉 , 中国人寿财险金融科技中心系统运行部. 王耀强 , PingCAP 资深解决方案架构师. 当前,全球数字化浪潮推动数字经济与实体经济融合,更多的企业意识到数据平台对业务增长和创新的重要性. 通过国产化迁移和替换数据库,中国数据库市场蓬勃发展,为企业自主创新奠定了基础. 本文以中国人寿财险公司为例,详述其从 Oracle 到 TiDB 分布式数据库的四个阶段的迁移,展示了金融行业对数据库的高要求和国产数据库的价值应用.

(总结)Oracle 11g常用管理命令(用户、表空间、权限)

- - 服务器运维与网站架构|Linux运维|X研究
PS:下面是Oracle 11g最常用的基本管理命令,包括创建用户、表空间,权限分配等. 以下命令本人都验证操作过,加上了本人的小结说明. 从root切换到oracle用户进入:. 进入sqlplus环境,nolog参数表示不登录:. 注:要把Linux下的Oracle配置成服务自启动,请看:. (原创)CentOS Linux下配置Oracle 11gR2为系统服务自动启动.

Oracle数据泵EXPDP/IMPDP工具使用(按用户导出和导入)

- - ITeye博客
Oracle路径配置. 可通过expdp help查看工具使用环境. 通常对于未配置Oracle环境变量,会报以下使用错误:. UDE-00013: Message 13 not found; No message file for product=RDBMS, facility=UDE UDE-00019: You may need to set ORACLE_HOME to your Oracle software directory.

Oracle 收购 Ksplice

- feng823 - LinuxTOY
实现无需重启即可为 Linux 内核打安全补丁的 Ksplice 被 Oracle 收购. 在被收购前, Ksplice 为 Fedora, Ubuntu 免费提供该功能,对于 RHEL 和 CentOS 则需要订阅其产品. Oracle 表示将把 Ksplice 带来的零宕机安全更新功能添加到 Oracle 产品订阅服务中,同时停止对其他企业级 Linux 发行版的支持,将 Oracle Unbreakable Linux 打造成唯一具备零宕机安全更新功能的企业级 Linux 发行版.

Linux Ksplice,MySQL and Oracle

- Syn - DBA Notes
Oracle 在 7 月份收购了 Ksplice. 使用了 Ksplice 的 Linux 系统,为 Kernel 打补丁无需重启动,做系统维护的朋友应该明白这是一个杀手级特性. 现在该产品已经合并到 Oracle Linux 中. 目前已经有超过 700 家客户,超过 10 万套系统使用了 Ksplice (不知道国内是否已经有用户了.

oracle license计算

- Fenng - eagle's home
Oracle license的计算是基于CPU core的. 用core的数目乘以一个系数core factor就可以得到所需的oracle license的数目. 对于不同的CPU,core factor是不一样的,可以从oracle提供的这张列表中查到 Oracle Processor Core Factor Table.

Oracle Exadata初探

- - 技术改变世界 创新驱动中国 - 《程序员》官网
在我们看来,它是一个把硬件和软件根据合理的配置整合在一起的 Oracle数据库(在本文编写时是11gR2版本)平台. Exadata数据库机器包含了存储子系统,在存储层上运行着研发的新软件,这使得研发人员可以做一些在其他平台上无法完成的事情. 实际上,Exadata一开始是以一个存储系统形式诞生的,如果你跟参与研发此产品的人交谈,你经常会听到他们称存储组件为Exadata或者是SAGE (Storage Appliance for Grid Environments,网格环境存储设备),这是该产品研发项目的代码名称.