【发布时间】:2009-08-05 10:08:37
【问题描述】:
使用 Informix,我可以在类似的桌子上 grant select;
grant select on 'dba'.mytable to someuser as dba;
如何对数据库中的所有表执行此操作?
【问题讨论】:
标签: permissions informix sql-grant
使用 Informix,我可以在类似的桌子上 grant select;
grant select on 'dba'.mytable to someuser as dba;
如何对数据库中的所有表执行此操作?
【问题讨论】:
标签: permissions informix sql-grant
没有一种简单的方法可以做到这一点(在 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 的原因。
很明显,这个解决方案可以很容易地被脚本化和通用化——你只需要小心使用引号。
另一种选择是创建一个具有您想要的所有权限的角色,然后根据需要将该角色授予用户。这样做的缺点是您的软件需要设置角色,以便连接的人拥有该特权。一种可能性是将仅选择角色设置为每个用户的默认角色。
SSJE 具有权限管理工具来简化此任务。
OAT 拥有帮助进行权限管理的工具。
【讨论】: