6. 11. 2014

Oracle Wallety

Podobnú funkciu ako ssh kľúče pri vzdialenom prihlasovaní na server majú v prípade oracle databázy wallety. Prihlásenie do databázy potom funguje bez loginu a hesla, čo umožňuje automatizáciu procesov (monitoring, reporty, rôzne pravidelne spúšťané údržbové skripty..) bez neustálej úpravy skriptov a obáv z použitia tzv. plaintext hesiel.



Wallet súbory


Pre využívanie walletov je potrebné nainštalovať oracle SQL klienta (nie instant verziu). Wallet je súbor na filesystéme, obsahujúci zakryptované loginy a heslá v kombinácií s názvom walletu (napr názov db).
Premenná prostredia $TNS_ADMIN ukazuje na adresár v ktorom sa nachádza aktuálne používaný súbor sqlnet.ora a súbor tnsnames.ora s aliasmi na jednotlivé databázové konekt reťazce (IP,port,reálny názov DB).
V súbore sqlnet.ora by mala byť v prípade používania walletov uvedená cesta, kde tento súbor oracle ukladá a číta.
WALLET_LOCATION =
(
   SOURCE =
     (METHOD = FILE)
     (METHOD_DATA =
         (DIRECTORY = /home/oracle/wallet)
      )
)
SQLNET.WALLET_OVERRIDE = TRUE
Pozor, súbor je veľmi citlivý na formátovanie a začiatok riadku musí obsahovať medzeru, pokiaľ pokračuje predchádzajúci príkaz, inak očakáva príkaz nový.

V adresári uvedenom v DIRECTORY v súbore sqlnet.ora sa nachádza súbor "cwallet.sso". Tento súbor obsahuje kombinácie login - heslo - názov walletu. V jednom súbore možno ukladať heslá z viacerých klientov rôznych oracle verzií. Funguje spätná kompatibilita, teda oracle 11 dokáže použiť wallet uložený pod oracle 10 (do správneho súboru). Opačne to však nefunguje, hoci pri vypísaní zoznamu walletov tieto vidieť.


Pripájanie do DB cez wallet


Do databázy sa cez wallet pripája lomítkom bez zadania loginu a hesla, so zadaním názvu walletu:
sqlplus /@nazov_walletu

Názov walletu v tomto prípade znamená ľavú stranu v tnsnames. Týmto je možné vygenerovať viaceré wallety pod rôznymi loginmi do rovnakej databázy. V tnsnames potom bude viac rovnakých riadkov s iným aliasom (ľavá strana riadku).
wallet1=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ORA11)))
wallet2=(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=127.0.0.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = ORA11)))

sqlplus /@wallet1 nás pripojí do iného loginu rovnakej databázy ako
sqlplus /@wallet2

Výpis existujúcich walletov sa vykoná príkazom (spusteným v adresári kde sa nachádza cwallet.sso):
mkstore -wrl . -listCredential
Príkaz si vypýta heslo do wallet súboru a potom zobrazí zoznam s názvami walletov.


Vytváranie walletov


Ak ešte neexistuje wallet súbor (cwallet.sso), založíme ho príkazom:
mkstore -wrl . -create
Pri zakladaní určíme heslo do walletového súboru, je požadované pri výpise alebo úprave walletov.

Ak potrebujeme wallet pridať použijeme príkaz:
mkstore -wrl . -createCredential nazov_walletu login heslo

Ak potrebujeme zmazať, použijeme:
mkstore -wrl . -deleteCredential nazov_walletu

Ak potrebujeme upraviť existujúci (zmeniť login alebo heslo), použijeme:
mkstore -wrl . -modifyCredential nazov_walletu login heslo

Existuje tzv default wallet:
mkstore -wrl . -createEntry oracle.security.client.default_username login;
mkstore -wrl . -createEntry oracle.security.client.default_password heslo;

Potom, pokiaľ sa názov walletu v súbore nenájde, použije sa tento štandardný login a heslo pre prihlásenie.


Čítanie hesiel


Pre vyčítanie uloženého hesla je trochu zložitejší postup. Najskôr si vypíšeme zoznam uložených prihlásení:
$> mkstore -wrl ./ -listCredential
1: RC_DB1_DBKAT RC_DB1
2: RC_ADMIN_DBKAT RC_ADMIN

Chceme napríklad heslo pre RC_ADMIN, teda druhý záznam. Vypíšeme si názvy uložených polí:
$> mkstore -wrl ./ -list
oracle.security.client.connect_string1
oracle.security.client.connect_string2
oracle.security.client.password1
oracle.security.client.password2
oracle.security.client.username1
oracle.security.client.username2

Vypíšeme si konkrétne pole o ktoré máme záujem, v tomto prípade končiace na password2 (druhý záznam).
$> mkstore -wrl ./ -viewEntry oracle.security.client.password2
oracle.security.client.password2 = rc_admin123

Pozn. miesto príkazu mkstore možno použiť aj utilitu orapki

Žiadne komentáre:

Zverejnenie komentára