1

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

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

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

4

1 回答 1

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 -

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

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

使用角色

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

使用 Server Studio Java 版

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

也使用 Open Admin

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

于 2009-08-05T15:18:53.167 回答