作为一名开发人员,我需要能够从生产中访问数据库/数据库对象的设计,这样我才能确保我正在使用我正在为其开发更改的对象的最新和最好的版本(有助于避免不可预见的问题部署时)。
同样作为开发人员,我不应该有权修改、执行、更新、删除等这些对象——这是生产部署团队的工作。
作为一名 DBA,我如何提供对数据库设计的访问权限,以便开发人员可以验证他们正在进行的更改,而无需授予他们对数据库对象的全权访问权限?
作为一个具体的例子,我们的 DBA 已经充分锁定了生产环境,因此,在 TOAD 中,我看不到包的 PL/SQL 主体,看不到提供对象访问权限的所有授权,等等。正在使用的用户帐户仅具有使用某些对象的有限访问权限,但无法查看开发人员开发更改所需的扩展详细信息。
我很想进行一些设置,以便我们拥有字典视图访问权限,允许我们查看所有授权、视图脚本、PL/SQL 包主体、表定义等,而无需给予我们比我们应该拥有的更多的访问权限生产(即,我们不应该改变任何这些东西)
是否有一个角色可以提供我们需要的访问权限、特权或一系列特权?如果没有,获取此类信息的另一种好方法是什么?
SELECT ANY DICTIONARY 权限(或者,在早期版本中是 SELECT_CATALOG_ROLE 角色)赋予用户从任何数据字典表中进行选择的权限。
SELECT ANY DICTIONARY 权限将赋予开发人员权限来编写他们想要针对 DBA_SOURCE 查看任何对象的源的任何查询,DBA_VIEWS 查看视图定义等。但不能保证特定前端实际上会利用这些权限正确。太多的 GUI 只是简单地从 ALL_* 数据字典表中选择来显示用户具有对象权限的对象,而不是识别用户有权从 DBA_* 数据字典表中进行选择。就个人而言,当我想查看生产数据库中的对象源时,我非常乐意查询 DBA_SOURCE 视图(或使用 DBMS_METADATA 包),但是很多人在没有 GUI 模式浏览器的情况下会感到不安。
顺便说一句.. 我希望我的 sql*plus 脚本为查询选择“最佳”视图。
即 dba_xxx(如果可用)或 all_xxx(如果不可用)
所以我在我的脚本顶部做了这样的事情(或者如果你愿意,可以在下标中)
然后我按如下方式使用它。
也许这可能对某人有用..