SecurityWorld | 12.05.10
S databází Oracle 11g přišli vývojáři z Oracle s novým způsobem, jak řešit potenciální bezpečnostní problémy při práci s některými balíky. Základem řešení je Access control list.
Pokud pracujete s databázovým serverem Oracle, pravěpodobně znáte anebo jste aspoň slyšeli o balících UTL_TCP, UTL_HTTP a UTL_SMTP přes které můžete komunikovat mimo databázi. Utl_tcp umožňuje komunikaci mezi dvěma servery bez použití databázových linků. Utl_http se používá při komunikaci s web server a utl_smtp pro zasílání zpráv mezi servery. Při použití těchto balíku nepotřebujete zadávat žádná hesla a to je potencionální bezpečnostní incident, neboť můžete z jedné databáze přistupovat do druhé. Jedno z řešení se nabízí a to odejmout oprávnění execute uživateli public, ale tím pádem vývojáři přichází o možnost spouštět dané balíky.
S databází Oracle 11g přišli vývojáři z Oracle s novým způsobem, jak daný problém vyřešit. A to, že přiřadíte každému uživateli oprávnění spouštět tyto balíky, ale zároveň budete kontrolovat, jaké zdroje volají. Například balíkem utl_tcp budete moci přistupovat jen na některé IP adresy. Tento mechanismus se jmenuje Access control list, zkráceně ACL. Jestliže je tedy server na seznamu, může k němu uživatel přistoupit, v opačném případě mu to není povoleno.
Na příkladu rychle pochopíte, o čem to je. K práci s ACL se používá balík dbms_network_acl_admin a jeho metody. Pro vytvoření slouží příkaz create_acl.
SQL> begin
dbms_network_acl_admin.create_acl (
acl => 'seznam_acl.xml',
description => 'Normalni pristup',
principal => 'CONNECT',
is_grant => TRUE,
privilege => 'connect',
start_date => null,
end_date => null
);
end;
/
PL/SQL procedure successfully completed.
Tímto příkazem jste vytvořili vlastní seznam, který se jmenuje seznam_acl a je formátu XML. Daný seznam je přiřazen roli connect, ale zde může být i konkrétní uživatel.
Zkontrolujte, že je seznam opravdu vytvořený. To uděláte dotazem nad tabulkou resource_view.
SQL> select any_path from resource_view where any_path like '/sys/acls/%.xml';
ANY_PATH
-----------------------------------------------------------------...
/sys/acls/seznam_acl.xml
Seznam je vytvořený, ale nejsou v něm specifikovaná žádná oprávnění. Přidejte do seznamu nějaké oprávnění. Třeba, že se bude aplikovat na uživatel Scott a bude mít oprávnění připojit se. K tomu slouží metoda add_privilege.
SQL> begin
dbms_network_acl_admin.add_privilege (
acl => 'seznam_acl.xml',
principal => 'SCOTT',
is_grant => TRUE,
privilege => 'connect',
start_date => null,
end_date => null);
end;
/
PL/SQL procedure successfully completed.
Dobře. Teď jste přiřadili uživatele, ale musíte ještě nastavit, na které stránky bude moci přistupovat. Musíte nadefinovat hosta ke kterému povolíte přístup. K tomu slouží metoda assign_acl.
SQL> begin
dbms_network_acl_admin.assign_acl (
acl => 'seznam_acl.xml',
host => 'www.tomas-solar.com',
lower_port => 22,
upper_port => 55);
end;
/
PL/SQL procedure successfully completed.
Uživatel může přistupovat na ww stránky www.tomas-solar.com, ale pouze na porty v rozmezí 22 až 55. Jelikož http server běží na portu 80, uživatel nebude moci přistoupit ke stránkám pomocí http protokolu i když mu přiřadíte oprávnění spouštět balík utl_http.
Poznámka: Seznam aktivních ACL získáte dotazem do tabulky dba_network_acls.
select * from dba_network_acls;
Přiřaďte uživateli oprávnění execute na balík utl_http.
SQL> grant execute on utl_http to scott;
Grant succeeded.
Uživatel Scott se nemůže připojit na stránku, protože mu to ACL nedovolí.
SQL> sho user
USER is "SCOTT"
SQL> select utl_http.request('http://www.tomas-solar.com ') from dual;
select utl_http.request('http://www.tomas-solar.com ') from dual
*
ERROR at line 1:
ORA-29273: HTTP request failed
ORA-06512: at "SYS.UTL_HTTP", line 1577
ORA-24247: network access denied by access control list (ACL)
ORA-06512: at line 1
Řešením je zvýšit rozsah dostupných portů.
SQL> begin
dbms_network_acl_admin.assign_acl (
acl => 'seznam_acl.xml',
host => 'www. tomas-solar.com ',
lower_port => 1,
upper_port => 10000);
end;
/
PL/SQL procedure successfully completed.
Když zkusíte dostupnost stránek nyní, ve by mělo být bez problémů.
SQL> sho user
USER is "SCOTT"
SQL> select utl_http.request('http://www.tomas-solar.com ') from dual;
UTL_HTTP.REQUEST('HTTP://WWW.TOMAS_SOLAR.COM')
-----------------------------------------------------------------
Vyzkoušeli jste si nasadit vlastní ACL a jak je vidět z příkladu, není to nic těžkého, ale efekt je veliký.
Tento text je úryvkem z knihy
Tomáš Solař: Oracle Database 11g - Hotová řešení
O knize na stránkách vydavatele
ACL · Access control list · Oracle · databáze
Linkuj
| Jagg
| Delicious
| Facebook
| vybrali.sme.sk
Komentáře