请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

给本帖投票

56211打赏收藏

分享

转发到动态举报

写回复

性能测试中发现oracle11g数据库每天22点,oralce进程CPU占用率突增>>

11 条回复

切换为时间正序

请发表友善的回复...

发表回复

microsoft_fly 2008-11-18

还是用权限控制比较好,触发器影响数据库性能,越复杂对性能影响越大

fuxiaoyang13 2008-11-18

路过!

hongqi162 2008-11-17

楼主说的似乎不是处理表数据,而是处理建表,删除/修改表结构的操作,还是通过权限控制比较好

wfqqwer5213 2008-11-17

CREATE OR REPLACE TRIGGER ddl_trigger

BEFORE CREATE OR ALTER OR DROP

ON SCHEMA

DECLARE

oper ddl_log.operation%TYPE;

sql_text ora_name_list_t;

i PLS_INTEGER;

BEGIN

SELECT ora_sysevent

INTO oper

FROM dual;

i := sql_txt(sql_text);

IF oper IN ('CREATE', 'DROP') THEN

INSERT INTO ddl_log

SELECT ora_sysevent, ora_dict_obj_owner,

ora_dict_obj_name, sql_text(1), USER, SYSDATE

FROM dual;

ELSIF oper = 'ALTER' THEN

INSERT INTO ddl_log

SELECT ora_sysevent, ora_dict_obj_owner,

ora_dict_obj_name, sql_text(1), USER, SYSDATE

FROM sys.gv_$sqltext

WHERE UPPER(sql_text) LIKE 'ALTER%'

AND UPPER(sql_text) LIKE '%NEW_TABLE%';

END IF;

END ddl_trigger;

/

wfqqwer5213 2008-11-17

DDL Trigger - Triggering Operations

BEFORE / AFTER ALTER

BEFORE / AFTER ANALYZE

BEFORE / AFTER ASSOCIATE STATISTICS

BEFORE / AFTER AUDIT

BEFORE / AFTER COMMENT

BEFORE / AFTER CREATE

BEFORE / AFTER DDL

BEFORE / AFTER DISASSOCIATE STATISTICS

BEFORE / AFTER DROP

BEFORE / AFTER GRANT

BEFORE / AFTER NOAUDIT

BEFORE / AFTER RENAME

BEFORE / AFTER REVOKE

BEFORE / AFTER TRUNCATE

AFTER SUSPEND

范佩西_11 2008-11-17

这可以用权限控制吗。只给select权限就可以了

如果实在要用触发器,给你个限制增删改的例子:

复制代码
  1. create or replace trigger tr before insert or update or delete on act

  2. begin

  3. if updating or deleting or inserting

  4. then

  5. raise_application_error(-20001,'不允许增删改');

  6. end if;

  7. end;

sleepzzzzz 2008-11-17

复制代码
  1. -- 试下

  2. Create table test(a number);

  3. Create trigger tri_test

  4. Before insert or update or delete

  5. On foo

  6. Begin

  7. Raise_application_error(-20001, 'You don't have access to modify this table.');

  8. End;

  9. /

sleepzzzzz 2008-11-17

好奇怪的需求

wfqqwer5213 2008-11-17

CREATE OR REPLACE TRIGGER trg_drop_table

BEFORE DROP ON DATABASE

BEGIN

raise_application_error(num => -20000,

msg => '主机:' ||

SYS_CONTEXT('USERENV', 'HOST') ||

chr(13) || 'IP:' ||

SYS_CONTEXT('USERENV', 'IP_ADDRESS') ||

'试图删除' || ora_dict_obj_name() || '表');

END;

一个禁止drop的例子

hongqi162 2008-11-17

用权限控制一下不就可以了么,这些操作和触发器没有什么关系

BlueskyWide 2008-11-17

回复

不允许新增/删除表

===============

界面层封住,Oracle用户名和密码不对外提供即可。

增加/减少/修改字段类型

====================

使用alter table add ...

alter table drop ...

修改字段可以使用先增加字段,然后删除来做。

如果Oracle用户名和密码别人知道了,只能通过职业道德来规范了。

Quote=引用楼主 anning241 的帖子:

急:

请问如何用oracle触发器实现不允许新增/删除表/增加/减少/修改字段类型

/Quote

相关推荐
今晚务必早点睡4 小时前
微服务改数据库密码后服务仍能访问?一次“看似异常、实则常见”的生产现象全解析
数据库·微服务·oracle
老师我太想进步了20265 小时前
cmd连接MySQL及相关查询
数据库·mysql
難釋懷8 小时前
Redis命令-Set命令
数据库·redis·缓存
Linux-palpitate9 小时前
PostgreSQL(PG)的1主2从集群部署安装
数据库·postgresql
dingdingfish9 小时前
Oracle数据库19c技术架构
oracle·database·architecture·19c·technical
heartbeat..9 小时前
数据库基础知识体系:概念、约束、范式与国产产品
java·数据库·学习笔记·国产数据库
山峰哥10 小时前
数据库工程核心:SQL调优让查询效率飙升的实战密码
网络·汇编·数据库·sql·编辑器
Coder_Boy_10 小时前
基于SpringAI的在线考试系统-DDD业务领域模块设计思路
java·数据库·人工智能·spring boot·ddd
小雪_Snow11 小时前
Windows 安装 MySQL 8.0 教程【安装包方式】
数据库·mysql
无敌的牛11 小时前
MySQL初阶
数据库·mysql