如何将模式中所有表的所有权限授予 IBM DB2 中的用户?

nul*_*ull 9 db2 export permissions import

首先,我想将数据库从 IBM DB2 AIX 导出到 IBM DB2 窗口中。不幸的是,由于不同的操作系统问题,我无法使用 BACKUP 和 RESTORE 命令。所以我不得不求助于db2move命令。

我使用以下命令从远程 IBM DB2 AIX 中的dbemp数据库中导出了myschema模式和所有表:

db2move dbemp export -sn myschema
Run Code Online (Sandbox Code Playgroud)

当我运行该命令时,我以名为dbuser1 的用户身份登录。

它在当前文件夹中生成一堆文件。我将文件抓取到安装了 IBM DB2 LUW 的本地机器(Windows)中。

现在在我本地机器的 IBM DB2 中,我首先使用 IBM Data Studio(我也有一个本地dbemp数据库)删除了现有的模式myschema

然后我使用以下命令导入文件:

db2move dbemp import
Run Code Online (Sandbox Code Playgroud)

它成功地将架构和表导入本地dbemp数据库。

当我执行上述操作时,我以用户winuser1登录。

我的本地计算机(Windows)中也有一个名为dbuser1的本地用户。在 IBM Data Studio 中,我创建了一个使用dbuser1用户连接到本地dbemp的连接配置文件,我可以浏览myschema模式和表,但我无法浏览表的数据(我遇到了权限错误)。用户winuser1可以浏览表的数据,但出于开发目的,我必须使用用户dbuser1连接到数据库。

所以我发现我可以像这样向表上的用户授予权限:

GRANT ALL ON myschema.table1 TO USER dbuser1
Run Code Online (Sandbox Code Playgroud)

问题是我有 100 个表,我不想为每个表键入这些行。不幸的是,也没有像这样的通配符解决方案:

GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work
Run Code Online (Sandbox Code Playgroud)

所以问题是如何将模式中所有表的所有权限授予用户?或者有其他更好的解决方案吗?也许通过将所有权限从winuser1复制到dbuser1

Chr*_*ich 9

如果您想访问所有数据(即所有模式中的所有表),您需要授予数据访问权限。

db2 grant dataaccess on database to user winuser1
Run Code Online (Sandbox Code Playgroud)

如果您只希望 winuser1 仅访问您所引用的架构中的 100 个表,那么不幸的是,没有简单的方法,您需要对每个表授予 SELECT 权限。话虽如此,它可以通过脚本来完成。

您可以执行以下操作

db2 -tnx "select distinct 'GRANT ALL ON TABLE '||
    '\"'||rtrim(tabschema)||'\".\"'||rtrim(tabname)||'\" TO USER winuser1;'
    from syscat.tables
    where tabschema = 'myschema' "  >> grants.sql

db2 -tvf grants.sql
Run Code Online (Sandbox Code Playgroud)

这利用查询系统目录来动态生成脚本来许可事物。这是我们对不想授予数据访问权限的用户的很多许可方式。

这是DB2 权限的一个很好的页面