【顯式授權】Procedure中無法完成DDL的建表操作的原因探查
透過這篇文章,演示一下在PL/SQL中如何實現DDL建表功能。同時再次確認使用者僅僅具有DBA角色不是萬能的。
很多情況下顯示的授予是非常必須的,例如在文章《【SQL_TRACE】解決普通使用者無法執行SQL_TRACE跟蹤其他會話問題》http://space.itpub.net/519536/viewspace-616481中提到的問題也如出一轍。
1.為了防止大篇幅的程式碼干擾視線,這裡使用一個儘量簡單的Procedure p來進行演示。在procedure中實現DDL建表命令是需要一些技巧的。
create or replace procedure p is
v_SqlString varchar2(500);
begin
v_SqlString:= 'create table t(x int, y int)';
EXECUTE IMMEDIATE v_SqlString;
end p;
/
2.我們在普通使用者sec中執行上面的procedure。建立成功,沒有語法問題
sec@ora10g> create or replace procedure p is
2 v_SqlString varchar2(500);
3 begin
4 v_SqlString:= 'create table t(x int, y int)';
5 EXECUTE IMMEDIATE v_SqlString;
6 end p;
7 /
Procedure created.
3.在使用p進行建表的時候,系統提示許可權不足“insufficient privileges”
sec@ora10g> exec p;
BEGIN p; END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SEC.P", line 5
ORA-06512: at line 1
4.我們嘗試給sec使用者授予DBA角色,再嘗試執行一下p這個procedure,結果很顯然,仍然不可以完成任務
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> grant dba to sec;
Grant succeeded.
sec@ora10g> exec p;
BEGIN p; END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SEC.P", line 5
ORA-06512: at line 1
5.真實的原因是:如果想使用這個procedure建表,必須“顯示”的給sec使用者授予建表的許可權
sys@ora10g> grant create table to sec;
Grant succeeded.
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> exec p;
PL/SQL procedure successfully completed.
sec@ora10g> desc t;
Name Null? Type
------ -------- --------------
X NUMBER(38)
Y NUMBER(38)
6.OK,到此,我們實現了在普通使用者中使用procedure完成表的建立任務。
7.小結
透過這個實驗,再一次提醒我們,Oracle的許可權控制是很嚴謹的,沒有真正意義上的God許可權(比如DBA角色)。
-- The End --
很多情況下顯示的授予是非常必須的,例如在文章《【SQL_TRACE】解決普通使用者無法執行SQL_TRACE跟蹤其他會話問題》http://space.itpub.net/519536/viewspace-616481中提到的問題也如出一轍。
1.為了防止大篇幅的程式碼干擾視線,這裡使用一個儘量簡單的Procedure p來進行演示。在procedure中實現DDL建表命令是需要一些技巧的。
create or replace procedure p is
v_SqlString varchar2(500);
begin
v_SqlString:= 'create table t(x int, y int)';
EXECUTE IMMEDIATE v_SqlString;
end p;
/
2.我們在普通使用者sec中執行上面的procedure。建立成功,沒有語法問題
sec@ora10g> create or replace procedure p is
2 v_SqlString varchar2(500);
3 begin
4 v_SqlString:= 'create table t(x int, y int)';
5 EXECUTE IMMEDIATE v_SqlString;
6 end p;
7 /
Procedure created.
3.在使用p進行建表的時候,系統提示許可權不足“insufficient privileges”
sec@ora10g> exec p;
BEGIN p; END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SEC.P", line 5
ORA-06512: at line 1
4.我們嘗試給sec使用者授予DBA角色,再嘗試執行一下p這個procedure,結果很顯然,仍然不可以完成任務
sec@ora10g> conn / as sysdba
Connected.
sys@ora10g> grant dba to sec;
Grant succeeded.
sec@ora10g> exec p;
BEGIN p; END;
*
ERROR at line 1:
ORA-01031: insufficient privileges
ORA-06512: at "SEC.P", line 5
ORA-06512: at line 1
5.真實的原因是:如果想使用這個procedure建表,必須“顯示”的給sec使用者授予建表的許可權
sys@ora10g> grant create table to sec;
Grant succeeded.
sys@ora10g> conn sec/sec
Connected.
sec@ora10g> exec p;
PL/SQL procedure successfully completed.
sec@ora10g> desc t;
Name Null? Type
------ -------- --------------
X NUMBER(38)
Y NUMBER(38)
6.OK,到此,我們實現了在普通使用者中使用procedure完成表的建立任務。
7.小結
透過這個實驗,再一次提醒我們,Oracle的許可權控制是很嚴謹的,沒有真正意義上的God許可權(比如DBA角色)。
-- The End --
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/519536/viewspace-616625/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle顯式授權和隱式授權Oracle
- hibernate無法自動建表的原因以及.sql檔案無法執行的原因SQL
- logmnr挖掘中間有DDL的操作示例-對於執行DDL前的操作無法挖掘
- 【DDL】DDL執行過程及其隱式COMMIT行為的探查與演示MIT
- 授權物件許可權後的授權者顯示問題物件
- 常見的授權錯誤及原因
- procedure建立和執行的顯示賦權
- 04 MySQL 表的基本操作-DDLMySql
- 使用java操作ranger,hdfs ranger授權操作,hive ranger授權操作JavaRangerHive
- MySQL DDL操作表MySql
- MySQL的DDL和DML操作語法MySql
- Oracle建立使用者、角色、授權、建表Oracle
- 控制DDL許可權及紀錄DDL操作的Trigger
- 定義者許可權儲存過程role無效,必須要有顯式授權儲存過程
- ORACLE表生成MYSQL建表DDLOracleMySql
- ORACLE能不能給一個表中的列授權Oracle
- react-native下引入原生元件無法顯示的原因React元件
- mysql中建庫、建表、增刪改查DDL語句MySql
- 白話講解函式計算中的角色授權函式
- iOS中按鈕無法互動的5個原因iOS
- oracle一個建立使用者、建立表空間、授權、建表的完整過程Oracle
- HTML img 元素無法顯示 base64 圖片的可能原因HTML
- z-blog後臺驗證碼無法顯示的原因
- 擁有dba角色的普通帳號在pl sql中查sys的對像時仍需顯式授權SQL
- 微服務中的授權模式 - osohq微服務模式
- Keycloak中授權的實現
- 本地無法連線Mysql的原因MySql
- 控制皮膚中的java無法正常顯示Java
- Win10系統提示“QQ遠端系統許可權原因,暫時無法操作”的解決方法Win10
- 專案管理中的授權技巧(轉)專案管理
- mysql 儲存過程 procedure 批次建表MySql儲存過程
- MySQL 5.6授權表的內容用途介紹MySql
- Oracle在儲存過程中呼叫其他使用者的表授權Oracle儲存過程
- 空閒表上的聯機ddl操作有風險嗎
- Chrome 開發者工具無法顯示伺服器正常返回的 HTTP 請求的原因分析Chrome伺服器HTTP
- 深入學習MySQL授權表MySql
- 使用總結:Laravel 的 passport 密碼授權模式完成 API 認證LaravelPassport密碼模式API
- 印表機無法列印的原因與解決辦法