在 Oracle 中授予角色和权限——我应该使用过程还是函数?
Granting roles and privileges in Oracle - should I use procedures or functions?
我必须尽可能多地自动化我的代码。我已经创建了一些用户,现在我需要创建角色来分配给用户并授予权限。我可以为此使用函数,还是最好使用过程?任何建议表示赞赏。
您不能在 PL/SQL 过程中直接编写 DDL 语句,例如 CREATE USER 或 GRANT。相反,您应该使用 EXECUTE IMMEDIATE,如
CREATE OR REPLACE PROCEDURE PROC_CREATE_ROLES IS
BEGIN
EXECUTE IMMEDIATE 'CREATE ROLE ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT ON BLAH TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE ON BLORT TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE ON YADA TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT ADMIN_STAFF TO USER1, USER2, USER3';
END PROC_CREATE_ROLES;
分享和享受。
编辑
在我看来,最好在这里使用一个程序。
祝你好运。
我会使用一个过程,可能在 'UTILITIES' 或 'USER_MANAGEMENT' 包中。选择过程是因为过程不需要 return 任何东西。一个函数对调用者总是有一些价值return。在以下情况下使用程序:
- 您想执行一些预定义的操作
- 你不想return直接给一个值
在以下情况下使用函数:
- 您想执行计算,或获得某种 return 值
也可以从 SQL 内部使用函数,而从单独的 BEGIN/END 块调用过程。
使用过程并确保它们由直接授予所需特权的帐户所有。这样做会使您的应用程序更加安全,因为您不需要使用 dba(或类似)帐户登录。不要忘记添加日志记录和审计。
我必须尽可能多地自动化我的代码。我已经创建了一些用户,现在我需要创建角色来分配给用户并授予权限。我可以为此使用函数,还是最好使用过程?任何建议表示赞赏。
您不能在 PL/SQL 过程中直接编写 DDL 语句,例如 CREATE USER 或 GRANT。相反,您应该使用 EXECUTE IMMEDIATE,如
CREATE OR REPLACE PROCEDURE PROC_CREATE_ROLES IS
BEGIN
EXECUTE IMMEDIATE 'CREATE ROLE ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT ON BLAH TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT, UPDATE ON BLORT TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT SELECT, INSERT, UPDATE ON YADA TO ADMIN_STAFF';
EXECUTE IMMEDIATE 'GRANT ADMIN_STAFF TO USER1, USER2, USER3';
END PROC_CREATE_ROLES;
分享和享受。
编辑
在我看来,最好在这里使用一个程序。
祝你好运。
我会使用一个过程,可能在 'UTILITIES' 或 'USER_MANAGEMENT' 包中。选择过程是因为过程不需要 return 任何东西。一个函数对调用者总是有一些价值return。在以下情况下使用程序:
- 您想执行一些预定义的操作
- 你不想return直接给一个值
在以下情况下使用函数:
- 您想执行计算,或获得某种 return 值
也可以从 SQL 内部使用函数,而从单独的 BEGIN/END 块调用过程。
使用过程并确保它们由直接授予所需特权的帐户所有。这样做会使您的应用程序更加安全,因为您不需要使用 dba(或类似)帐户登录。不要忘记添加日志记录和审计。