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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收Object
- 系統許可權 GRANT ANY OBJECT PRIVILEGE的作用!Object
- MySQL的許可權名稱歸納和說明MySql
- 基本Linux許可權提升(Basic Linux Privilege Escalation)Linux
- 和物件許可權相關的表table_privilege_map物件
- 【Privilege】Oracle物件許可權級聯收回現象測試Oracle物件
- Oracle檢視使用者預設表空間、臨時表空間、系統許可權、物件許可權、角色許可權舉例說明Oracle物件
- 使用者角色許可權控制包 Laravel-permission 使用說明Laravel
- 【Privilege】Oracle系統許可權非級聯收回現象測試Oracle
- suid,sgid,sticky的三個許可權的詳細說明UI
- 【framework】framework中為systemserver新增許可權FrameworkServer
- Android property屬性許可權新增Android
- 說說Oracle三層許可權體系(下)Oracle
- Ubuntu-給新增使用者新增root許可權Ubuntu
- Oracle的物件許可權、角色許可權、系統許可權Oracle物件
- 智慧政務說明書 組織機構設定 許可權管理 (十三)
- 許可權之選單許可權
- Jenkins搭建 - 新增使用者許可權Jenkins
- 程式碼批量新增ACL管理員許可權
- android framework中新增自定義許可權AndroidFramework
- 如何用 Vue 實現前端許可權控制(路由許可權 + 檢視許可權 + 請求許可權)Vue前端路由
- linux 檔案許可權 s 許可權和 t 許可權解析Linux
- linux給使用者新增sudo許可權Linux
- linux為使用者新增sudo許可權Linux
- 給安卓 app 新增許可權的一種方法安卓APP
- Linux-許可權管理(ACL許可權)Linux
- AIX 的許可許可權(轉)AI
- lockdown profile 12c之後的許可權控制新特性
- Android系統許可權和root許可權Android
- set uid ,set gid,sticky bit的三個許可權的詳細說明(轉)UI
- mysql8.0新增使用者,並指定許可權MySql
- 如何優雅的在 vue 中新增許可權控制Vue
- mysql 新增、刪除使用者和許可權分配MySql
- 給非 root 使用者新增 docker 使用許可權Docker
- Linux給普通使用者新增ssh許可權Linux
- Linux為普通使用者新增sudo許可權Linux
- MySQL 給使用者新增 ALTER VIEW 的許可權MySqlView
- mysql許可權MySql