36 12
发新话题
打印

如何禁止owner自己不能drop 或 truncate某些tables ?

如何禁止owner自己不能drop 或 truncate某些tables ?

Dear all experts:

如何禁止owner自己不能drop 或 truncate某些tables ?

因為這個帳號密碼已經公開很久,applications也都寫死config.

所以想預防一些重要的tables不小心被programmer delete掉...

Thank you very much...

TOP

owner本身一定是有权限对自己的东西做修改的啊
不过帮你顶一下

TOP

Thank you very much for supporting...

TOP

用PRODUCT_USER_PROFILE来控制

================
PRODUCT_USER_PROFILE
================
SQL> conn sys/sunsdl as sysdba
已连接。
SQL> insert into PRODUCT_USER_PROFILE (
  2       product, userid, attribute, char_value)
  3       values (
  4       'SQL*Plus','OUTLN','DROP','DISABLED');

已创建 1 行。

SQL> insert into PRODUCT_USER_PROFILE (
  2       product, userid, attribute, char_value)
  3       values (
  4       'SQL*Plus','OUTLN','TRUNCATE','DISABLED');

已创建 1 行。

SQL> COMMIT;

提交完成。

SQL> conn outln/outln
已连接。
SQL> select * from tab;

TNAME                          TABTYPE  CLUSTERID
------------------------------ ------- ----------
AAA                            TABLE
BBB                            TABLE
OL$                            TABLE
OL$HINTS                       TABLE
OL$NODES                       TABLE

SQL> truncate table aaa;
SP2-0544: 无效的命令: truncate
SQL> drop table aaa;
SP2-0544: 无效的命令: drop

TOP

用trigger最好了, 否则将sqlplus.exe命名成 mysqlplus.exe后就可以了,
个人主页: http://www.AnySQL.net  

提供Oracle数据库恢复及其他服务.

TOP

还是fly的办法比较好~~~
-a quaker,always a quaker
-forever
-ION.wolfwang
-即使所有人不玩quake了,我的硬盘上永远存在一个目录,那就是Quake III Arena
-我的心,永远属于quakeIII

-对标题为在线等、急而知道了解决办法就跑也不说说解决的结果的人深恶痛绝,只知道索取,不知道分享,基本的礼貌都不知道,这种人列入黑名单,再也不回答其问题
黑名单:zhangzhe
-同时比较反感同一个问题每个坛子都发一遍的人

TOP

感恩...
To 大大 fly115:

那如何做到不限軟件程序呢?

因為軟件名稱有多種可能 , 除了SQL*Plus外,還有Delphi32.exe, SQL Explorer, .Net, VB, 自己開發的軟件...數不完.

可否用萬用字元,來代表任何的軟件呢 ?


另外,可否針對某些 tables ?

感恩...

[ Last edited by kensoong on 2006-3-10 at 18:44 ]

TOP

如果用trigger那又是如何寫 ?

寫在before event ?

然後怎麼cancel後續的真正drop or truncate動作呢 ?

感謝...

TOP

Who can help ? Thanks a lot...
To 大大 fly115:

那如何做到不限軟件程序呢?

因為軟件名稱有多種可能 , 除了SQL*Plus外,還有Delphi32.exe, SQL Explorer, .Net, VB, 自己開發的軟件...數不完.

可否用萬用字元,來代表任何的軟件呢 ?


另外,可否針對某些 tables ?

TOP

既然app已经写死了   trigger怎么用呢?
app中难道没有del ?

还是向备份的方向考虑........

TOP

把数据搬到另外的schema下,然后授权回来,并建同义词。这样,虽然数据库已经做了调整,但用户感觉没变一样

TOP

学习中。。。。。。。。。。

TOP

使用INSTEAD类型的触发器

TOP

TRIGGER TI_LOG_CREATIONS
BEFORE CREATE OR ALTER OR DROP ON DATABASE
--  ========================================================
--  程式類別 : TRIGGER                                      
--  程式名稱 : T_LOG_CREATIONS                                       
--  程式功能 : 防止用戶更改表結構導致程序無效            
--  原設計者 : 程時欽    設立日期 : 2005/06/10      
--  ------------------異動記錄明細-----------------           
--  異動日期   異 動 者      異   動   原   因         
--  ========================================================
DECLARE        

BEGIN                                    
   IF sys.login_user<>'SYS' AND sys.dictionary_obj_type='TABLE'
                            AND sys_context('userenv','ip_address') NOT IN('172.24.17.40') THEN
      RAISE_APPLICATION_ERROR(-20008,'小樣,你沒有創建,更改,刪除'||sys.dictionary_obj_name||'的權限,請聯系DBA!');
   END IF;
END TI_LOG_CREATIONS;

TOP

引用:
Originally posted by csqno1 at 2006-3-17 09:26 AM:
TRIGGER TI_LOG_CREATIONS
BEFORE CREATE OR ALTER OR DROP ON DATABASE
--  ========================================================
--  程式類別 : TRIGGER                                      
--  ...
請問大大...
兩個小問題:

1.這個可以細到不同tables嗎 ? 例如: table a不行, table d可以...

2.除了drop指令以外,可以禁止 truncate ?

TOP

引用:
Originally posted by csqno1 at 2006-3-17 09:26 AM:
TRIGGER TI_LOG_CREATIONS
BEFORE CREATE OR ALTER OR DROP ON DATABASE
--  ========================================================
--  程式類別 : TRIGGER                                      
--  ...
請問可以判斷:禁止Truncate嗎?
另外,可以判斷某些tables才禁止這些危險的動作嗎?

感恩...thank you very much...

DING...

TOP

找到解決方法:可以讓Owner不能做drop, truncate...等動作.
這樣Owner就很安全了.

CREATE OR REPLACE TRIGGER "DISABLED_ON_DDL" BEFORE
DDL ON "Owner".SCHEMA
DECLARE

BEGIN
Raise_application_error(-20002, 'Owner,您不能execute DDL的指令');
END;

TOP

引用:
Originally posted by fly115 at 2006-3-10 02:44 PM:
用PRODUCT_USER_PROFILE来控制

================
PRODUCT_USER_PROFILE
================
SQL> conn sys/sunsdl as sysdba
已连接。
SQL> insert into PRODUCT_USER_PROFILE (
  2       product, ...
insert into PRODUCT_USER_PROFILE後,
select * from PRODUCT_USER_PROFILE卻沒有記錄,
請問這是怎麼回事?如果我想取消禁止呢?怎麼去做?
向著天空鳥兒飛去的遠方,
寄存多少難舍的記憶!
飄渺的希望和夢想,
遺忘在那無法到達的地方……

TOP

引用:
SQL> insert into PRODUCT_USER_PROFILE
  2  (product, userid, attribute, char_value)
  3  values ('SQL*Plus','OUTLN','DROP','DISABLED')
  4  /

1 row created.

SQL> select * from PRODUCT_USER_PROFILE;
rows will be truncated

rows will be truncated

rows will be truncated

rows will be truncated


no rows selected

SQL>
向著天空鳥兒飛去的遠方,
寄存多少難舍的記憶!
飄渺的希望和夢想,
遺忘在那無法到達的地方……

TOP

kensoong,你的办法是不能执行DDL语句了,那也不能创建owner的对象了,那还要你的这个触发器干什么???
天天不觉晓,我就不起早。阵阵酣睡声,谁也不许吵!  zzzzzzzzzzzz...........  

TOP

 36 12
发新话题