【问题标题】:Informix, grant select on all tablesInformix,在所有表上授予选择
【发布时间】:2009-08-05 10:08:37
【问题描述】:

使用 Informix,我可以在类似的桌子上 grant select

grant select on 'dba'.mytable to someuser as dba;

如何对数据库中的所有表执行此操作?

【问题讨论】:

    标签: permissions informix sql-grant


    【解决方案1】:

    没有一种简单的方法可以做到这一点(在 SQL 标准或 Informix 中),但通常没有必要,因为默认情况下通常会授予该特定权限。但是,我想实际上您也想做更一般的操作,并想知道有哪些选项。

    根据您的目标以及您的系统设置方式,您可以通过多种方式实现目标。

    蛮力 - 直接回答问题

     SELECT 'GRANT SELECT ON "' || TRIM(owner) || '".' || TRIM(tabname) ||
            ' TO someuser AS dba;'
         FROM "informix".systables
         WHERE tabid >= 100;
    

    从中获取输出并将其输入到程序中。我使用SQLCMD 来完成这项工作,尤其是因为它不会产生不需要的输出:

    sqlcmd -d dbname -e "
     SELECT 'GRANT SELECT ON \"' || TRIM(owner) || '\".' || TRIM(tabname) ||
            ' TO someuser AS dba;'
         FROM "informix".systables
         WHERE tabid >= 100;" |
    sqlcmd -d dbname -f -
    

    需要额外的反斜杠来绕过 shell。 '-f -' 选项不是绝对必要的,但明确指出第二个 SQLCMD 将从标准输入读取。如果您使用 DB-Access,您必须担心它生成的冗长 - 这就是我首先编写 SQLCMD 的原因。

    很明显,这个解决方案可以很容易地被脚本化和通用化——你只需要小心使用引号。

    使用角色

    另一种选择是创建一个具有您想要的所有权限的角色,然后根据需要将该角色授予用户。这样做的缺点是您的软件需要设置角色,以便连接的人拥有该特权。一种可能性是将仅选择角色设置为每个用户的默认角色。

    使用 Server Studio Java 版

    SSJE 具有权限管理工具来简化此任务。

    也使用 Open Admin

    OAT 拥有帮助进行权限管理的工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-16
      • 2016-02-07
      • 2022-08-14
      • 1970-01-01
      • 2018-03-19
      • 2015-11-25
      • 1970-01-01
      • 2019-12-18
      相关资源
      最近更新 更多