我的Oracle环境中有一种情况,我希望能够在特定模式的所有视图上为特定用户/组授予选择权限。
我意识到我可以编写一个动态语句来遍历模式中的所有视图,并按照here单独授予它们权限,但我希望能够将其应用于所有存在的视图在现在或未来的架构中。
我还在考虑编写一个可以监视新视图创建的DDL trigger的可能性,但是在触发器中设置权限并不是我以前见过的,看起来不像是公认的做法
基本上,是否有视图模拟 GRANT EXECUTE ANY PROCEDURE ?
答案 0 :(得分:1)
EXECUTE ANY PROCEDURE
grant允许用户执行数据库中任何模式的任何过程,而不仅仅是特定模式中的过程。您可以授予用户SELECT ANY TABLE
权限 - 允许用户查询数据库中任何模式中的任何表或视图,而不仅仅是特定模式中的模式。这是类似的特权,它们似乎不太可能是你真正想要的。
由于不应动态创建视图,因此通常只需在创建通过环境升级的新视图的脚本中包含相应的GRANT
语句来处理此类要求。动态授予权限通常是不受欢迎的,因为它通常意味着您的变更控制流程存在问题需要解决。
对于坚持定期创建新对象的第三方应用程序,我创建了DDL trigger that grants privileges on new objects。为此,您需要提交实际执行GRANT
的作业。 GRANT
是一个DDL语句,因此它会发出隐式提交,并且在触发器中不允许隐式提交,您必须拥有一个在创建对象后运行的单独作业。这意味着您最终会得到许多移动部件,这些部件通常会使您的环境变得更加复杂。