授予对其他模式表的SELECT权限

3
我们的应用程序将数据结构化为两个模式,我们称之为Main和Archive。这是必需的,因为Main模式中的某些表被存档到相应的Archive模式表中。
Main模式更新使用Liquibase servlet运行,当应用程序首次启动时由Main用户运行。
目前,所有归档更新都作为单独的DBA任务运行。这有点不方便,因为我们必须为像在archive schema中创建新表并授予Main用户正确权限这样简单的事情而联系DBA,而Main用户是所有应用程序数据的绝对所有者。
我们正在考虑使Main用户能够在Archive模式中创建/修改对象,并将其嵌入到我们的Liquibase脚本中。
Main用户已被授予APP_ADMIN_ROLE,具备CREATE、ALTER、COMMENT ON等任何表的操作权限,因此它可以在Archive模式中创建和删除表。
然而,我们遇到了一个问题,即尽管Main用户可以创建Archive表,但它无法向自己授予该表的CRUD操作权限。
有没有办法实现这个? GRANT DBA TO MAIN 不是一个选项。
提前感谢。

https://dev59.com/cJ7ha4cB1Zd3GeqPg0Uy建议以其他用户身份连接,以便进行授权,以避免`ORA-01749: you may not GRANT/REVOKE privileges to/from yourself`错误。这是一个选择吗? - William Robertson
1
或者,您可以在“ARCHIVE”模式下创建一个过程,将表名传递给它,并执行“create table x as select * from main.x”。 - William Robertson
一种懒惰的解决方法:您也可以授予ANY TABLE的CRUD操作。在您的情况下,您可以将其授予主用户或角色。例如:grant select any table, update any table, delete any table, insert any table to APP_ADMIN_ROLE; - kfinity
谢谢大家。你们所有的评论都很有价值。然而,最适合我们需求的是kfinity的建议。我自己也接近这个解决方案,但贪心地想一次性完成所有授权,当然不起作用GRANT INSERT,UPDATE,DELETE,SELECT ANY TABLE TO main_usr;。请将您的评论发布为答案,以便我可以接受它。 - Julian
1个回答

0

为了以后的参考(并从kfinity的评论中提取),以下解决方案最好地回答了OP的问题:

一种懒惰的解决方法:您还可以授予任何表的CRUD操作。在您的情况下,您可以将其授予主用户或角色。例如

grant select any table, update any table, delete any table, insert any table to APP_ADMIN_ROLE;


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接