【问题标题】:granting SELECT rights to tables without the user needing to qualify the owner on select授予对表的 SELECT 权限,而用户无需在 select 上限定所有者
【发布时间】:2019-09-16 10:42:29
【问题描述】:

我有许多表,比如MetricsResults,其中一些表位于一个包含大量机密信息的大型数据库中。我设置了安全性,允许特定应用程序查看这些表中的数据。我不需要修改它们。总共涉及大约 200-300 个表,其中包含机密信息。

与所有其他表一样,Metrics 是由数据库所有者/管理员创建的,比如dbo。如果我以dbo 连接,那么我可以简单地这样做:

select * from Metrics.

不幸的是,以数据库所有者身份连接也意味着我的连接用户可以看到所有表,而不仅仅是Metrics,还可以更新Metrics

我想创建一个新用户 lowprivilege 并拥有 dba GRANT SELECT METRICS TO lowprivilege

不幸的是,这意味着当我以低权限连接时,我需要限定表所有者:

select * from dbo.Metrics.

在 Oracle 下,一个 dba 怎样才能将 SELECT 授权给表,而授权的接收者不必限定表所有者?并且低权限用户除了在所选表中的选择之外应该没有任何权限。

备选方案 1 - 视图:

create view lowprivilege.Metrics as select * from dbo.Metrics

这是可能的,但我确实需要保留 * 通配符,因为我不知道 Metrics 中的所有列。另一个问题是,我希望每当 dbo.Metrics 重建时我的视图就会中断(这不应该经常发生)。

备选方案 2 - 创建同义词:

create or replace lowprivilege.Metrics FOR dbo.Metrics

dba 可以执行该操作并仅使用它授予 SELECT 吗?假设至少有一个 Oracle 12 版本。

备选方案 3 - GRANT SELECT 并切换架构:

GRANT SELECT METRICS TO lowprivilege

但是,每当lowprivilege 连接时,它都会使用alter session set current_schema=dbo。请注意,这需要在 SQLAlchemy /cx-Oracle 下实现。

另外,如果 dba 可以通过 DROP USER lowprivilege CASCADE 关闭所有内容,那就太好了。

实现这一目标的最佳方法是什么?

【问题讨论】:

    标签: oracle sqlalchemy grant


    【解决方案1】:

    备选方案 #2 - 创建同义词。这正是同义词的用途。

    grant read on dbo.Metrics to lowprivilege;
    create or replace synonym lowprivilege.Metrics FOR dbo.Metrics;
    

    注意使用GRANT READ 而不是GRANT SELECT。具有SELECT 权限的用户仍然可以锁定表。 READ 特权可以防止这种情况发生。

    【讨论】:

    • Txs。我以为会是这种情况,但被他们的模式和用户上下文解释弄糊涂了。即当文档谈到创建同义词权限时,我在想“我希望 dba 将现成的只读同义词存放在我的低权限人身上”,而不是向我的低权限用户授予任何其他权限。
    【解决方案2】:

    如果应用程序在连接时可以发出这样的命令,则可以避免使用同义词:

    alter session set current_schema = HR;
    

    现在 SQL 解析器将首先检查 HR 模式中是否存在不合格的对象名称。

    您可以创建一个角色并为其授予权限,然后将该角色授予一个或多个应用程序用户帐户,而不是直接向LOWPRIVILEGE 用户授予权限。当有多个用户时,这会简化事情,并提供一定程度的自文档,因为角色可以有逻辑名称。

    grant read on metrics to readonly;
    
    grant readonly to some_app_account;
    

    【讨论】:

      猜你喜欢
      • 2011-05-07
      • 1970-01-01
      • 2020-11-29
      • 2020-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多