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