25 Ocak 2019 Cuma

Access Privilege (Kullanım Yetkileri) Nedir?



PostgreSQL, oluşturulan nesnelerin (şema, tablo, veritabanı, şablon, fonksiyon vb.) kullanım haklarını yönetmeye izin verir. Bir kullanıcı, bu nesneler üzerinde okuma, yazma, değiştirme, ekleme, çıkarma, oluşturma ve bunun gibi ayrıcalıkların birine veya birden fazlasına sahip olabilir.

Bu ayrıcalıklar şemalar için sadece iki tanedir. Bunlar, USAGE(kullanım) ve CREATE(oluşturma) yetkileri olarak adlandırılır.

Ön tanımlı olarak, kullanıcılar sahibi olmadıkları şemalardaki nesnelere ulaşamazlar. Bunun sağlanması için, kullanıcıya, USAGE yetkisi verilmelidir. Bu şemalara erişim izninden sonra, farklı kullanımlar için şema içindeki nesnelere özel, farklı yetkiler tanımlanabilir. 

Bir kullanıcı başka bir kullanıcının şemasında nesne oluşturma yetkisine sahip olabilir. Bunun için bu kullanıcıya, CREATE yetkisi verilmelidir. 

Yeni oluşturulan veri tabanlarının şema isimleri, ön tanımlı olarak 'public' dir. Bu şemalar, yine ön tanımlı olarak, tüm kullanıcılara USAGE ve CREATE yetkisi verilmiş şemalardır. 

Yetki kontrolleri, yetki verme/kısıtlama/kaldırma: 

> Veritabanında şemaları görüntülemek için  \dn+ kullanılır. Bu komut ile aynı zamanda 'access privileges' sütununu da görürüz.

Örnek olarak pagila veritabanının şema listesi aşağıdaki gibidir:  








Burada ilk sütun şema adını gösterir. İsmin ön tanımlı olarak, 'public' olması tüm kullanıcılara kullanım ve oluşturma yetkisi verilmiş olduğu anlamına gelir. İkinci sütun şema sahibini; dördüncü sütun şema tanımını verir. Üçüncü sütun ise  ‘access privileges’ yani kullanım yetkileri sütunudur ve şu şekilde okunur:

> ‘yetki verilen kullanıcı=verilen yetkiler/yetki veren kullanıcı’


  • Burada 'U' kullanım(USAGE), 'C' oluşturma(CREATE) yetkisini simgeler. 
  • Erişim ayrıcalıklarının ikinci satırında eşitliğin sol tarafı boş bırakılmıştır. Bu, ön tanımlı olan 'public' şemanın özelliği olarak, tüm kullanıcılara(PUBLIC) yetki verildiği anlamına gelir. Burada PUBLIC, şema ismi olan 'public' ile karıştırılmamalıdır. Herhangi bir şemanın yetkileri de tüm kullanıcılara verilebilir.
 Örneğin schema_1 adında oluşturulan şema yetkilerini PUBLIC olarak ayarladığımızda da şu şekilde görünecektir:











Yetki verme, GRANT komutu ile sağlanır. Bu komutun şemalar için kullanımı şöyledir:

> GRANT USAGE/CREATE/ALL ON SCHEMA şema_ismi TO yetki_verilen_kullanıcı;

Örnek olarak, deneme kullanıcısına kullanım ve oluşturma yetkisi verdikten sonra \dn+ komutundan alacağımız çıktı şöyledir:














Yetki kısıtlama/kaldırma ise REVOKE komutu ile yapılır.

>REVOKE USAGE/CREATE/ALL ON SCHEMA şema_ismi FROM yetki_verilen_kullanıcı;
Örnek olarak, deneme kullanıcısından CREATE yetkisini kaldırdıktan sonra \dn+ komutundan alacağımız çıktı şöyledir: 



GRANT komutu ile yapılan diğer yetkilendirmelere örnekeler:


" https://www.postgresql.org/docs/current/sql-grant.html "
GRANT SELECT ON mytable TO PUBLIC;
GRANT SELECT, UPDATE, INSERT ON mytable TO admin;
GRANT SELECT (col1), UPDATE (col1) ON mytable TO miriam_rw;
Tablolar ve sütunlara verilen yetkilere \dp komutu ile bakılır ve çıktılar şu şekilde okunur:
rolename=xxxx -- privileges granted to a role
        =xxxx -- privileges granted to PUBLIC

            r -- SELECT ("read")
            w -- UPDATE ("write")
            a -- INSERT ("append")
            d -- DELETE
            D -- TRUNCATE
            x -- REFERENCES
            t -- TRIGGER
            X -- EXECUTE
            U -- USAGE
            C -- CREATE
            c -- CONNECT
            T -- TEMPORARY
      arwdDxt -- ALL PRIVILEGES (for tables, varies for other objects)
            * -- grant option for preceding privilege

        /yyyy -- role that granted this privilege

Pagila veritabanında \dp komutunun çıktısının bir kısmı aşağıdaki gibidir.

Pagila Örnek Veri Tabanı İndirilmesi ve Kurulması


Pagila Örnek Veri Tabanı İndirilmesi ve Kurulması

Pagila nedir ? Neden tercih edilir?
Pagila, PostgreSQL’in örnek veri tabanlarından bir tanesidir.  İçinde bir çok farklı özellik taşıyan bir örnek olduğu için tercih edilir. PostgreSQL’in gelişmiş özelliklerini kullanır. PostgreSQL’i yeni öğrenen veya kendini geliştirmek isteyen kişiler için çok sayıda örnek nesne sunar.Veri tabanı içindeki nesnelerin bazıları şu şekildedir:

Pagila yüklenmesi şu şekilde yapılır:

Root kullanıcısına geçilir, böylece indirme ve kurulum yetkisi alınır: 

> sudo su -

yum komutuyla pagila veri tabanın kurulum dosyası indirilir. Eğer paketin ismi bilinmiyorsa önce yum search komutuyla paket bulunur:

> yum search pagila (Paketin açık ismi bu komut sonunda bulunur. Paket adı pagila10.noarch olarak karşımıza çıkar.)
>  yum install pagila10.noarch (Bu komut paketi indirir ve kurar.)

NOT: yum komutu, Red Hat Linux sistemlerinde paket yöneticiliği yapar. Search, install, list, update, upgrade vb. yum komutuyla yapılabilecek bazı paket yönetimi işlemleridir. 

Paketler indirildikten sonra Postgres kullanıcısı içinde, psql komutu ile veri tabanlarına ulaşılır:
> su - postgres 
> psql

Burada CREATE komutu ile yeni bir veri tabanı oluşturulur. Örneğin pagila_db:

> CREATE DATABASE pagila_db;

\c komutu ile oluşturulan bu veri tabanına bağlanılır. \i komutu ile de pagila paketleri içinde bulunan sql dosyaları veri tabanına yüklenir. 

> \c pagila_db
>\i /usr/share/pagila10/pagila-data.sql
> \i /usr/share/pagila10/pagila-schema.sql

İndirilen tabloları teyid etmek için pagila_db veri tabanın içerisinde \d komutu ile örnek tabloları görüntüleyebiliriz.