Oracle

通過 Oracle 12c 中的角色授予使用者權限的問題

  • December 14, 2016

我開始學習 Oracle 12c,所以請原諒我的錯誤術語。我編寫了這個基本腳本來設置使用者和權限:

CREATE USER wertyq_db_usr IDENTIFIED BY justatest ACCOUNT UNLOCK DEFAULT TABLESPACE "USERS" TEMPORARY TABLESPACE "TEMP" PROFILE "DEFAULT";
ALTER USER wertyq_db_usr QUOTA 100M ON USERS;
GRANT RESOURCE, CONNECT TO wertyq_db_usr;
GRANT EXECUTE ON CTX_DDL TO wertyq_db_usr;
GRANT EXECUTE ON "CTXSYS"."CTX_DDL" TO wertyq_db_usr;
GRANT UNLIMITED TABLESPACE TO wertyq_db_usr;
CREATE ROLE wertyq_usr_role;
GRANT CREATE PROCEDURE TO wertyq_usr_role;
GRANT CREATE TRIGGER TO wertyq_usr_role;
GRANT CREATE SESSION TO wertyq_usr_role;
GRANT CREATE VIEW TO wertyq_usr_role;
GRANT wertyq_usr_role TO wertyq_db_usr;

目標是創建一個使用者和一個角色,然後授予角色權限,然後將角色分配給使用者,以便使用者繼承權限。我還應該提到我可以以SYSTEM使用者身份連接到數據庫。

但是,我也在使用的第三方應用程序,它應該使用上面創建的這個使用者連接到我的 Oracle 數據庫,它的行為就像使用者沒有任何權限並且它不會在數據庫中創建任何表/視圖/等. 因此,我將權限直接授予使用者,第三方應用程序正常執行。所以我刪除了使用者的權限並再次將角色授予使用者,第三方應用程序再次不會創建表/視圖/等。

所以我想知道第三方應用程序是否有錯誤,或者 Oracle 使用者是否沒有以我認為的方式從角色繼承權限?我會很感激你的見解:)

謝謝!

您沒有提到它,但這在使用 PL/SQL 時非常典型。

對於被定義為使用定義者權限執行的命名 PL/SQL 塊,通過角色授予的權限被禁用。

角色如何在 PL/SQL 塊中工作

在使用定義者權限執行的任何命名的 PL/SQL 塊(儲存過程、函式或觸發器)中,所有角色都被禁用。角色不用於權限檢查,您不能在定義者的權限過程中設置角色。

您可以在上面引用的文件中找到更多詳細資訊。

可能的解決方法包括直接授予權限(正如您已經做過的那樣)或定義 PL/SQL 程序單元以使用呼叫者的權限執行。

從 12c 開始的另一種可能性是,您可以將角色授予 PL/SQL 程序單元。因此,如果您使用稱為p1使用動態 SQL 的過程創建表,則可以將上述角色授予它:

grant wertyq_usr_role to procedure p1;

選擇適合您需求的那一款。

引用自:https://dba.stackexchange.com/questions/158079