it-swarm.it

Come concedo tutti i privilegi a db2admin locale con DB2 9.7 su Windows?

Ho come stazione di sviluppo un laptop con sistema operativo Windows XP Professional Edition, Service Pack 3.

Ho scaricato e installato il fix pack 4 di IBM DB2 UDB 9.7, dell'edizione Express-C.

Ho un account Windows locale chiamato db2admin che sto usando come amministratore del database locale per la mia installazione locale di DB2 (solo per sviluppatori).

Posso eseguire quanto segue senza problemi durante l'esecuzione della finestra di comando:

db2 attach to db2 user db2admin using xxxxxxxxxx

Ciò mi consente di collegarmi alla mia istanza denominata DB2.

Posso eseguire i miei comandi di creazione del database.

Quindi tento di connettermi al database per garantire tutti i privilegi per il mio account db2admin in DB2.

db2 CONNECT TO MYDB;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

Tuttavia, quando lo eseguo, DB2 mi dice che il mio account utente di Windows (synprgcma) non ha l'autorizzazione per concedere l'autorizzazione all'utente db2admin.

Quindi, se cambio il secondo script nel modo seguente:

db2 CONNECT TO MYDB USER db2admin USING xxxxxxxx;
SET SCHEMA DB2ADMIN;
db2 GRANT DBADM,CREATETAB,BINDADD,CONNECT,CREATE_NOT_FENCED_ROUTINE,IMPLICIT_SCHEMA,LOAD,CREATE_EXTERNAL_ROUTINE,QUIESCE_CONNECT,SECADM ON DATABASE TO USER DB2ADMIN;
CONNECT RESET;

Quindi DB2 mi dice che db2admin non può revocare o concedere l'autorizzazione a se stesso (in realtà mi dice che un id non può revocare o concedere l'autorizzazione a se stesso).

Quindi sono perplesso. Non ho avuto questo problema con la mia precedente installazione di DB2 (9.5, e non ricordo a quale fix pack mi trovassi).

Come concedo le autorità necessarie all'account amministratore locale? Credo di averne bisogno per eseguire un comando bind che devo eseguire in seguito:

db2 CONNECT TO MYDB;
db2 bind @db2cli.lst blocking all grant public sqlerror continue CLIPKG 20;
db2 CONNECT RESET;

Qualsiasi aiuto sarebbe apprezzato.

Modifica: Ho trovato alcuni dei seguenti link correlati a questo. Ancora non sono ancora sicuro di come farlo funzionare, ma almeno ho trovato della documentazione.

10
Chris Aldrich

Sulla base degli ultimi link sopra riportati nella mia modifica alla mia domanda ho trovato la mia risposta. Non riesco a modificare l'account di sistema poiché i nostri accessi al nostro sistema provengono da un LDAP e non posso controllare i gruppi e cosa no.

Quindi ho fatto quanto segue:

  1. Ha aperto la GUI DB2 (era più semplice farlo in questo modo).
  2. Collegato al database desiderato come db2admin.
  3. Aggiunto il mio accesso al database come utente.
  4. Concedi tutte le autorità a quell'id (il mio id).
  5. Disconnect.
  6. Connettiti al database desiderato come mio ID.
  7. Concedere tutte le autorità a db2admin.
  8. Disconnect.

Ecco! L'accesso db2admin ora come tutte le autorità.

EDIT: Ho intenzione di lasciare quanto sopra perché mi ha aiutato a imparare come fare alcune cose interessanti in DB2. Tuttavia, ho appreso che DBADM/SECADM con le autorizzazioni DATAACCESS e ACCESSCTRL concesse al proprietario dell'istanza (nel mio caso l'id db2admin) hanno tutte le autorizzazioni necessarie per interagire con il database. Avrei potuto semplicemente commentare quelle righe di concessione sopra nella sceneggiatura. Questi sono stati lasciati da uno script che ha funzionato con una versione precedente di DB2. Ho anche trovato se devo avere il proprietario dell'istanza DBADM dopo aver effettuato un ripristino al database A dal database B, è più semplice impostare la variabile di registro DB2_RESTORE_GRANT_ADMIN_AUTHORITY su YES (disponibile nel Fix Pack 2 e versioni successive). Quindi non devo provare a concedere il proprietario dell'istanza DBADM. Viene automaticamente concesso a qualsiasi database ripristinato nell'istanza. Se non sei nel Fix Pack 5, devi far rimbalzare l'istanza affinché questo abbia effetto.

5
Chris Aldrich