在Oracle中授予角色和权限-我应该使用过程还是函数?

在Oracle中授予角色和权限-我应该使用过程还是函数?,oracle,plsql,privileges,grant,Oracle,Plsql,Privileges,Grant,我必须尽可能地自动化我的代码。我已经创建了一些用户,现在我需要创建角色来分配给用户并授予特权。我可以为此使用函数,还是最好使用过程?谢谢你的建议 不能在PL/SQL过程中直接编写诸如CREATEUSER或GRANT之类的DDL语句。相反,您应该使用executeimmediate,如中所示 CREATE OR REPLACE PROCEDURE PROC_CREATE_ROLES IS BEGIN EXECUTE IMMEDIATE 'CREATE ROLE ADMIN_STAFF';

我必须尽可能地自动化我的代码。我已经创建了一些用户,现在我需要创建角色来分配给用户并授予特权。我可以为此使用函数,还是最好使用过程?谢谢你的建议

不能在PL/SQL过程中直接编写诸如CREATEUSER或GRANT之类的DDL语句。相反,您应该使用executeimmediate,如中所示

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;
分享和享受

编辑 在我看来,最好在这里使用一个程序


祝你好运。

我会使用一个过程,可能在“实用程序”或“用户管理”包中。过程的选择是因为过程不需要返回任何内容。函数总是有一些值返回给调用方。在以下情况下使用程序:

您希望执行一些预定义的操作 您不希望直接返回值 在以下情况下使用函数:

您希望执行计算,或获取某种类型的返回值
函数也可以从SQL内部使用,而过程是从单独的开始/结束块调用的。

使用过程并确保它们由直接授予所需特权的帐户拥有。这样做可以使您的应用程序更加安全,因为您不需要使用dba或类似帐户登录。不要忘记添加日志记录和审核。

在授予完成后,您是否需要返回一些内容?如果不是,为什么要使用函数?过程只是将控制权返回给调用方,这意味着成功。如果代码中有一些操作的结果,您将使用这些结果,则使用函数。我想创建一个角色,然后根据用户的访问级别(1、2或3)将其分配给用户。我在一个系统中工作过,遇到类似问题@helpc是对的,你不需要返回任何东西,这样你就可以进行一个过程。应该没问题。好的,谢谢@Jorge Campos,但是我必须在代码中的某个地方有一个函数,同时授予访问权限等,所以我如何才能将函数合并到中以授予特权?创建或替换过程proc_CREATE_角色是BEGIN CREATE ROLE admin_staff;授予管理员选择、插入、更新、删除权限;结束/这是一个非常正确的观点,但不是眼前的问题。海报询问在进行此类操作时,程序或功能是否更适合。不过,对于一般知识来说,这是一个很好的代码示例;简短而甜蜜,切中要害。