我使用SQL Developer连接Oracle。
我尝试"自动化"权利,这意味着我不需要一直为每个表和每个用户键入每个GRANT注释。所以我的想法是制作三张桌子。一个拥有数据库中存在的表名和一个表组。一个拥有所有用户,一个拥有权利组的权利。
现在我尝试将其自动化,将其放入一个赠款中。像:
GRANT (Select rights from DB_Rights where rightgroup = 1)
ON (Select tables from DB_Tables where Tablegroup = 1) to (User)
但它没有用。我的错误在哪里?或者这不可能吗?是否有另一种选择"自动化"它?
答案 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”