Monday, June 23, 2008

Jak stworzyć użytkownika i bazę dla niego - MySQL, Postgres

Zawsze miałem problem z bazami danych. Po instalacji nigdy nie pamiętam jak utworzyć użytkownika i bazę dla niego, tak żeby miał do niej wszelkie prawa, ale nie miał praw do innych baz. Poniżej krótki tutorial jak to zrobić:

MySQL

$ mysql -u root -p
Nie zawsze dodajemy to "-p" - tylko jeśli root ma hasło.

mysql> create user franek identified by 'haslo_frania';
Tworzymy użytkownika "franek", z hasłem "haslo_frania".

mysql> grant all on baza_frania.* to 'franek'@'%';
Znak '%' oznacza że nadajemy prawa użytkownikowi 'franek' niezależnie od tego skąd się połączy. Gdyby zamiast '%' było np. 'localhost' lub '192.168.1.22', znaczyłoby to że takie prawa ma franek tylko jeśli połączy się z tych hostów.

mysql> flush privileges;
mysql> quit

$ mysql -u franek -p
Znowu podłączamy się do serwera, ale teraz już jako użytkownik franek.

mysql> create database baza_frania;
Tworzymy bazę "baza_frania". Możemy w niej tworzyć tabele, zapisywać, zmieniać, generalnie robić wszystko.

PostgreSQL

$ sudo -u postgres psql
W ten sposób uruchamiamy klienta postgresa jako user "postgres". Jest to odpowiednik MySQLowego roota. Przez sudo robi się to na ubuntu, na innych systemach może być inaczej, generalnie chodzi o to żeby uruchomić "psql" jako użytkownik "postgres".

postgres=# create user franek password 'haslo_frania';
Tworzymy użytkownika franek z hasłem "haslo_frania".

postgres=# create database baza_frania owner franek;
W ten sposób utworzyliśmy bazę "baza_frania", której franek jest właścicielem, zatem ma do niej pełne prawa. 


Możemy też stworzyć schema dla użytkownika:
postgres=# create schema moja_schema;

Oraz sprawić, by ta schema była dla niego domyślną:
postgres=# alter user franek set search_path moja_schema;

postgres=# \q
Wychodzimy z narzędzia psql

$ psql -U franek -W -d baza_frania
I podłączamy się jako użytkownik "franek" do bazy "baza_frania". Czasami trzeba jeszcze dodać -h localhost żeby podłączyć się przez interfejs sieciowy, bo możliwość podłączenia się bezpośrednio do bazy często jest zablokowana.

To wszystko.
Pozdrawiam.

2 comments:

arab said...

Hmm, zapomniałeś o jednym.

W MySQLu, po GRANT ALL on... należy jesio wydać komendę:

FLUSH PRIVILEGES;

celem przeładowania uprawnień, inaczej w nieskończoność można próbować się "zalogować na" nowo utworzonego użytkownika bazy danych.

pawelstawicki said...

Już update'uję. Dzięki :)