使用Informix,我可以grant select
在像<; p>这样的表上
grant select on 'dba'.mytable to someuser as dba;
如何在数据库中的所有表上执行此操作?
答案 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角色设置为每个用户的默认角色。
SSJE具有权限管理工具来简化此任务。
OAT提供了有助于权限管理的工具。