Come Db2 carica i plug-in di sicurezza

In modo che il sistema di database Db2 disponga delle informazioni necessarie per richiamare le funzioni del plug-in di sicurezza, un plug-in di sicurezza deve avere una funzione di inizializzazione impostata correttamente.

Ogni libreria di plug-in deve contenere una funzione di inizializzazione con un nome specifico determinato dal tipo di plug-in:
  • Plug-in di autenticazione lato server: db2secServerAuthPluginInit()
  • Plug-in di autenticazione lato client db2secClientAuthPluginInit()
  • Plug-in gruppo: db2secGroupPluginInit()
Questa funzione è nota come funzione di inizializzazione del plug - in. La funzione di inizializzazione del plug-in inizializza il plug-in specificato e fornisce a Db2 le informazioni richieste per richiamare le funzioni del plugin. La funzione di inizializzazione del plug-in accetta i parametri seguenti:
  • Il numero di versione più elevato della struttura del puntatore di funzione che l'istanza Db2 che richiama il plug-in può supportare
  • Un puntatore a una struttura contenente puntatori a tutte le API che richiedono l'implementazione
  • Un puntatore a una funzione che aggiunge messaggi di log ai file di log db2diag
  • Un puntatore a una stringa di messaggio di errore
  • La lunghezza del messaggio di errore
La seguente è una firma di funzione per la funzione di inizializzazione di un plugin di richiamo del gruppo:
   SQL_API_RC SQL_API_FN db2secGroupPluginInit(
     db2int32 version,
     void *group_fns,
     db2secLogMessage *logMessage_fn,
     char **errormsg,
     db2int32  *errormsglen);
Nota: se la libreria di plug-in è compilata come C + +, tutte le funzioni devono essere dichiarate con: extern "C". Db2 si basa sul programma di caricamento dinamico del sistema operativo sottostante per gestire i costruttori e i distruttori C++ utilizzati all'interno di una libreria di plug-in scritta dall'utente C++.
La funzione di inizializzazione è l'unica funzione nella libreria di plug-in che utilizza un nome funzione prescritto. Alle altre funzioni del plug-in si fa riferimento tramite puntatori di funzione restituiti dalla funzione di inizializzazione. I plug-in del server vengono caricati all'avvio del server Db2 . I plug-in client vengono caricati quando richiesto sul client. Immediatamente dopo il caricamento di una libreria di plug-in da parte di Db2 , risolverà l'ubicazione di questa funzione di inizializzazione e la richiamerà. L'attività specifica di questa funzione è la seguente:
  • Assegnare il puntatore delle funzioni ad un puntatore ad una struttura di funzioni appropriata
  • Specificare i puntatori alle altre funzioni nella libreria
  • Specificare il numero di versione della struttura del puntatore della funzione che si sta restituendo

Db2 può potenzialmente richiamare la funzione di inizializzazione del plug - in più di una volta. Questa situazione può verificarsi quando un'applicazione carica dinamicamente la libreria client Db2 , la scarica e la ricarica nuovamente, quindi esegue le funzioni di autenticazione da un plugin prima e dopo il ricaricamento. In questa situazione, la libreria di plug-in potrebbe non essere scaricata e quindi ricaricata; tuttavia, questo comportamento varia a seconda del sistema operativo.

Un altro esempio di Db2 che emette più chiamate a una funzione di inizializzazione del plug-in si verifica durante l'esecuzione di procedure memorizzate o di chiamate di sistema federato, in cui il server di database può agire come un client. Se i plug-in client e server sul server di database si trovano nello stesso file, Db2 potrebbe richiamare due volte la funzione di inizializzazione del plug - in.

Se il plug-in rileva che db2secGroupPluginInit viene richiamato più di una volta, deve gestire questo evento come se fosse stato indicato di terminare e reinizializzare la libreria di plug - in. Per questo motivo, la funzione di inizializzazione del plug-in deve eseguire tutte le attività di ripulitura che una chiamata a db2secPluginTerm eseguirebbe prima di restituire nuovamente la serie di puntatori di funzione.

Su un server Db2 in esecuzione su un sistema operativo basato su UNIX o Linux, Db2 può potenzialmente caricare e inizializzare le librerie di plug-in più di una volta in processi differenti.