Herkese merhaba, PostgreSQL ile Masking konusuna değindiğim bir makaleyi sizinle paylaşıyorum, PostgreSQL de masking konusunu belli bir süre araştırdıktan sonra, belli bir kaç paket üzerinden yürüdüm.
Bu makalede içerisinde PostgreSQL Anonymizer paketini işliyor olacağız.
Bu makale'de; PostgreSQL Anonymizer Kurulum ve db "psql" işlemleri ile PostgreSQL i ayağa kaldırma ve masking işlemlerine giriş yapıyoruz.
Sonraki makele'de; Security, Performance, Dumps, GDPR, Generalization gibi konulara değiniyor olacağım.
Bu paket ile ilgili detaylı bilgilerine https://postgresql-anonymizer.readthedocs.io/en/stable/ adresinden erişebilirsiniz.
PostgreSQL Anonymizer opensource bir paket ve community ve kod bilgilerine gitlab hesabından erişebilirsiniz.
Paketin kurulumu ile ilgili güzel bir sayfa ve istediğiniz ortam için detaylı adım adım kurulumları takip edebilirsiniz.
Ben docker ortamı için kurulum yapacağım için bu bölümden devam ediyorum. Önce bir Image oluşturup ardından docker run ile belirtilen port ile bir container ayağa kaldırıyorum.
Image : docker pull registry.gitlab.com/dalibo/postgresql_anonymizer:stable
docker run : docker run -d -e POSTGRES_PASSWORD=x -p 6543:5432 registry.gitlab.com/dalibo/postgresql_anonymizer
Kurulum tamamlandıktan sonra yine kurulum sayfası içerisin de yer alan adımlardan devam ediyorum.
container exec : docker exec -it containerId psql -U postgreUser
Container ortamında PostgreSQL içerisine bağlandıktan sonra "psql" komutları ile PgAdmin veya Dbeawer gibi IDE lere gerek kalmadan bir çok işlemi yapabiliyoruz.
PostgreSQL - Psql Commands
Kullandığım bazı komut satırları aşağıdaki gibidir.
\c dbname | Belirtilen DB ye geçer |
\l | Database'leri listeler |
\dt | Tabloları listeler |
\dn | Şemaları listeler |
\df | Fonksiyonları listeler |
\dv | View'ları listeler |
\du | User bilgisi ve rollerini listeler |
SELECT version(); | Kullanılan PostgreSQL versiyon bilgisini gösterir |
\s | Yazılan bütün kod geçmiş satırlarını listeler |
\? | Bütün komutları ve ne işe yaradıklarını listeler |
\q | Container PostgreSQL ortamından ayrılır. |
CREATETABLE tableName ( id TEXT, name TEXT, lastname TEXT, phone TEXT); | Yani bir tablo oluştur |
CREATE ROLE roleName LOGIN; | Rol oluştur ve yetkisini ayarla |
SELECT*FROM tableName; | Select ifadesi ile sorgular yaz |
INSERTINTO tableName VALUES ('','', '',''); | Insert komut satırı |
Sık sık kullandıklarımı yukarıda liste olarak belirttim çok daha fazla komut ve bilgiye bu adresten ulaşabilirsiniz.
Kurulumları yaptık ve ardında psql ile komut satırlarını çalıştırdık şimdi masking konusuna devam edebiliriz.
Container a bağlandıktan sonra aşağıdaki adımları sırası ile yapmanız gerekmektedir.
DYNAMIC MASKING KURULUMU VE AYAĞA KALDIRILMASI
docker run -d --name devmaskdb -p 6540:5432 -e POSTGRES_PASSWORD=*** -e TZ=Europe/Istanbul registry.gitlab.com/dalibo/postgresql_anonymizer |
docker exec -it 566f8152e86a psql -U postgres |
CREATETABLE people ( id TEXT, firstname TEXT, lastname TEXT, phone TEXT); |
INSERTINTO people VALUES ('T1','Sarah', 'Conor','0609110911'); |
SELECT*FROM people; |
CREATE EXTENSION IF NOTEXISTS anon CASCADE; |
SELECT anon.start_dynamic_masking(); |
CREATE ROLE skynet LOGIN; |
SECURITY LABEL FOR anon ON ROLE skynet IS'MASKED'; |
SECURITY LABEL FOR anon ONCOLUMN people.phone IS'MASKED WITH FUNCTION anon.partial(phone,2,$$******$$,2)'; |
\c - skynet |
SELECT*FROM people; |
Yukarıdaki işlemler, anon isminde bir extension oluması, dynamic masking fonksiyonu ile aktifleştirilmesi rol oluşturulması ve bu rolün mask lı şekilde data görmesi sağlandı.
anon.start_dynamic_masking(); Bu fonksiyon çalıştırıldığında public database inde "mask" adında bir schema oluşturmakta ve tüm masking view'ları olarak içerisinde yönetmektedir.
Anonymizer paketi genel mantığı aslında sizlere özel fonksiyonlar veriyor ve bu fonksiyonlar ile masking süreçlerimizi yönetiyoruz. "anon" şeması içerisinde aşağıdaki gibi çok fazla fonksiyon bulunmaktadır.
Dynamic masking işlemlerinde view lar oluşturulmakta ve bu view lar özel maskeleme functionlarını çalıştırmaktadır.
SELECT people.id, people.firstname, people.lastname, anon.partial(people.phone, 2, '******'::text, 2) AS phone FROM people; |
Genel mantığı oluşturulan Skynet kullanıcısının sadece bu view a erişiminin sağlanması ve dolayısı ile dataları mask li şekilde görmesinin sağlanması.
Kullanıcıların rollerine göre masking süreçlerinde de belli izinleri vardır.
Serinin diğer makalesinde PgAdmin ve Dbeaver kullanarak kullanıcı oluşturup bu kullanıcının masking li datayı görmesini sağlamak.
Comments