【DB筆試面試185】在Oracle中,如何讓普通使用者可以TRUNCATE其他使用者的表?
【DB筆試面試185】在Oracle中,如何讓普通使用者可以TRUNCATE其他使用者的表?
在Oracle中,如何讓普通使用者可以TRUNCATE其他使用者的表?
使用者1若要刪除使用者2的索引,則使用者1需要有DROP ANY INDEX的許可權。使用者1若要TRUNCATE使用者2的表,則使用者1需要有DROP ANY TABLE的許可權。但是,DROP ANY INDEX和DROP ANY TABLE的許可權過大,一般不能賦予普通使用者這2個許可權,那麼可以透過寫儲存過程來實現該功能,如下所示:
CREATE OR REPLACE PROCEDURE PRO_TRUNC_DROP_LHR(COMMAND IN VARCHAR2,
O_TYPE IN VARCHAR2,
OWNER IN VARCHAR2,
O_NAME IN VARCHAR2) AUTHID DEFINER AS
V_SQL VARCHAR2(4000);
BEGIN
IF UPPER(COMMAND) IN ('DROP', 'TRUNCATE') AND
UPPER(O_TYPE) IN ('TABLE', 'INDEX') THEN
V_SQL := COMMAND || ' ' || O_TYPE || ' ' || OWNER || '.' || O_NAME;
EXECUTE IMMEDIATE V_SQL;
END IF;
END PRO_TRUNC_DROP_LHR;
使用示例如下所示:
建立使用者1和使用者2,分別賦予CONNECT和RESOURCE許可權:
SQL> SHOW USER
USER is "SYS"
SQL>
SQL> CREATE USER LHR_U1 IDENTIFIED BY LHR_U1;
User created.
SQL> CREATE USER LHR_U2 IDENTIFIED BY LHR_U2;
User created.
SQL> GRANT CONNECT,RESOURCE TO LHR_U1;
Grant succeeded.
SQL> GRANT CONNECT,RESOURCE TO LHR_U2;
Grant succeeded.
使用者2建立表U2_T_LHR:
SQL> CONN LHR_U2/LHR_U2
Connected.
SQL> CREATE TABLE U2_T_LHR AS SELECT * FROM DUAL;
Table created.
SQL> SELECT * FROM U2_T_LHR;
D
-
X
SQL> CREATE INDEX IDX_U2_T_LHR ON U2_T_LHR(DUMMY);
Index created.
SQL>
SQL> GRANT SELECT,DELETE,UPDATE ON U2_T_LHR TO LHR_U1;
Grant succeeded.
使用者2建立儲存過程並賦予使用者1的執行許可權:
SQL> CREATE OR REPLACE PROCEDURE PRO_TRUNC_DROP_LHR(COMMAND IN VARCHAR2,
2 O_TYPE IN VARCHAR2,
3 OWNER IN VARCHAR2,
4 O_NAME IN VARCHAR2) AUTHID DEFINER AS
5 V_SQL VARCHAR2(4000);
6 BEGIN
7 IF UPPER(COMMAND) IN ('DROP', 'TRUNCATE') AND
8 UPPER(O_TYPE) IN ('TABLE', 'INDEX') THEN
9 V_SQL := COMMAND || ' ' || O_TYPE || ' ' || OWNER || '.' || O_NAME;
10 EXECUTE IMMEDIATE V_SQL;
11 END IF;
12 END PRO_TRUNC_DROP_LHR;
13 /
Procedure created.
SQL> GRANT EXECUTE ON PRO_TRUNC_DROP_LHR TO LHR_U1;
Grant succeeded.
使用者1開始查詢:
SQL> conn LHR_U1/LHR_U1
Connected.
SQL>
SQL> SELECT * FROM LHR_U2.U2_T_LHR;
D
-
X
SQL> TRUNCATE TABLE LHR_U2.U2_T_LHR;
TRUNCATE TABLE LHR_U2.U2_T_LHR
*
ERROR at line 1:
ORA-01031: insufficient privileges
SQL> DROP INDEX LHR_U2.IDX_U2_T_LHR;
DROP INDEX LHR_U2.IDX_U2_T_LHR
*
ERROR at line 1:
ORA-01418: specified index does not exist
SQL> DROP TABLE LHR_U2.U2_T_LHR;
DROP TABLE LHR_U2.U2_T_LHR
*
ERROR at line 1:
ORA-01031: insufficient privileges
可以看到TRUNCATE、DROP都沒有許可權,下面採用儲存過程刪除:
SQL> EXEC LHR_U2.PRO_TRUNC_DROP_LHR('TRUNCATE','TABLE','LHR_U2','U2_T_LHR');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM LHR_U2.U2_T_LHR;
no rows selected
SQL> EXEC LHR_U2.PRO_TRUNC_DROP_LHR('DROP','INDEX','LHR_U2','IDX_U2_T_LHR');
PL/SQL procedure successfully completed.
SQL> EXEC LHR_U2.PRO_TRUNC_DROP_LHR('DROP','TABLE','LHR_U2','U2_T_LHR');
PL/SQL procedure successfully completed.
SQL> SELECT * FROM LHR_U2.U2_T_LHR;
SELECT * FROM LHR_U2.U2_T_LHR
*
ERROR at line 1:
ORA-00942: table or view does not exist
SQL> CONN LHR_U2/LHR_U2
Connected.
SQL>
SQL> SELECT * FROM USER_INDEXES;
no rows selected
可以看到已經正常刪除了。
http://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w |
About Me
.............................................................................................................................................
● 本文作者:小麥苗,部分內容整理自網路,若有侵權請聯絡小麥苗刪除
● 本文在itpub(http://blog.itpub.net/26736162/abstract/1/)、部落格園(http://www.cnblogs.com/lhrbest)和個人微信公眾號(xiaomaimiaolhr)上有同步更新
● 本文itpub地址:http://blog.itpub.net/26736162/abstract/1/
● 本文部落格園地址:http://www.cnblogs.com/lhrbest
● 本文pdf版、個人簡介及小麥苗雲盤地址:http://blog.itpub.net/26736162/viewspace-1624453/
● 資料庫筆試面試題庫及解答:http://blog.itpub.net/26736162/viewspace-2134706/
● DBA寶典今日頭條號地址:
.............................................................................................................................................
● QQ群號:230161599(滿)、618766405
● 微信群:可加我微信,我拉大家進群,非誠勿擾
● 聯絡我請加QQ好友(646634621),註明新增緣由
● 於 2018-05-01 06:00 ~ 2018-05-31 24:00 在魔都完成
● 最新修改時間:2018-05-01 06:00 ~ 2018-05-31 24:00
● 文章內容來源於小麥苗的學習筆記,部分整理自網路,若有侵權或不當之處還請諒解
● 版權所有,歡迎分享本文,轉載請保留出處
.............................................................................................................................................
● 小麥苗的微店:
● 小麥苗出版的資料庫類叢書:http://blog.itpub.net/26736162/viewspace-2142121/
● 小麥苗OCP、OCM、高可用網路班:http://blog.itpub.net/26736162/viewspace-2148098/
.............................................................................................................................................
使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公眾號(xiaomaimiaolhr)及QQ群(DBA寶典),學習最實用的資料庫技術。
小麥苗的微信公眾號 小麥苗的DBA寶典QQ群2 《DBA筆試面試寶典》讀者群 小麥苗的微店
.............................................................................................................................................
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26736162/viewspace-2155367/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【技巧】如何讓普通使用者可以殺掉自己使用者的會話會話
- Oracle在儲存過程中呼叫其他使用者的表授權Oracle儲存過程
- 【DB筆試面試164】在Oracle中,如何徹底停止expdp資料泵程式?筆試面試Oracle
- 在Linux中如何登出其他 SSH 使用者Linux
- oracle truncate table recover(oracle 如何拯救誤操作truncate的表)Oracle
- db2中模擬ORACLE中的truncate操作DB2Oracle
- 如何讓普通使用者也用上 Laravel-admin 。。Laravel
- 如何讓普通使用者可以對DBA_SOURCE檢視進行閃回查詢?
- oracle 跟蹤其他使用者Oracle
- 【DB筆試面試352】在Oracle資料庫中,哪些操作會導致索引失效?--UNUSABLE INDEXES筆試面試Oracle資料庫索引Index
- Linux中如何禁止普通使用者使用su命令Linux
- 能select的表,可以exp嗎?有exp_full_database就能exp其他使用者的表嗎?Database
- 在Linux中新增普通新使用者Linux
- SYS使用者可以登入,其他使用者無法登陸的問題處理
- 如何在Linux 讓Telnet root使用者可以登入Linux
- 將表匯入到其他使用者的impdp命令
- 在SAP中控制使用者只能刪除屬於自己使用者的程式.其他程式只能檢視.
- oracle 10046其他使用者會話Oracle會話
- 為何SYSTEM使用者可以將V$SESSION的查詢許可權賦權給其他使用者而SYS使用者卻不可以?Session
- Oracle的表空間、使用者和使用者授權Oracle
- Oracle Truncate表恢復(ODU)Oracle
- 查詢資料庫中的所有的普通使用者資料庫
- 儲存過程訪問其他使用者的表的問題儲存過程
- Oracle新建使用者、表空間、表Oracle
- 使用root 切換普通使用者提示:[sudo] password for oracle:Oracle
- 常見問題--oracle普通使用者啟用autoraceOracle
- DB5:研究顯示Twitter使用者比其他社交媒體使用者年輕且學歷高
- Oracle授權A使用者查詢B使用者的所有表Oracle
- 在Linux中如何禁止使用者登入Linux
- 在PHP中如何獲取使用者的真實IPPHP
- Sqlserver 如何truncate linked server的表SQLServer
- SUID 與 SGID - 使普通使用者可以完成特定使用者許可權才能完成的任務UI
- db2平臺下oracle goldengate配置支援truncate操作測試記錄DB2OracleGo
- 讓Linux給一個普通使用者reboot許可權(轉)Linuxboot
- Runas命令:能讓域使用者/普通User使用者以管理員身份執行指定程式
- Oracle面試、筆試常見題Oracle面試筆試
- Oracle大表清理truncate .. reuse storageOracle
- 把Oracle的SQL執行計劃 授權給普通使用者OracleSQL