Informix,在所有表上授予select

时间:2009-08-05 10:08:37

标签: permissions informix grant

使用Informix,我可以grant select在像<; p>这样的表上

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

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

1 个答案:

答案 0 :(得分:3)

没有一种简单的方法(在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的原因。

显然,这个解决方案可以很容易地编写脚本并进行通用化 - 你只需要小心使用引号。

使用角色

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

使用Server Studio Java Edition

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

使用Open Admin

OAT提供了有助于权限管理的工具。