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


9

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

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

db2move dbemp export -sn myschema

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

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

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

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

db2move dbemp import

它将模式和表成功导入到本地dbemp数据库中。

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

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

因此我发现我可以像这样向表上的用户授予特权:

GRANT ALL ON myschema.table1 TO USER dbuser1

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

GRANT ALL ON myschema.* TO USER dbuser1 -- this doesn't work

因此,问题是如何将模式中所有表的所有特权授予用户?还是有其他更好的解决方案?也许通过将所有特权从winuser1复制到dbuser1

Answers:


8

如果要访问所有数据(即所有架构中的所有表),则需要授予数据访问权限。

db2 grant dataaccess on database to user winuser1

如果仅希望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

这利用了查询系统目录来动态生成脚本来授予权限。这是我们对不需要向其授予数据访问权限的用户的许可方式。

这是DB2授权好页面


谢谢,db2 grant dataaccess工作。在开发环境中,我不介意将它们授予所有架构。
null

0

如果使用的是Toad之类的SQL编辑器,则此脚本也可能会有所帮助。您可以将结果复制/粘贴到新窗口中。

SELECT DISTINCT
      'GRANT Select ON TABLE '
   || rtrim (tabschema)
   || '.'
   || rtrim (tabname)
   || ' TO USER USERNAME;'
  FROM syscat.tables
 WHERE tabschema = 'Schema'
 UNION
 SELECT    'GRANT Select ON VIEW '
   || rtrim (VIEWSCHEMA)
   || '.'
   || rtrim (viewname)
   || ' TO USER USERNAME;'
 FROM SYSCAT.VIEWS
 WHERE VIEWSCHEMA = 'Schema';

0

您也可以尝试(使用SQL编辑器):

BEGIN
 FOR v AS cur CURSOR FOR 
    select 
        'GRANT SELECT, INSERT, UPDATE, DELETE ON ' || trim(tabschema) || '.' || trim(tabname) || ' TO YourUser' stmt 
    from 
        syscat.tables 
    where 
        tabschema = 'YourSchema' 
  DO 
    EXECUTE IMMEDIATE v.stmt;
  END FOR;
END
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.