我使用SQL Developer与Oracle连接。
我尝试“自动化”权限,这意味着我不需要一直为每个表和每个用户键入每个GRANT注释。所以我的想法是做三张桌子。一个拥有存在于数据库中的表名和一个表组。一个拥有所有用户,另一个拥有权限组的权限。
现在我试着自动化它,把它放在一个授权中。像这样:
GRANT (Select rights from DB_Rights where rightgroup = 1)
ON (Select tables from DB_Tables where Tablegroup = 1) to (User)但它并没有起作用。我的错误在哪里?或者这是不可能的?有没有另一种选择来“自动化”它?
发布于 2015-09-22 23:19:06
解决方案可能类似于此。您仍然需要编写正确的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;为了验证您的命令,请用DBMS_OUTPUT.PUT_LINE(...);替换EXECUTE IMMEDIATE ...
一般而言,请考虑tbone所建议的ROLES的用法。但是,在某些情况下,角色不适用,或者最终以“自动授予角色”而不是“自动授予用户”告终。
https://stackoverflow.com/questions/32718469
复制相似问题