AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / dba / Perguntas / 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

Como conceder todos os privilégios em todas as tabelas em um esquema a um usuário no IBM DB2?

  • 772

Em primeiro lugar, quero exportar o banco de dados do IBM DB2 AIX para as janelas do IBM DB2. Infelizmente, não posso usar o comando BACKUP e RESTORE devido a um problema de sistema operacional diferente. Então eu tenho que recorrer ao comando db2move .

Eu exportei o esquema myschema e todas as tabelas do banco de dados dbemp no remoto IBM DB2 AIX usando este comando:

db2move dbemp export -sn myschema

Quando eu executo esse comando, eu estava logado como usuário chamado dbuser1 .

Ele gera um monte de arquivos na pasta atual. Eu pego os arquivos em minha máquina local (windows) que tem o IBM DB2 LUW instalado.

Agora, no IBM DB2 da minha máquina local, descartei primeiro o esquema myschema existente usando o IBM Data Studio (também tinha um banco de dados dbemp local ).

Então eu importei os arquivos usando este comando:

db2move dbemp import

Ele importou com sucesso o esquema e as tabelas para o banco de dados dbemp local .

Quando eu fiz as ações acima, eu estava logado como usuário winuser1 .

Eu tenho um usuário local chamado dbuser1 também na minha máquina local (windows). No IBM Data Studio, criei um perfil de conexão que se conecta ao dbemp local usando o usuário dbuser1 e posso navegar pelo esquema myschema e pelas tabelas, mas não consigo navegar pelos dados da tabela (recebi erro de privilégio). O usuário winuser1 pode navegar pelos dados da tabela, mas para fins de desenvolvimento, tenho que me conectar ao banco de dados usando o usuário dbuser1 .

Então descobri que posso conceder privilégio a um usuário na tabela assim:

GRANT ALL ON myschema.table1 TO USER dbuser1

O problema é que tenho 100 tabelas, não quero digitar essas linhas para cada tabela. E, infelizmente, também não existe uma solução curinga como esta:

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

Então a questão é como conceder todos os privilégios em todas as tabelas em um esquema para um usuário? Ou existe uma solução alternativa melhor? talvez copiando todos os privilégios de winuser1 para dbuser1 ?

db2 import
  • 3 3 respostas
  • 98002 Views

3 respostas

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

    Se você quiser acessar todos os dados (ou seja, todas as tabelas em todos os esquemas), precisará conceder acesso a dados.

    db2 grant dataaccess on database to user winuser1
    

    Se você quiser que o winuser1 acesse apenas as 100 tabelas no esquema ao qual você está se referindo, infelizmente, não há uma maneira fácil, você precisaria conceder SELECT em cada tabela. Dito isto, pode ser realizado através de scripts.

    Você poderia fazer o seguinte

    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
    

    Isso faz uso de consultar os catálogos do sistema para gerar dinamicamente um script para permitir coisas. É assim que damos permissão para usuários aos quais não queremos dar acesso a dados.

    Aqui está uma boa página das autoridades para DB2 .

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

    Você também pode tentar (usando um editor 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

    Se você estiver usando um editor SQL como o Toad, este script também pode ajudar. Você pode copiar/colar os resultados em uma nova janela.

    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

relate perguntas

  • Migração de DB2 para MySQL

  • O que significa TBSCAN GENROW no Plano Explicativo?

  • Emule o comportamento do REGEXP no DB2 SQL

  • BLOB no DB2 v9 no z/OS

  • O que significa HSJOIN em um plano de explicação?

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Como fazer a saída do sqlplus aparecer em uma linha?

    • 3 respostas
  • Marko Smith

    Selecione qual tem data máxima ou data mais recente

    • 3 respostas
  • Marko Smith

    Como faço para listar todos os esquemas no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Conceder acesso a todas as tabelas para um usuário

    • 5 respostas
  • Marko Smith

    Listar todas as colunas de uma tabela especificada

    • 5 respostas
  • Marko Smith

    Como usar o sqlplus para se conectar a um banco de dados Oracle localizado em outro host sem modificar meu próprio tnsnames.ora

    • 4 respostas
  • Marko Smith

    Como você mysqldump tabela (s) específica (s)?

    • 4 respostas
  • Marko Smith

    Listar os privilégios do banco de dados usando o psql

    • 10 respostas
  • Marko Smith

    Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL?

    • 4 respostas
  • Marko Smith

    Como faço para listar todos os bancos de dados e tabelas usando o psql?

    • 7 respostas
  • Martin Hope
    Stéphane Como faço para listar todos os esquemas no PostgreSQL? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh Por que o log de transações continua crescendo ou fica sem espaço? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland Listar todas as colunas de uma tabela especificada 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney O MySQL pode realizar consultas razoavelmente em bilhões de linhas? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx Como posso monitorar o andamento de uma importação de um arquivo .sql grande? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison Como você mysqldump tabela (s) específica (s)? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta Listar os privilégios do banco de dados usando o psql 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas Como posso cronometrar consultas SQL usando psql? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas Como inserir valores em uma tabela de uma consulta de seleção no PostgreSQL? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas Como faço para listar todos os bancos de dados e tabelas usando o psql? 2011-02-18 00:45:49 +0800 CST

Hot tag

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

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve