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