PL/SQL呼叫時使用呼叫者的許可權
資料庫中只定義一個儲存過程,所有使用者都可以使用,但是隻以自己(呼叫者)的許可權執行:
authid current_user
預設許可權是定義者的許可權
在scott下定義如下儲存過程:
create or replace procedure prev_test authid current_user is
begin
for rec in (select distinct a.OWNER from all_tables a) loop
dbms_output.put_line(rec.OWNER);
end loop;
end;
當以sys使用者呼叫此過程時產生了如下輸出:
SQL> set serveroutput on
SQL> exec scott.prev_test;
MDSYS
OUTLN
CTXSYS
OLAPSYS
FLOWS_FILES
OWBSYS
HR
SYSTEM
EXFSYS
APEX_030200
SCOTT
DBSNMP
ORDSYS
SYSMAN
OE
SH
PM
APPQOSSYS
XDB
ORDDATA
IX
SYS
WMSYS
H2
PL/SQL 過程已成功完成。
以scott使用者呼叫時:
SQL> set serveroutput on
SQL> exec scott.prev_test;
MDSYS
CTXSYS
OLAPSYS
SYSTEM
EXFSYS
APEX_030200
SCOTT
XDB
SYS
PL/SQL 過程已成功完成。
SQL> show user
USER 為 "SCOTT"
SQL>
重新定義另一過程:
create or replace procedure prev_test2 is
begin
for rec in (select distinct a.OWNER from all_tables a) loop
dbms_output.put_line(rec.OWNER);
end loop;
end;
sys:
SQL> set serveroutput on
SQL> exec scott.prev_test2
MDSYS
OUTLN
CTXSYS
OLAPSYS
FLOWS_FILES
OWBSYS
HR
SYSTEM
EXFSYS
APEX_030200
SCOTT
PM
DBSNMP
ORDSYS
SYSMAN
OE
SH
IX
APPQOSSYS
XDB
ORDDATA
SYS
WMSYS
H2
PL/SQL 過程已成功完成。
SQL> set serveroutput on
SQL> exec scott.prev_test2
MDSYS
CTXSYS
OLAPSYS
SYSTEM
EXFSYS
APEX_030200
SCOTT
XDB
SYS
PL/SQL 過程已成功完成。
這裡使用者看到的all_tables檢視裡的內容還是與呼叫者一致
再建立另一儲存過程:
create or replace procedure prev_test3 authid current_user is
begin
for rec in (select distinct emp.ename from emp ) loop
dbms_output.put_line(rec.ename);
end loop;
end;
grant execute on prev_test3 to hr;
以HR呼叫時:
SQL> conn hr/hr
已連線。
SQL> set serveroutput on
SQL> exec scott.prev_test3;
BEGIN scott.prev_test3; END;
*
第 1 行出現錯誤:
ORA-00942: 表或檢視不存在
ORA-06512: 在 "SCOTT.PREV_TEST3", line 3
ORA-06512: 在 line 1
在給使用者HR授予EMP的SELECT許可權以及給EMP建立PUBLIC SYNONYM之後:
SQL> conn hr/hr@orcl
已連線。
SQL> set serveroutput on
SQL> exec scott.prev_test3;
ALLEN
JONES
FORD
CLARK
MILLER
SMITH
WARD
MARTIN
SCOTT
TURNER
ADAMS
BLAKE
KING
JAMES
PL/SQL 過程已成功完成。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8520577/viewspace-769039/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- 對定義者許可權和呼叫者許可權的理解
- 使用呼叫者許可權實現Schema導向操作
- Oracle中定義者許可權和呼叫者許可權案例分析Oracle
- Oracle 定義者許可權與呼叫者許可權(AUTHID CURRENT_USER)Oracle
- 呼叫者許可權過程對OWNER物件的依賴物件
- 呼叫者儲存過程訪問許可權問題儲存過程訪問許可權
- 儲存過程,角色相關的呼叫者許可權和定義者許可權問題儲存過程
- sql許可權管理SQL
- 使用 Authid Current_User 為呼叫者授權
- SQL Server 許可權管理SQLServer
- 擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收Object
- sql server的許可權查詢SQLServer
- UserService 查詢使用者沒許可權的索引,增加臨時許可權queryIndicesNoPermission分析索引
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- SQL Server許可權問題SQLServer
- 使用者許可權繼承另一使用者的許可權繼承
- 許可權控制下的SQL寫法SQL
- Oracle 使用者、物件許可權、系統許可權Oracle物件
- Laravel 日誌有時候有許可權有時候沒有許可權?Laravel
- 【許可權管理】Oracle中檢視、回收使用者許可權Oracle
- AIX 的許可許可權(轉)AI
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 使用shell指令碼生成只讀許可權的sql指令碼指令碼SQL
- 許可權之選單許可權
- Android許可權管理之Permission許可權機制及使用Android
- 提取使用者許可權或是不同資料庫使用者許可權的同步資料庫
- PL/SQL呼叫JAVA CLASSSQLJava
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- Vim儲存時許可權不足
- PL/SQL精明的呼叫棧分析SQL
- 動態SQL 無許可權錯誤SQL
- SQL Server SA許可權最新入侵方法SQLServer
- audit物件許可權時的not exists選項!物件
- oracle使用者許可權Oracle
- mysql使用者許可權MySql
- oracle 使用者許可權Oracle