wer*_*tyq 3 oracle permissions role oracle-12c
我开始学习 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;
Run Code Online (Sandbox Code Playgroud)
目标是创建用户和角色,然后为角色授予权限,然后将角色分配给用户,以便用户继承权限。我还应该提到我可以以SYSTEM
用户身份连接到数据库。
但是,我也在使用一个第三方应用程序,它应该使用上面创建的这个用户连接到我的 Oracle 数据库,它的行为就像用户没有任何权限一样,它不会在数据库中创建任何表/视图/等. 所以我直接将权限授予用户,第三方应用程序正常运行。所以我删除了用户的权限并再次将角色授予用户,第三方应用程序再次不会创建表/视图/等。
所以我想知道第三方应用程序是否有错误,或者 Oracle 用户是否没有以我认为的方式从角色继承特权?我很感激你的见解:)
谢谢!
您没有提到它,但是在使用 PL/SQL 时这是非常典型的。
对于定义为使用定义者权限执行的命名 PL/SQL 块,禁用通过角色授予的权限。
在以定义者的权限执行的任何命名的 PL/SQL 块(存储过程、函数或触发器)中,所有角色都被禁用。角色不用于权限检查,您不能在定义者的权限过程中设置角色。
您可以在上面引用的文档中找到更多详细信息。
可能的变通方法包括直接授予权限(正如您已经做过的那样)或定义 PL/SQL 程序单元以使用调用者的权限执行。
另一种从 12c 开始的可能性,您可以向 PL/SQL 程序单元授予角色。因此,如果您p1
使用动态 SQL调用的过程创建表,则可以将上述角色授予它:
grant wertyq_usr_role to procedure p1;
Run Code Online (Sandbox Code Playgroud)
选择一款适合您的需求。