12c 新增許可權Inherit privilege說明
inherit privilege許可權:
B使用者(較低許可權)建立了Invoker’s right procedure,A使用者(較高許可權)呼叫B使用者的procedure執行時使用的是A的許可權,為防止B在A不知情的情況下修改Procedure利用A的高許可權做一些越權操作,等下次A使用者執行procedure是這些操作便被執行。12c中引入了inherit privilege許可權,它表明invoker是否能以invoker的身份去執行owner的invoker’s right privilege,或者說B使用者的procedure是否有權以A使用者的許可權去執行這個procedure。
1、 預設情況下系統對於新建的使用者會將inherit privilege許可權授予PUBLIC,相當於grant inherit privileges on NEWUSER to PUBLIC:
---建立使用者:
drop user a cascade;
drop user b cascade;
create user a identified by a;
create user b identified by b;
grant connect, resource to a;
grant connect, resource to b;
grant unlimited tablespace to a,b;
---dba_tab_privs檢視中驗證a,b使用者都已經將inherit privilege許可權付給了PUBLIC
select * from dba_tab_privs where grantee='PUBLIC' AND privilege like '%INHERIT%'
connect a/a@192.168.56.101/orapdba
create table a (col1 varchar2(1));
insert into a values ('a');
commit;
connect b/b@192.168.56.101/orapdba
create table a (col1 varchar2(1));
insert into a values ('b');
commit;
create or replace procedure test_inv_rights authid current_user as
v_current_user varchar2(30);
v_session_user varchar2(30);
t_val varchar2(10);
begin
SELECT sys_context('USERENV','SESSION_USER'),
sys_context('USERENV','CURRENT_USER')
INTO v_session_user, v_current_user
FROM dual;
SELECT col1 into t_val from a;
dbms_output.put_line( 'Called procedure is: ' || 'test_inv_rights' );
dbms_output.put_line( 'User calling procedure: ' || v_session_user );
dbms_output.put_line( 'User-context for procedure: ' || v_current_user );
dbms_output.put_line( 'Table value : ' || t_val );
--execute immediate 'begin test_schema_a; end;';
end;
/
---賦權給使用者a
grant execute on b.test_inv_rights to a;
---a使用者執行b使用者下的儲存過程
SQL> connect a/a@192.168.56.101/orapdba
SQL> set serveroutput on
SQL> exec b.test_inv_rights;
Called procedure is: test_inv_rights
User calling procedure: A
User-context for procedure: A
Table value : a
PL/SQL procedure successfully completed.
---從public revoke inherit privilege許可權,a使用者沒有執行b使用者procedure的許可權了
SQL> connect a/a@192.168.56.101/orapdba
Connected.
SQL> revoke inherit privileges on user a from public;
Revoke succeeded.
SQL> exec b.test_inv_rights;
BEGIN b.test_inv_rights; END;
*
ERROR at line 1:
ORA-06598: insufficient INHERIT PRIVILEGES privilege
ORA-06512: at "B.TEST_INV_RIGHTS", line 1
ORA-06512: at line 1
---要恢復執行b使用者procedure的許可權,可以採取如下方法:
給b使用者賦予inherit privilege的許可權
SQL> connect a/a@192.168.56.101/orapdba
Connected.
SQL> grant inherit privileges on user a to b;
Grant succeeded.
SQL> set serveroutput on
SQL> exec b.test_inv_rights;
Called procedure is: test_inv_rights
User calling procedure: A
User-context for procedure: A
Table value : a
PL/SQL procedure successfully completed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/53956/viewspace-1269350/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 基本Linux許可權提升(Basic Linux Privilege Escalation)Linux
- Android property屬性許可權新增Android
- 使用者角色許可權控制包 Laravel-permission 使用說明Laravel
- Ubuntu-給新增使用者新增root許可權Ubuntu
- 許可權之選單許可權
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- lockdown profile 12c之後的許可權控制新特性
- 許可權系統:一文搞懂功能許可權、資料許可權
- Linux特殊許可權之suid、sgid、sbit許可權LinuxUI
- 如何優雅的在 vue 中新增許可權控制Vue
- MySQL 給使用者新增 ALTER VIEW 的許可權MySqlView
- mysql8.0新增使用者,並指定許可權MySql
- 給非 root 使用者新增 docker 使用許可權Docker
- 給安卓 app 新增許可權的一種方法安卓APP
- mysql 新增、刪除使用者和許可權分配MySql
- mysql許可權MySql
- 許可權控制
- Linux許可權Linux
- Android開發-更”聰明”的申請許可權方式Android
- android動態許可權到自定義許可權框架Android框架
- 選單許可權和按鈕許可權設定
- Linux的檔案存取許可權和0644許可權Linux
- Android6.0------許可權申請管理(單個許可權和多個許可權申請)Android
- 【自然框架】許可權的視訊演示(二):許可權到欄位、許可權到記錄框架
- django開發之許可權管理(一)——許可權管理詳解(許可權管理原理以及方案)、不使用許可權框架的原始授權方式詳解Django框架
- 許可權系統:許可權應用服務設計
- Odoo許可權管理Odoo
- shiro許可權控制
- vue router 許可權Vue
- 特殊許可權管理
- Linux 特殊許可權Linux
- 許可權管控
- sql許可權管理SQL
- 許可權管理策略
- odoo 許可權分配Odoo
- MySQL許可權管理MySql
- Shiro許可權框架框架
- 許可權模型:ACL模型