擁有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儲存過程
- 白話講解函式計算中的角色授權函式
- oracle顯式授權和隱式授權Oracle
- PL/SQL Developer顯示行號SQLDeveloper
- 實現基於角色的授權
- SQL Server中查詢使用者的物件許可權和角色的方法SQLServer物件
- 公用查詢帳號的管理
- 擁有帳戶檔案
- 把Oracle的SQL執行計劃 授權給普通使用者OracleSQL
- 【顯式授權】Procedure中無法完成DDL的建表操作的原因探查
- PLSQL Language Reference-PL/SQL語言基礎-表示式-PL/SQL表示式中的SQL函式SQL函式
- PL/SQL呼叫時使用呼叫者的許可權SQL
- 小程式沒有授權時的處理方法
- 授權物件許可權後的授權者顯示問題物件
- Asp.net中基於Forms驗證的角色驗證授權ASP.NETORM
- 2 Day DBA-管理Oracle例項-關於管理帳戶和許可權-修改角色Oracle
- 2 Day DBA-管理Oracle例項-關於管理帳戶和許可權-建立角色Oracle
- 原生IP在養號策略中的關鍵角色
- 擁有GRANT ANY OBJECT PRIVILEGE許可權時的許可權回收Object
- GOTO語句在PL/SQL中的應用GoSQL
- Oracle使用者、授權、角色管理Oracle
- Oracle資料庫PL/SQL Developer查詢結果顯示問號亂碼的解決方法Oracle資料庫SQLDeveloper
- 使用者有connect,resource,dba角色許可權後回收dba許可權導致無UNLIMITED TABLESPACE許可權造成業務中斷MIT
- Quantic Foundry:調查顯示29%的男性玩家喜歡在遊戲中玩女性角色遊戲
- Pew:調查顯示78%的美國人認為社交媒體公司擁有太多政治權力
- 查詢使用者的系統許可權和使用者所擁有的角色
- 【DBA】Oracle 中DBA地址的檔案號使用的是相對檔案號(RELATIVE_FNO)Oracle
- PL/SQL 中的儲存過程與函式SQL儲存過程函式
- 查詢資料庫授權以及授權到期的處理方法資料庫
- 對Oracle View授權和where查詢需要注意的地方OracleView
- Piper Sandler:調查顯示87%的美國青少年擁有iPhoneiPhone
- Piper Sandler:調查顯示88% 的美國青少年擁有 iPhoneiPhone
- 對列授權
- 查詢沒有許可權但資料字典中顯示有許可權
- pl/sql中的row物件SQL物件
- 你知道嗎?甲骨文擁有JavaScript商標權 未經授權不得使用JavaScript
- ORACLE中的許可權/角色/DBA/SYSDBA以及remote_login_passwordfile引數的作用OracleREM
- 許可權管理中角色間的繼承關係有沒有必要?繼承