【问题标题】:Grant Select on All VIEWS [current and future] in Schema X对模式 X 中的所有视图 [当前和未来] 授予选择
【发布时间】:2013-11-01 14:49:17
【问题描述】:

我在我们的 Oracle 环境中遇到一种情况,我希望能够向特定用户/组授予特定模式中所有视图的选择权限。

我意识到我可以编写一个动态语句来遍历架构中的所有视图并分别授予它们权限,如 here 所示,但我希望能够将此应用于存在于现在或将来的模式。

我也在考虑编写一个DDL trigger 的可能性,它可以监控新视图的创建,但在触发器中设置权限不是我以前见过的,而且似乎也不是公认的做法。

基本上,有没有类似于GRANT EXECUTE ANY PROCEDUREVIEW

【问题讨论】:

    标签: oracle views privileges


    【解决方案1】:

    EXECUTE ANY PROCEDURE 授权允许用户执行数据库中任何模式中的任何过程,而不仅仅是特定模式中的那些。您可以授予用户SELECT ANY TABLE 特权——这将允许用户查询数据库中任何模式中的任何表或视图,而不仅仅是特定模式中的那些。这就是类似的特权,似乎两者都不太可能是你真正想要的。

    由于不应动态创建视图,因此通常只需在创建新视图的脚本中包含适当的 GRANT 语句来处理这种要求,这些新视图会在环境中得到提升。动态授予权限通常不受欢迎,因为它通常意味着您的变更控制流程存在需要解决的问题。

    对于坚持定期创建新对象的第三方应用程序,我创建了一个DDL trigger that grants privileges on new objects。为此,您需要提交一个实际执行GRANT 的作业。 GRANT 是一个 DDL 语句,因此它发出隐式提交,并且触发器中不允许隐式提交,您必须有一个单独的作业在对象创建后立即运行。这意味着您最终会得到许多移动部件,这些部件通常会使您的环境更加复杂。

    【讨论】:

    • 感谢贾斯汀的澄清。这样做的愿望特别是由于变更管理的分散性。我希望可以简单地设置一个角色,该角色始终对 Schema X 中的所有视图具有选择权限,用于当前存在的视图和将来创建的任何视图。根据您的回答和持续的研究,我认为这是不可能的。
    • @Carth - 正确,没有简单的方法可以做这种事情。理想情况下,您需要处理变更管理的碎片化性质。除此之外,DDL 触发器方法工作得相当好,它只会使环境更加复杂,并且如果触发器在不同环境中执行不同的操作,则可能会使变更管理更难解开。
    猜你喜欢
    • 2018-03-19
    • 1970-01-01
    • 1970-01-01
    • 2014-08-10
    • 1970-01-01
    • 2023-04-01
    • 2020-03-14
    • 2016-01-24
    • 2011-08-24
    相关资源
    最近更新 更多