擁有dba角色的普通帳號在pl sql中查sys的對像時仍需顯式授權
今天ronon在etl帳號下建立下述過程,查詢分割槽表的分割槽鍵資料型別,發現執行過程時出錯, 而etl帳號是有dba角色的.
關鍵點:在PL/SQL裡面select 表的許可權需要單獨賦予的。即使你是DBA使用者 (不能依賴於role-based privileges), 更深一層的原因以後給出.
所以,語句中如果引用了其它帳號的對像,一定要注意這一點.
[@more@]SQL> col GRANTEE for a10
SQL> col GRANTED_ROLE for a15
SQL>
SQL> select grantee,GRANTED_ROLE,ADMIN_OPTION,DEFAULT_ROLE from DBA_ROLE_PRIVS where grantee in('ETL') order by grantee;
GRANTEE GRANTED_ROLE ADMIN_ DEFAUL
---------- --------------- ------ ------
ETL DBA NO YES
ETL DEVELOPERS NO YES
create or replace procedure tf_get_par_clo_type(p_table_name in varchar2) as
v_par_clo_type varchar2(64);
v_str_owner varchar2(1024) := '';
v_str_tabname varchar2(1024) := '';
v_str varchar2(1024);
begin
v_str_owner := upper(substr(p_table_name,1,instr(p_table_name, '.') -1));
v_str_tabname := upper(substr(p_table_name,instr(p_table_name, '.') + 1));
v_str := ' select data_type ' ||
' from sys.dba_tab_columns c, sys.dba_part_key_columns p, sys.dba_part_tables t ' ||
' where p.name = t.table_name ' ||
' and c.owner = t.owner ' ||
' and t.owner = '''||v_str_owner||''''||
' and c.table_name = t.table_name ' ||
' and c.column_name = p.column_name ' ||
' and t.table_name = '''||v_str_tabname|| '''';
dbms_output.put_line(v_str);
execute immediate v_str into v_par_clo_type;
--using v_str_tabname;
--return v_par_clo_type;
dbms_output.put_line(v_par_clo_type);
/* exception
when others then
--return 'error';*/
null;
end tf_get_par_clo_type;
SQL> exec etl.tf_get_par_clo_type('HLW.TEST_PARTITION');
select data_type from sys.dba_tab_columns c, sys.dba_part_key_columns p,
sys.dba_part_tables t where p.name = t.table_name and c.owner = t.owner and
t.owner = 'HLW' and c.table_name = t.table_name and c.column_name =
p.column_name and t.table_name = 'TEST_PARTITION'
BEGIN etl.tf_get_par_clo_type('HLW.TEST_PARTITION'); END;
*
ERROR at line 1:
ORA-00942: table or view does not exist
ORA-06512: at "ETL.TF_GET_PAR_CLO_TYPE", line 19
ORA-06512: at line 1
procedure中的語句單獨拿出來執行正常
SQL> select data_type from sys.dba_tab_columns c, sys.dba_part_key_columns p,
2 sys.dba_part_tables t where p.name = t.table_name and c.owner = t.owner and
3 t.owner = 'HLW' and c.table_name = t.table_name and c.column_name =
4 p.column_name and t.table_name = 'TEST_PARTITION';
DATA_TYPE
--------------------------------------------------------------------------------
DATE
注意錯誤資訊ORA-00942: table or view does not exist, 是不是etl帳號在pl/sql引擎下執行時,不具備select許可權呢?
我們試一下顯式授權
grant select on sys.dba_tab_columns to etl;
grant select on sys.dba_part_key_columns to etl;
grant select on sys.dba_part_tables to etl;
這次可以正常執行了
SQL> exec etl.tf_get_par_clo_type('HLW.TEST_PARTITION');
select data_type from sys.dba_tab_columns c, sys.dba_part_key_columns p,
sys.dba_part_tables t where p.name = t.table_name and c.owner = t.owner and
t.owner = 'HLW' and c.table_name = t.table_name and c.column_name =
p.column_name and t.table_name = 'TEST_PARTITION'
DATE
PL/SQL procedure successfully completed.
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/94384/viewspace-1028802/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【DBA】Oracle dba角色不是萬能的,儲存過程需要顯示授權Oracle儲存過程
- 白話講解函式計算中的角色授權函式
- 擁有帳戶檔案
- ultraedit高亮顯示pl/sqlSQL
- 【DBA】Oracle 中DBA地址的檔案號使用的是相對檔案號(RELATIVE_FNO)Oracle
- PL/SQL package SYS.DBMS_BACKUP_RESTORE version 19.16.00.00 in TARGET database isSQLPackageRESTDatabase
- 原生IP在養號策略中的關鍵角色
- 【OracleEBS】 在PL/SQL中呼叫Oracle ERP請求OracleSQL
- [20240607]PL/SQL中sql語句的註解.txtSQL
- 查詢資料庫授權以及授權到期的處理方法資料庫
- pl/sql developer中關於TIMESTAMP顯示格式的疑問和學習SQLDeveloper
- Oracle PL/SQL程式碼中的註釋OracleSQL
- Quantic Foundry:調查顯示29%的男性玩家喜歡在遊戲中玩女性角色遊戲
- Pew:調查顯示78%的美國人認為社交媒體公司擁有太多政治權力
- 微信公眾號網頁授權中轉功能-解決網頁授權域名個數限制-透過已授權的域名進行中轉網頁
- 你知道嗎?甲骨文擁有JavaScript商標權 未經授權不得使用JavaScript
- Piper Sandler:調查顯示87%的美國青少年擁有iPhoneiPhone
- Piper Sandler:調查顯示88% 的美國青少年擁有 iPhoneiPhone
- Oracle建立使用者、角色、授權、建表Oracle
- Keycloak中授權的實現
- Think Authz:支援 ACL、RBAC、ABAC 等模型的授權(角色和許可權控制)庫模型
- 呼叫者許可權與定義者許可權的pl/sql子程式SQL
- 在公司裡面拿了幾個授權發明,對自己的職業發展,有沒有幫助啊?
- 使用 authorizeResource 資源授權時的坑
- 【ASP.NET Core】按使用者角色授權ASP.NET
- Oracle dba角色和sysdba的區別Oracle
- 如何在儲存過程中擁有role的許可權儲存過程
- 關於微信公眾號靜默授權和非靜默授權的區別
- 微服務中的授權模式 - osohq微服務模式
- Oracle 的PL/SQL語言使用OracleSQL
- 在modelsim中查詢指定訊號是否有特定值
- oracle DBA 角色重建Oracle
- 1.5.2.5. DBA 角色
- 在axios中怎樣新增授權驗證?iOS
- PL/SQL 宣告SQL
- Oracle PL/SQLOracleSQL
- Generation Lab:調查顯示美年輕人認為社交媒體擁有過大權力
- postgresql dba常用sql查詢語句SQL
- 使用PL/SQL找到兩個表中的相似值FKSQL