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 ?
Se você quiser acessar todos os dados (ou seja, todas as tabelas em todos os esquemas), precisará conceder acesso a dados.
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
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 .
Você também pode tentar (usando um editor SQL):
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.