¿Cómo otorgar todos los privilegios en todas las tablas de un esquema a un usuario en IBM DB2?

9

En primer lugar, quiero exportar la base de datos de IBM DB2 AIX a las ventanas de IBM DB2. Desafortunadamente, no puedo usar el comando BACKUP y RESTORE debido a un problema de sistema operativo diferente. Entonces tengo que recurrir al comando db2move .

Yo había exportado miesquema esquema y todas las tablas de dbemp base de datos remota en IBM DB2 AIX utilizando este comando:

db2move dbemp export -sn myschema

Cuando ejecuté ese comando, inicié sesión como usuario llamado dbuser1 .

Genera un montón de archivos en la carpeta actual. Tomo los archivos en mi máquina local (Windows) que tiene instalado IBM DB2 LUW.

Ahora en el IBM DB2 de mi máquina local, primero eliminé el esquema existente myschema usando IBM Data Studio (también tenía una base de datos dbemp local ).

Luego importé los archivos usando este comando:

db2move dbemp import

Importa con éxito el esquema y las tablas en la base de datos dbemp local .

Cuando hice las acciones anteriores, inicié sesión como usuario winuser1 .

También tengo un usuario local llamado dbuser1 en mi máquina local (windows). En IBM Data Studio, creé un perfil de conexión que se conecta a dbemp local utilizando el usuario dbuser1 y puedo examinar el esquema de myschema y las tablas, pero no puedo examinar los datos de la tabla (recibí un error de privilegio). El usuario winuser1 puede examinar los datos de la tabla, pero para fines de desarrollo, tengo que conectarme a la base de datos usando el usuario dbuser1 .

Entonces descubrí que puedo otorgar privilegios a un usuario en la tabla de esta manera:

GRANT ALL ON myschema.table1 TO USER dbuser1

El problema es que tengo 100 tablas, no quiero escribir esas líneas para cada tabla. Y desafortunadamente, tampoco hay una solución comodín como esta:

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

Entonces, la pregunta es ¿cómo otorgar todos los privilegios en todas las tablas de un esquema a un usuario? ¿O hay una solución alternativa mejor? tal vez copiando todos los privilegios de winuser1 a dbuser1 ?

nulo
fuente

Respuestas:

8

Si desea acceder a todos los datos (es decir, todas las tablas en todos los esquemas), deberá otorgar acceso a los datos.

db2 grant dataaccess on database to user winuser1

Si solo desea que winuser1 acceda solo a las 100 tablas del esquema al que se refiere, desafortunadamente, no hay una manera fácil, necesitaría otorgar SELECT en cada tabla. Dicho esto, se puede lograr a través de secuencias de comandos.

Podrías hacer lo siguiente

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

Esto hace uso de consultar los catálogos del sistema para generar dinámicamente un script para permitir cosas. Así es como permitimos a los usuarios a los que no queremos dar acceso a los datos.

Aquí hay una buena página de las autoridades para DB2 .

Chris Aldrich
fuente
gracias, db2 grant dataaccessfunciona. No me importa otorgarlos a todos los esquemas ya que estoy en un entorno de desarrollo.
nulo
0

Si está utilizando un editor de SQL como Toad, este script también puede ayudar. Puede copiar / pegar los resultados en una nueva ventana.

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';
John Arick
fuente
0

También puedes probar (usando un 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
Florin Dragan
fuente