Odblokowanie zdalnego dostępu do bazy

Zajrzyj tu:

http://www.stuartellis.eu/articles/postgresql-setup/#enabling-remote-use

A tu treść:

Enabling Remote Access

If you wish to enable remote access, modify the cluster settings. The configuration files for each cluster are in the directory /etc/postgresql/version/clustername/, e.g. /etc/postgresql/8.1/main/.

Edit the file postgresql.conf, and remove the comment marker on the line for the listen_addresses setting, so that it reads:

listen_addresses = ‘*’

Open the file pg_hba.conf:

# nano /etc/postgresql/8.1/main/pg_hba.conf

To permit users to connect from remote systems on your network with any role, add this line:

host all all 192.168.1.0/24 md5

Replace 192.168.1.0/24 with the appropriate subnet definition for your network.

This enables md5 authentication, which means that login roles are secured with passwords that PostgreSQL itself stores in an encrypted form, and that PostgreSQL will require a valid password for any remote connection to use a role. After you make this change, ident authentication remains enabled for local logins.

You may, of course, change the local line in pg_hba.conf to disable ident authentication. Make sure that you can actually login to your PostgreSQL cluster with the postgres role and a password first!

To make your changes take effect, restart the service:

# /etc/init.d/postgresql-8.1 restart

Once the service restarts, you may access your PostgreSQL service from remote systems, either using tools such as psql or pgAdmin III, or with applications that support SQL. The Debian version of PostgreSQL is configured to automatically protect network connections with SSL, so that all communication between the server and remote clients is encrypted.

By default, the postgres system account on Debian is locked, and you should not unlock it. Cracking tools now try to use postgres, root, and other well-known system account names when they attempt to gain access to UNIX-like operating systems.

Under no circumstance should you enable PostgreSQL ident authentication for any remote access. The ident system cannot safely verify or guarantee the identity of any user on a remote system.

Dorzucenie SpringSecurity do projektu

Zakładam, że macie zbudowny projekt hibernate od Timoszuka. Pewnie bardziej elegancko byłoby wyedytować build.gradle i gradle.properties

1. Trzeba dodać odpowiednie jary:

http://static.springsource.org/spring-security/site/downloads.html

Ja pobrałem: Spring Security 3.1.0.RC3.

Potrzebowałem także tego jara: cglib-2.2.2.jar.

http://sourceforge.net/projects/cglib/files/

2. Trzeba wprowadzić parę zmian w pliku testContext.xml, w miejscu, którym nikt się zwykle nie interesuje.


<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop">

3. Każde DAO trzeba opisać w testContext.xml mniej więcej tak

<bean id="userDAO" class="pl.edu.mimuw.kolakowski.DAOImpl.UserDAOImpl">
<property name="hibernateTemplate" ref="hibernateTemplate" />
</bean>

4. Teraz trzeba stworzyć własny serwis, szczegóły:
http://stackoverflow.com/questions/2683308/spring-security-3-database-authentication-with-hibernate

Powinno działać też bez beanów dla daoAuthenticationProvider i authenticationManager.

<bean id="userDetailsService"
class="pl.edu.mimuw.kolakowski.service.UserDetailsServiceImpl">
</bean>

<bean id="daoAuthenticationProvider"
class="org.springframework.security.authentication.dao.DaoAuthenticationProvider">
<property name="userDetailsService" ref="userDetailsService"/>
</bean>

<bean id="authenticationManager"
class="org.springframework.security.authentication.ProviderManager">
<property name="providers">
<list>
<ref local="daoAuthenticationProvider" />
</list>
</property>
</bean>

<security:authentication-manager>
<security:authentication-provider user-service-ref='userDetailsService'/>
</security:authentication-manager>

UserDetailsServiceImpl mniej więcej tak jak w linku. Ja Assemblera zawarłem w serwisie. Jak chcecie oddzielnie to trzeba zrobić beana dla niego w testContext.xml.

W testach JUnit mam takie coś:

@Autowired
private UserDAO userDAO;


@Autowired
private UserDetailsService uds;

EDIT:

Lepiej zrobić tak (bez beana dla AuthenticationManagera i Priovidera):


<bean id="userDetailsService"
class="pl.edu.mimuw.kolakowski.service.UserDetailsServiceImpl">
</bean>

<security:authentication-manager>
<security:authentication-provider user-service-ref='userDetailsService'/>
</security:authentication-manager>

Potem używać:

@Autowired
private AuthenticationManager am;
....
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken("Grześ", "s");
Authentication auth = am.authenticate(token);
SecurityContextHolder.getContext().setAuthentication(auth);

Chyba coś w tym stylu ma być. Tyle że należy to jakoś jeszcze ładnie “opakować” 🙂

Gradle

1. Ściągamy gradle:

http://www.gradle.org/downloads

Najlepiej wersję 5. Z wersją 6 są problemy.

2. “Instalacja” gradle:

For running Gradle, add GRADLE_HOME/bin to your PATH environment variable. Usually, this is sufficient to run Gradle.

Czyli w katalogu domowym (np. /home/grzegorz/ ) w pliku .bashrc na końcu piszemy:


PATH=$PATH:/home/grzegorz/Programy/gradle-1.0-milestone-5/bin
export PATH

3. Wyloguj się i zaloguj ponownie.

4. Wpisz w konsoli gradle -v , żeby sprawdzić czy działa.

5. Ściągamy przykładowe projekty (classes, a nie zhibernate) ze strony Timoszuka: https://github.com/gtimoszuk/.

6. Wchodzimy do projektu hibernate i robimy: gradle eclipse.

7. Możemy zaimportować projekt do eclipse.

Instalacja Liferay

1. Pobierz: http://www.liferay.com/downloads/liferay-portal/available-releases Bundled with Tomcat.

2. Stwórz w MySQL:

create database lportal character set utf8;

3. Stwórz plik …/liferay-portal-6.0.6/tomcat-6.0.29/webapps/ROOT/WEB-INF/classes/portal-ext.properties:


#
# MySQL
#
jdbc.default.driverClassName=com.mysql.jdbc.Driver
jdbc.default.url=jdbc:mysql://localhost/lportal?useUnicode=true&characterEncoding=UTF-8&useFastDateParsing=false
jdbc.default.username=grzegorz
jdbc.default.password=haslo1

4. Odpal: …/liferay-portal-6.0.6/tomcat-6.0.29/bin/startup.sh

Przeczytaj też: …/liferay-portal-6.0.6/readme.html

5. http://localhost:8080/

XMLowe bazy danych – ćwiczenia

1. Odpalamy Exchanger, żeby zrobić ćwiczenia od Czarnika:
http://www.exchangerxml.com/editor/downloads.html?x=91&y=27

Zwróćcie szczególną uwagę na:

* After downloading, unzip the file xngr-editor.zip
* Change to the directory you unzipped to
* At the prompt type: java -jar xngr-editor.jar

Linki do materiałów Czarnika:

http://www.mimuw.edu.pl/~czarnik/zajecia/xml09/lab03.html
http://www.mimuw.edu.pl/~czarnik/zajecia/xml09/lab04.html
http://www.mimuw.edu.pl/~czarnik/zajecia/xml09/lab05.html
http://www.mimuw.edu.pl/~czarnik/zajecia/xml09/lab07.html

Parę słów o postgresie

Ja swojego postgresa zainstalowałem przez Synaptic. Parę przydatnych uwag (mniej czasu stracisz na googlaniu):

  • Logujemy się mniej więcej tak:
    $ sudo su postgres -c psql grzegorz

    grzegorz to nie użytkownik bazy danych, tylko systemu.

  • Użytkownika bazy danych tworzymy poleceniem:

    CREATE USER grzegorz WITH PASSWORD 'haslo1';

  • Tworzenie BD:

    CREATE DATABASE zbd OWNER grzegorz;

    Wydaje się to zbyteczne, ale dorzuciłem:

    GRANT ALL PRIVILEGES ON DATABASE zbd TO grzegorz;

  • MySQL vs. PosgreSQL:

    • \c {nazwa_bazy} = USE {nazwa_bazy};
    • \d = SHOW TABLES;
    • \l = SHOW DATABASES;

Konfigurowanie projektu (Timoszuk)

1. Na początek pobieramy projekt: https://github.com/gtimoszuk/ (ten zhibernate)

2. Ściągamy i instalujemy Mavena: http://maven.apache.org/ . Działamy mniej więcej tak jak jest to opisane w README:

1) Unpack the archive where you would like to store the binaries, eg:

Unix-based Operating Systems (Linux, Solaris and Mac OS X)

tar zxvf apache-maven-3.0.x.tar.gz

Windows 2000/XP

unzip apache-maven-3.0.x.zip

2) A directory called “apache-maven-3.0.x” will be created.

3) Add the bin directory to your PATH, eg:

Unix-based Operating Systems (Linux, Solaris and Mac OS X)

export PATH=/usr/local/apache-maven-3.0.x/bin:$PATH

Windows 2000/XP

set PATH=”c:\program files\apache-maven-3.0.x\bin”;%PATH%

4) Make sure JAVA_HOME is set to the location of your JDK

5) Run “mvn –version” to verify that it is correctly installed.

Przy czym z 3. i 4. punktem mogą być problemy. Dlatego w katalogu domowym odnajdź plik .bashrc. Wyedytuj go tak, aby wyglądaj mniej więcej jak mój (warty uwagi jest jedynie ostatni fragment pliku) 😀


JAVA_HOME=/usr/lib/jvm/java-6-openjdk/
JAVA_BIN=$JAVA_HOME/bin
PATH=$PATH:$JAVA_HOME:$JAVA_BIN:/home/grzegorz/Programy/apache-maven-3.0.3/bin
export PATH

Następnie wylogowujemy się i logujemy ponownie, żeby załadowały się nowe ustawienia. Jeśli przechodzisz punkt 5. – moje gratulacje!

3. Otwórz plik pom.xml i ustaw wszystkie properties na odpowiednie wersje. Dla postresa są różne wersje, nie wiem jaką masz wersję, wejdź i wybierz: http://mvnrepository.com/artifact/postgresql/postgresql.

Do mojej wersji (8.4.9 ściągniętej przez Synaptic) pasuje 8.4-701.jdbc4. Ważne jest chyba, żeby dwie pierwsze cyferki się zgadzały.

4. Przejdź do katalogu głównego ściągniętego projektu i wykonaj:

mvn eclipse:eclipse

i poczekaj aż się wszystko ściągnie (zdążysz zrobić herbatę).

5. Dopiero teraz możemy zaimportować projekt do Eclipsa.

6. Teraz należy zmienić ustawienia w pliku hibernate.cfg.xml. Znowu pokażę, jak wygląda mój (fragmenty):


<property name="hibernate.connection.driver_class">org.postgresql.Driver</property>
<property name="hibernate.connection.username">grzegorz</property>
<property name="connection.password">haslo1</property>
<property name="hibernate.default_schema">public</property>
<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>
<property name="connection.url">jdbc:postgresql://localhost/zbd2</property>

oraz:


    <!-- Drop and re-create the database schema on startup -->
<property name="hbm2ddl.auto">create</property>

Można użyć dowolnej bazy, ale pan Timoszuk woli postgresa.

7. Odpalamy testy JUnit (/src/test/java). Wątpię, żeby się powiodło za pierwszym razem 🙂

Konfigurowanie środowiska (Grzegorowski)

1. Tworzymy bazę w MySQL:

CREATE DATABASE sql1;

2.  Importujemy projekt do Eclipsa i zmieniamy co trzeba:
* dodajemy do projektu biblioteki z JBossa: /lib/ /client/ /common/lib/,
* modyfikujemy plik configuraion.properties (zmieniamy jboss.home.dir),
* W folderze todeploy:
* plik .jar kopiujemy do JBOSS_HOME/server/default/lib/
* pik zbd1-ds.xml kopiujemy do JBOSS_HOME/server/default/deploy/
* w pliku zbd1-ds.xml wystarczy zmienić tylko nazwę i hasło użytkownika.

3. Projekt budujemy klikając PPM w Eclipsie na build.xml -> Run As -> Ant Build.

4. Odpalamy JBossa. Z folderu /ZBD1/release/ kopiujemy ZBD1.ear do JBOSS_HOME/server/default/deploy/. JBoss powinien zareagować i się odpowiednio sam przekonfigurować. (Jak później coś pójdzie nie tak, to czasami pomaga zamknięcie JBossa i zrestartowanie).

6. Ściągamy SOAPUI (http://sourceforge.net/projects/soapui/files/soapui/4.0.1/). Odpalamy skrypt /bin/soapui.sh (trzeba wcześniej dodać uprawnienia do wykonywania).

7. W SOAPUI: File -> new SOAPUI project. Nazwa dowolna. Initial WSDL: http://localhost:8080/zdb1/api?wsdl.

Po kliknięciu OK zobaczyny drzewko: Zbd1SrvBean… z gałęziami echo i test. W test otwieramy Request 1 i odpalamy (zielona strzałka). Jeśli się powidło to w bazie zbd1 w tabeli Zbd1 powinien dodać się wiersz o id = 1.

8. Następna część zadania polega na zmianie pewnych fragmentów kodu w Eclipsie. Metoda test ma zaszyte na sztywno dodawanie obiektu o id = 1. Trzeba przerobić to tak, żeby argumentem metody test był obiekt klasy Zbd1.

Zmianiamy:
I. W Zbd1Interface.java:

public String test(Zbd1 obj);

II. W ZbdBean1.java:

public String test(Zbd1 obj) {
em.persist(obj);
return String.valueOf(obj.getId());
}

III. W Zbd1SrvBean.java:

public String test(Zbd1 obj)
{
return this.getZbdApi().test(obj);
}