Come concedere tutti i privilegi su tutte le tabelle in uno schema a un utente in IBM DB2?


9

In primo luogo, desidero esportare il database da IBM DB2 AIX in finestre IBM DB2. Sfortunatamente, non posso usare il comando BACKUP e RESTORE a causa di un problema con il sistema operativo diverso. Quindi devo ricorrere al comando db2move .

Avevo esportato lo schema myschema e tutte le tabelle dal database dbemp in remoto IBM DB2 AIX usando questo comando:

db2move dbemp export -sn myschema

Quando eseguivo quel comando, eseguivo l' accesso come utente chiamato dbuser1 .

Genera un mucchio di file nella cartella corrente. Prendo i file nel mio computer locale (Windows) su cui è installato IBM DB2 LUW.

Ora nell'IBM DB2 della mia macchina locale, ho prima lasciato cadere il myschema dello schema esistente utilizzando IBM Data Studio (avevo anche un database dbemp locale ).

Quindi ho importato i file usando questo comando:

db2move dbemp import

Importa correttamente lo schema e le tabelle nel database dbemp locale .

Quando ho fatto le azioni sopra, ero il login come utente winuser1 .

Ho anche un utente locale di nome dbuser1 nella mia macchina locale (windows). In IBM Data Studio, ho creato un profilo di connessione che si collega a dbemp locale utilizzando l' utente dbuser1 e posso sfogliare lo schema myschema e le tabelle, ma non riesco a sfogliare i dati della tabella (ho ricevuto un errore di privilegio). L'utente winuser1 può sfogliare i dati della tabella, ma a scopo di sviluppo, devo collegarmi al database usando l'utente dbuser1 .

Quindi ho scoperto che posso concedere il privilegio a un utente sul tavolo in questo modo:

GRANT ALL ON myschema.table1 TO USER dbuser1

Il problema è che ho 100 tabelle, non voglio digitare quelle righe per ogni tabella. E sfortunatamente, non esiste una soluzione jolly come questa:

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

Quindi la domanda è: come concedere tutti i privilegi su tutte le tabelle di uno schema a un utente? O esiste una soluzione alternativa migliore? forse copiando tutti i privilegi da winuser1 a dbuser1 ?

Risposte:


8

Se si desidera accedere a tutti i dati (ovvero a tutte le tabelle in tutti gli schemi), è necessario concedere l'accesso ai dati.

db2 grant dataaccess on database to user winuser1

Se si desidera solo che winuser1 acceda solo alle 100 tabelle nello schema a cui si fa riferimento, sfortunatamente, non esiste un modo semplice, è necessario concedere SELECT su ciascuna tabella. Detto questo, può essere realizzato attraverso lo scripting.

Potresti fare quanto segue

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

Questo utilizza query sui cataloghi di sistema per generare dinamicamente uno script per autorizzare le cose. Questo è il modo in cui autorizziamo gli utenti a cui non vogliamo dare accesso ai dati.

Ecco una buona pagina delle autorità per DB2 .


grazie, db2 grant dataaccessfunziona. Non mi dispiace concederli a tutti gli schemi poiché sono in un ambiente di sviluppo.
null,

0

Se stai usando un editor SQL come Toad, anche questo script può essere d'aiuto. È possibile copiare / incollare i risultati in una nuova finestra.

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

Puoi anche provare (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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.