AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 43795
Accepted
null
null
Asked: 2013-06-05 07:45:05 +0800 CST2013-06-05 07:45:05 +0800 CST 2013-06-05 07:45:05 +0800 CST

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

  • 772

首先,我想将数据库从 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?

db2 import
  • 3 3 个回答
  • 98002 Views

3 个回答

  • Voted
  1. Best Answer
    Chris Aldrich
    2013-06-05T08:49:46+08:002013-06-05T08:49:46+08:00

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

    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 权威的一个很好的页面。

    • 9
  2. Florin Dragan
    2017-10-19T06:42:09+08:002017-10-19T06:42:09+08:00

    您也可以尝试(使用 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
    
    • 1
  3. John Arick
    2015-08-25T06:21:49+08:002015-08-25T06:21:49+08:00

    如果您使用像 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

相关问题

  • 从 DB2 迁移到 MySQL

  • 解释计划中的 TBSCAN GERROW 是什么意思?

  • 在 DB2 SQL 中模拟类似 REGEXP 的行为

  • z/OS 上 DB2 v9 上的 BLOB

  • 解释计划中的 HSJOIN 是什么意思?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    授予用户对所有表的访问权限

    • 5 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve