Linux Ubuntu PostgreSQL Kullanıcı ve Veritabanı Oluşturma

18 May

Bu yazıda, Linux Ubuntu komut satırı kullanılarak PostgreSQL’de veritabanlarının nasıl oluşturulacağı ve kullanıcıların nasıl ekleneceği veya nasıl silineceği açıklanmaktadır.

Kullanıcı Oluşturma İşlemi

Her PostgresSQL kurulumunda, postgres adında bir süper kullanıcı oluşturulur. Başlangıçta, başka kullanıcılar oluşturulana kadar PostgreSQL’e postgres kullanıcısı olarak bağlanmanız gerekir.

sudo su postgres

Bu komut ile giriş yaptıktan sonra PostgreSQL süper kullanıcısı olarak işlemler yapılabilir.

Yeni bir kullanıcı oluşturmak için gerekli bir sürü parametre bulunmaktadır. Parametrelerin tam listesine buradan ulaşabilirsiniz. Ancak –interactive ve –pwprompt parametrelerini kullanarak, işlem adımlarını konsoldan size sormasını sağlayarak ilerleyebiliriz.

createuser --interactive --pwprompt

Bu şekilde, adımlarda sorulan bilgileri girerek ilerleyebilirsiniz. Artık administrator adında yeni bir kullanıcı oluşturulmuştur.

Kullanıcıları listelemek için psql komutunu ile PostgreSQL terminaline giriş yaparak \du komutu ile kullanıcıları görebilirsiniz. (psql komutu girildiğinde terminal satırı postgres=# şeklinde görüntülenecektir.)

Şu anda sistemde sadece iki kullanıcı mevcuttur.

Veritabanı Oluşturma İşlemi

PostgreSQL’de yeni bir veri tabanı oluşturmak için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır. Şu an sistemde administrator ve postgres kullanıcıları bu yetkilere sahiptir.

sudo su postgres

Komutu ile giriş yaptıktan sonra veritanbanı oluşturma komutu olan ceratedb komutu çalıştırılır.

createdb -O administrator mydb

Artık mydb adında yeni bir veritabanı oluşturulmuştur. psql komutunu girerek \l komutu ile tüm veritabanları listelenebilir.

Veritabanına Kullanıcı Ekelme İşlemi

Bir kullanıcının, bir veritabanı üzerinde işlem yapabilmesi için, ilgili işlem adına yetkilendirilmesi gerekmektedir.

bucuncu adında bir kullanıcı oluşturalım:

createuser --interactive --pwprompt

bucuncu kullanıcısına, mydb veritabanı bağlantı yetkisi verelim:

GRANT connect ON DATABASE mydb TO bucuncu;

Veritabanı Silme İşlemi

PostgreSQL’de yeni bir veri tabanı silmek için, postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropdb komutu ile veritabanı silinebilir.

dropdb mydb

Artık mydb veritabanı sistemden silinmiştir.

Kullanıcı Silme İşlemi

PostgreSQL’de bir veri tabanını silmek için, yine postgresql superuser yetkisine sahip bir kullanıcı ile giriş yapılmalıdır.

sudo su postgres

Ardından dropuser komutu ile kullanıcı sistemden silinebilir.

dropuser administrator

Not: Kullanıcı herhangi bir veritabanına veya başka bir nesneye sahipse, kullanıcıyı silemezsiniz. Silmek istediğinizde aşağıdaki gibi bir hata oluşur:

dropuser: removal of role "username" failed: 
ERROR:  role "username" cannot be dropped because some 
objects depend on it
DETAIL:  owner of database "database"

Kullanıcıyı silebilmek için sahip, veritabanı sahibini değiştirmelisiniz.

SQL Komutlarıyla Kullanıcı Oluşturma İşlemi

PostgreSQL veri tabanında ROLE kavramı hem bireysel bir kullanıcıyı, hem de bir kullanıcı grubunu ifade etmektedir. Eğer kullanıcıya LOGIN özelliği eklenirse, kullanıcı veri tabanına bağlantı sağlayabilir. İki adımda, kullanıcı gurubu ve bireysel kullanıcı oluşturmayı inceleyebiliriz.

Bir kullanıcı grubu oluşturmak gerekli komut:

CREATE ROLE gis_editor;

Veri tabanına bağlanabilen bireysel bir kullanıcı oluşturmak için gerekli komut:

CREATE ROLE bayram WITH PASSWORD '123456' LOGIN INHERIT;

Artık “bayram” kullanıcısı veri tabanına “123456” şifresi ile bağlanabilir. INHERIT özelliği ile kullanıcı, bağlı olduğu grubun özelliklerini alabilir hale getirilmiştir. Çünkü, tablolara erişme gibi yetkiler “gis_editor” grubuna verilecektir. Dolayısıyla bu gruba dahil olan bireysel kullanıcılar da aynı yetkilere sahip olacaktır.

Bir kullanıcıyı bir role atamak için gerekli komut:

GRANT gis_editor TO bayram;

Artık “bayram” kullanıcısı “gis_editor” rolünün yetkilerine sahiptir.

Bir şemada “gis_editor” rolüne yetki verildiğinde, artık o yetki INHERIT pozisyonundaki alt kullanıcılara da geçer. Örneğin.

GRANT USAGE on schema my_schema TO gis_editor;

Bir şemadaki tüm tablolara veya sequence nesnelerine yetki vermek için gerekli komutlar:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema TO gis_editor
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema TO gis_editor

PostgreSQL yetkileri ile ilgili daha detaylı bilgiye PostgreSQL GRANT, REVOKE başlıklı yazıdan ulaşabilirsiniz.

PostgreSQL UUID veri tipi

18 May

Universally Unique Identifiers (UUID) olarak bilinen ve Postgresql veritabanında uuid olarak adlandırılan bir veri tipi bulunmaktadır. Bazı sistemler bu veri türünü genel olarak benzersiz bir tanımlayıcı veya GUID olarak adlandırır. Benzersiz olarak üretilmesi nedeniyle, dağıtık sistemler için bu veri türü, tek bir veritabanı içinde ID üretimi bakımından sıralı üreteçlerden daha iyi bir benzersizlik garantisi sağlar.

UUID veri tipi, tire işaretleriyle ayrılmış birkaç grup halinde ifade edilir. Özellikle 8 basamaklı ilk grup ve ardından 4 basamaklı üç grup ve onn ardından 12 basamaklı bir grup olarak küçük harfli onaltılık basamak dizisi olarak yazılır. Bu standart formdaki bir UUID örneği:

e0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11

PostgreSQL veri tabanı, ayrıca aşağıdaki UUID formlarını da kabul eder.

A0EEBC99-9C0B-4EF8-BB6D-6BB9BD380A11
{a0eebc99-9c0b-4ef8-bb6d-6bb9bd380a11}
a0eebc999c0b4ef8bb6d6bb9bd380a11
a0ee-bc99-9c0b-4ef8-bb6d-6bb9-bd38-0a11
{a0eebc99-9c0b4ef8-bb6d6bb9-bd380a11}

PostgreSQL veri tabanından benzersiz uuid üretebilmek için uuid-ossp eklentisinin aktif edilmesi gerekmektedir. Bu eklentiyi aktif etmek için aşağıdaki komut kullanılabilir.

CREATE EXTENSION "uuid-ossp";

Bu komutu çalıştırıldığında, Postgresql’e uuid üretebilen fonksiyonlar eklenmektedir.

  • uuid_generate_v1()
  • uuid_generate_v1mc()
  • uuid_generate_v4()
  • uuid_nil()

uuid_generate_v1()

Bilgisayarın MAC adresi, geçerli zaman damgası ve rastgele bir değer kombinasyonuna göre UUID değerleri oluşturmak için uuid_generate_v1 () işlevi kullanılır.

SELECT uuid_generate_v1();

uuid_generate_v1mc()

Bu fonksiyon, sürüm 1 UUID oluşturur, ancak bilgisayarın gerçek MAC adresi yerine rasgele multicast MAC adresi kullanır.

SELECT uuid_generate_v1mc();

uuid_generate_v4()

Yalnızca rastgele sayılara dayalı bir UUID değeri oluşturmak istiyorsanız uuid_generate_v4 () fonksiyonunu kullanabilirsiniz.

SELECT uuid_generate_v4();

uuid_nil()

Sadece sıfırlardan oluşan bir uuid değeri üretir.

SELECT uuid_nil();

Tabloda uuid Alanı Kullanımı

CREATE TABLE messeges (
    id uuid DEFAULT uuid_generate_v4(),
    content VARCHAR NOT NULL,
    PRIMARY KEY (id)
);

Tabloya veri girişi:

INSERT INTO messages 
    (content)
VALUES
    ('Hi'),
    ('This is'),
    ('my message');

Veri Boyutu ve Performans

uuid veri tipi 16 byte boyutunda binary değere sahiptir. Bu nedenle sorgularda çok büyük performans artışı sağlar. Aynı boyuttaki bir text ile karşılaştıracak olursak:

select
    pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::text) 
       as text_size,
    pg_column_size('0fe5d76a-99b6-11ea-bb37-0242ac130002'::uuid) 
       as uuid_size;


 text_size | uuid_size 
-----------+-----------
        40 |        16

Ubuntu 18.04 üzerine PostgreSQL 12 kurulumu

17 May

PostgreSQL veritabanı, Linux gibi tamamen ücretsizdir ve açık kaynak kodludur. Bu yazıda Linux Ubuntu 18.04 dağıtımı üzerine PostgreSQL kurulumu anlatılmaktadır.

Ubuntu 18.04 dağıtımı üzerine Postgresql 12 kurulumu yapmak için öncelikle repository paket versiyonunu kontrol etmek gerekmektedir. Repository paket kontrolünün nasıl yapıldığına bir önceki yazıdan ulaşabilirsiniz.

PostgreSQL Kurulumu

Ubuntu sürümünüzde bulunan PostgreSQL sürüm istediğiniz sürüm değilse, güncellemek için PostgreSQL Apt Repository kullanılabilir. Bunun için öncelikle yapılması gereken:

/etc/apt/sources.list.d/pgdg.list

dosyası oluşturmaktır. Bu dosyanın içerisine aşağıdaki satır eklenmelidir.

deb http://apt.postgresql.org/pub/repos/apt/ bionic-pgdg main

Daha sonra depo imzalama anahtarını (signing key) içe aktarılmalı ve paket listeleri güncellenmelidir.

sudo apt-get update

Artık ortam postgresql 12 yüklemesi için hazır durumdadır. Yükleme komutu:

sudo apt-get -y install postgresql-12 postgresql-client-12

Yükleme tamamlandığında, postgresql servisini başlatmak için gerekli komut:

sudo systemctl start postgresql

artık servis durumu kontrol edilebilir.

sudo systemctl status postgresql

PostgreSQL Bağlantısı

PostgreSQL kurulumu sonrasında Ubuntu kullanıcılarına postgres adında bir sistem kullanıcısı otomatik olarak oluşturulur. Başlangıçta, diğer kullanıcılar oluşturulana kadar bu kullanıcısı ile PostgreSQL’e bağlanmanız gerekir.

sudo su postgres

komutu ile postgres kullanıcısına geçilerek psql komutu çalıştırıldığında artık veritabanı komutlarını kullanabilirsiniz.

\l

komutu ile veritabanları listelenebilir.

\c postgres

komutu ile postgres veri tabanına bağlanabilirsiniz. (Kurulum sırasında postgres veritabanı otomatik olarak oluşturulur.)

Postgresql veritabanını konsol ortamından yönetmek biraz kullanışsızdır. Bunun yerine pgAdmin, Datagrip gibi araçlar tercih edilmelidir.

PostgreSQL Remote Ayarları

Postgresql sunucusu dışından bağlantı yapabilmek için uzak bağlantı ayarlarını yapmak gerekmektedir. Bu ayarlar aşağıdaki dosyada bulunmaktadır.

/etc/postgresql/12/main/postgresql.conf

Bu dosya vim editörü ile açılarak

listen_addresses = '*'

satırı açık konuma getirilmelidir.

Daha sonra,

etc/postgresql/12/main/pg_hba.conf

dosyasında ip tanımlaması yapılmalıdır. (hba: host based authentication)

  • “host   all   all   212.0.103.8/32   md5″ şeklinde ayarlama yaparsanız istediğiniz tek bir adresten erişim sağlayabilirsiniz. Bu ip dışından bağlantı sağlanamaz.
  • “host   all   all   0.0.0.0/0          md5″ şeklinde ayarlama yaparsanız herhangi bir ip üzerinden sunucuya bağlanabilirsiniz. Burada password authentication kimlik doğrulama yöntemi ve  md5 algoritması kullanılmıştır. (Postgresql veri tabanında ayrıca trust, ident, peer, GSSAPI, LDAP kimlik doğrulama yöntemleri de mevcuttur.)

(Postgre

Bu ayarların yapıldıktan sonra aktif olabilmesi için postgresql servisinin yeniden başlatılması gerekmektedir.

sudo systemctl restart postgresql

Artık veritabanına uzak bağlantı sağlanabilir.

Ubuntu repository paketi sürüm kontrolü

16 May

Window gibi işletim sistemlerinde, kullanmak istediğimiz programlar exe, msi gibi paketler halinde dağıtılırken, Ubuntu gibi sistemlerde, ihtiyacınız olan programlar ve kitaplıklar .deb dosyalarında paketlenir ve dağıtılır. Bu dosyalar indirilebilir veya CD ortamında size gelebilir.

Ubuntu gibi sistemlerde “repository” diye adlandırılan paket depoları mahiyetinde kullanılan sunucular bulunmaktadır. Bu depolarda bulunan paketlere genellikle Synaptic gibi araçlarla erişirsiniz. Bu araçlar, sisteminizde yüklü olan paketleri ve depoda yüklemeye hazır durumda bulunan paketlerin listeler.

Ubuntu kurulduğunda mevcut Synaptic repository listesinde, kullanıcılara gerekli olan  programların o güne kadar güncellenmiş sürümleri bulunmaktadır. Ancak programlar işletim sistemlerinden daha hızlı gelişim gösterebilmektedirler. Ubuntu ortamına kurulmak istenen bir program “apt-get install” komutu ile yüklenirse, listedeki son sürümü indirip yüklenir. Bu nedenle, bir programı yüklemeden önce versiyon kontrolü yapmak faydalı olabilir. Örneğin postgresql versiyon kontrolü için kullanılacak komut şu şekildedir:

apt-cache policy postgresql

Bu komut çalıştırıldığında, sistemdeki postgresql durumunu listeler.

  • Listede 3 farklı sürümden bahseder. Bunlar;  10.13-1.pgdg18.04, 10.12-0ubuntu0.18.04.1 ve  10.3-1. Ayrıca hangi depolardan geldiklerini de gösterir.
  • Installed (none) bilgisi bize sistemde yüklü bir postgresql kurulumu olmadığını gösterir.
  • Candidate bilgisi, şu anda apt-get install komutu çalıştırıldığında yüklenecek sürüm bilgisini verir.

Ubuntu yeni kullanıcı ekleme işlemleri

12 May

Ubuntu ortamında kullanılan “sudo” komutu, “super user do” anlamına gelmektedir. Yani sudo komutunu kullanmak için yönetici yetkilerine sahip olmak gerekmektedir. Bir kullanıcının super user olması için “sudo” grubuna dahil olması gerekmektedir. Öncelikle bir kullanıcı oluşturulması gerekmektedir.

1. Giriş

sudo yetkili kullanıcıların oluşturulabilmesi için öncelikle root kullanıcısı ile ya da root yetkili bir kullanıcı ile giriş yapmak gerekmektedir.

ssh root@server_ip_address

2. Kullanıcı hesabı oluştur

Yeni kullanıcı oluşturmak için adduser ve useradd komutları kullanılır.

useradd ve adduser komutları arasında ne fark var?

useradd , aslında sistemle derlenmiş yerel bir binary dosyadır. adduser ise arka tarafta useradd binary dosyasını kullanan bir perl script’tir.

2.1  adduser komutu ile kullanıcı ekle

Yeni kullanıcı oluşturma işlemi adduser komutu ile yapılmaktadır. Örneğin bucuncu adında bir kullanıcı oluşturmak için gerekli komut aşağıdaki şekildedir.

adduser bucuncu

Komut çalıştırıldığında aşağıdaki işlemler gerçekleştirilerek kullanıcı hesabı ve dosyaları oluşturulur.

root@localhost:~# adduser bucuncuAdding user `bucuncu’ …
Adding new group `bucuncu’ (1001) …
Adding new user `bucuncu’ (1001) with group `bucuncu’ …
Creating home directory `/home/bucuncu’ …
Copying files from `/etc/skel’ …
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Changing the user information for bucuncu
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] y

Parolayı girdikten sonra, kullanıcı için otomatik olarak bir giriş dizini oluşturur, giriş dizinindeki birkaç yapılandırma dosyasını kopyalar ve yeni kullanıcının bilgilerini ayarlamanız istenir. Tüm bu bilgileri boş bırakmak istiyorsanız, varsayılanları kabul etmek için ENTER tuşuna basmanız yeterlidir..

adduser komutu, kullanıcı hesabının otomatik bir şekilde oluşturan, kullanıcı dostu bir komuttur.

2.2 useradd komutu ile kullanıcı ekleme

useradd komutu, parametreler kullanarak kullanıcı oluşturma işlemi için kullanılan komuttur.

useradd bucuncu -m -s /bin/bash -g users -G dbusers

Bu komut ile kullanıcı oluşturulurken, kullanıcı için gerekli olan tüm parametreler elle girilmelidir.

  • -m parametresi: –create-home anlamına gelir ve eğer daha önce oluşturulmamış ise home/bucuncu dizinini oluşturur.
  • -s parametresi: –shell anlamına gelir. Kullanıcının shell de oturum açması için gereklidir. Bu paramtreyi kullanmadan bir kullanıcı oluşturursanız, /etc/passwd içerisinde kullanıcıyı bucuncu:x:1000:1000::/home/bucuncu:/bin/sh şeklinde bulunur. Bu şekilde oturum açtığınızda terminalde yalnızca $: şeklinde bir terim görürsünüz. Eğer bu parametreyi kullanırsanız, /etc/passwd içerisinde kullanıcıyı bucuncu:x:1000:1000::/home/bucuncu:/bin/bash şeklinde görebilirsiniz. Bu şekilde oturum açtığınızda terminalde komut satırını bucuncu@localhost:~# şeklinde görebilirsiniz.
  • -g parametresi: –gid anlamınag elir. Yani grup id olarak adlandırılabilir.
  • -G parametresi: –groups anlamına gelir. Kullanıcıyı birden çok gruba eklemek için gereklidir.

useradd komutu için gerekli bütün parametrelere buradan ulaşabilirsiniz.

3. Kullanıcıyı sudo grubuna ekle

Ubuntu sistemlerinde varsayılan olarak, sudo grubunun üyelerine sudo erişim yetkisi verilir. sudo grubunda olmayan kullanıcılar sudo komutunu kullanamazlar. Çünkü sudo komutu yönetici yetkilerine sahip işlemler için gereklidir.Oluşturulan kullanıcıyı sudo grubuna eklemek için usermod komutu kullanılır.

usermod -aG sudo bucuncu

4. Yeni kullanıcı ile giriş yap

Oluşturulan yeni kullanıcı ile giriş yapmak için gerekli komut aşağıdaki şekildedir.

ssh bucuncu@localhost

5. Kullanıcı şifresini değiştir

Kullanıcı şifresini değiştirmek için:

sudo passwd bucuncu

komutu kullanılabilir. Komut çalıştığında iki defa yeni şifre girmeniz istenir.

Sonuç

Sudo yetkilerine sahip bir kullanıcı oluşturmayı görmüş olduk. Bu işlemi gerçekleştirirken  useradd ve adduser komutlarının kullanılabileceğini ve bu komutlar arasındaki farkları öğrenmiş olduk. Artık bu kullanıcı hesabıyla Ubuntu sunucunuza giriş yapabilir ve yönetici komutlarını çalıştırmak için sudo komutunu kullanabilirsiniz.

GitBash angular build base-href sorunu

5 May

Angular projelerini production ortamına almak için “ng build –prod” komutu kullanılır.

ng build –prod

Bu komutu kullandığımızda üretilen index.html dosyasında bir base href etiketi oluşturulur.

<base href=”/”>

Eğer proje IIS gibi bir http server üzerindeki ana web site dizinden yayınlanıyorsa doğrudan çalışacaktır. Ancak site, ana web site altında bir alt klasörde çalışacak ise, (örneğin “Default Web Site/my-app”) base href etiketi, angular build işlemi sırasında belirlenebilmektedir. Bu durumda çalıştırılan komut şu şekilde olacaktır. (angular deployment)

ng build –base-href /my-app/ –prod

Bu durumda GitBash konsolunun index.html içerisinde oluşturduğu base href parametresi şu şekilde olmaktadır:

<base href=”C:/Program Files/Git/my-app”>

Bu sorun angular cli ile alakalı bir sorun değil, git bash ile alakalı bir sorundur. Bu sorunu gidermek için kullanılacak olan angular komutu aşağıdaki gibi olmalıdır:

ng build –base-href=”//my-app\\” –prod