【问题标题】:How can I allow other users access to my schema如何允许其他用户访问我的架构
【发布时间】:2018-10-29 18:09:51
【问题描述】:
我正在尝试允许其他用户访问我自己的数据库架构。我知道如何在我自己的架构下向用户授予对单个表的权限,但我希望这样用户可以随时在我的架构下创建和编辑表。
【问题讨论】:
-
-
跨模式管理对象(而不是数据)的权限非常强大,不应轻易授予,而且您可能无论如何也无法授予这些权限。您可以查看proxy authentication 以允许这些用户有效地成为您,也许。你确定你希望其他人能够修改(或垃圾,如果他们不小心的话)你的架构吗?
标签:
oracle
database-schema
【解决方案1】:
这是个坏主意。现在继续阅读。
没有任何开箱即用的方法。高级用户(具有 CREATE ANY、ALTER ANY 等权限的帐户)可以执行此操作,但这是因为他们拥有任何架构的权限,而不仅仅是您的。
原因很简单,Oracle 的安全模型在schema.object 级别上运行,并且没有人提出过在schema 级别上引入特权的令人信服的商业理由。 Oracle 的许多新功能选择是由付费客户的需求或 Oracle 认为可能吸引新付费客户的内容驱动的。
所以它无法完成,因为基本上,几乎没有人想做你想做的事。没有人愿意这样做,因为这通常是个坏主意。控制我们的模式、对我们的数据和我们的业务逻辑进行治理的能力是一件非常强大的事情。授予对我们架构中所有对象的访问权限 - 尤其是创建或更改这些对象 - 是一件应该尽可能少且尽可能严格地完成的事情。
但是,如果您对这门课程下定了决心,这里有一个如何做的草图。
- 生成一个脚本,将架构中(所有?)对象的(全部?)权限授予指定用户,从数据字典视图 USER_OBJECTS 驱动。
- 创建一个动态执行 DDL 的包(例如 CREATE TABLE、ALTER TABLE 等)。将对该包的执行权限授予指定用户。
- 为该模式编写一个 AFTER CREATE 触发器,将创建的对象的权限授予指定用户。
您可以选择使用角色而不是指定用户,尤其是当您希望多人在您的架构中制造混乱时。
玩得开心!