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

时间:2015-02-18 20:48:06

标签: oracle plsql privileges grant

我必须尽可能多地自动化代码。我创建了一些用户,现在我需要创建角色来分配给用户并授予权限。我可以使用此功能,还是最好使用程序?任何建议表示赞赏

3 个答案:

答案 0 :(得分:0)

您无法在PL / SQL过程中直接编写诸如CREATE USER或GRANT之类的DDL语句。相反,您应该使用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;

分享并享受。

修改

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

祝你好运。

答案 1 :(得分:0)

我会使用一个程序,可能在一个' UTILITIES'或者' USER_MANAGEMENT'包。程序的选择是因为程序不需要返回任何东西。函数总是有一些值可以返回给调用者。在以下情况下使用程序:

  • 您想要执行一些预定义的操作
  • 您不想直接返回值

在以下时间使用功能:

  • 您想要执行计算,或获得某种返回值

也可以从SQL内部使用函数,而从单独的BEGIN / END块调用过程。

答案 2 :(得分:0)

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