自动化权利

时间:2015-09-22 13:39:24

标签: oracle plsql oracle-sqldeveloper

我使用SQL Developer连接Oracle。

我尝试"自动化"权利,这意味着我不需要一直为每个表和每个用户键入每个GRANT注释。所以我的想法是制作三张桌子。一个拥有数据库中存在的表名和一个表组。一个拥有所有用户,一个拥有权利组的权利。

现在我尝试将其自动化,将其放入一个赠款中。像:

GRANT (Select rights from DB_Rights where rightgroup = 1)
    ON (Select tables from DB_Tables where Tablegroup = 1) to (User)

但它没有用。我的错误在哪里?或者这不可能吗?是否有另一种选择"自动化"它?

1 个答案:

答案 0 :(得分:1)

解决方案可能类似于此。你仍然需要编写正确的SELECT查询,但你应该知道它是如何工作的。

BEGIN
   FOR aGRANT IN (
       Select rights, tables, User_NAME 
       from DB_Rights 
          CROSS JOIN DB_Tables 
       where Tablegroup = 1 AND rightgroup = 1 AND Tablegroup = 1) 
    LOOP
      EXECUTE IMMEDIATE 'GRANT '||aGRANT.rights||' ON '||aGRANT.tables||' TO '||aGRANT.User_NAME;
   END LOOP;
END;

为了验证您的命令,请EXECUTE IMMEDIATE ...

替换DBMS_OUTPUT.PUT_LINE(...);

通常会考虑tbone建议的ROLES的使用情况。但是,有些情况下ROLES不适用或最终“自动授予ROLES”而不是“自动授予USERS”