- PostgreSQL kurulduğunda güvenlik ayarları olarak sadece localhost'u dinlemektedir.
- PostgreSQL'in dinlediği IP listesi postgresql.conf dosyası içinde bulunur. Bu alan ön tanımlı olarak localhost olarak belirlenmiştir.
- Bu dosyanın değiştirilmesi işleminden sonra Postgresql servisinin yeniden başlatılması gerekir.
systemctl restart postgresql
-
Postgresql'de erişim hakları pg_hba.conf dosyasında tanımlanır.
-
pg_hba.conf dosyasında yapılan değişikliklerin PostgreSQL servisinin etkinleşmesi için "pg_reload_conf();" komutu kullanılır. Bu sayede işletim sistemine gitmeden (systemctl) işlem yapılabilir.
- İstemci erişimi denetimi bu dosyayla sağlanır.
- Varsayılanda sadece localhost erişimine izin verir. İlk kurulumda, dışarıdan erişime izin vermez.
- Her bir satırı 1 kayıttır.
- replication erişimi ayrı tanımlanır.
- Doküman
- güvenlik duvarı gibi kısıtla/izin ver ifadesiyle eşleşen ilk kayıta göre işlem yapar. psql satırından yerini öğrenmek için,
show hba_file;
# TYPE DATABASE USER ADDRESS METHOD [OPTIONS]
local database user auth-method [auth-options]
host database user CIDR-address auth-method [auth-options]
hostssl database user CIDR-address auth-method [auth-options]
hostnossl database user CIDR-address auth-method [auth-options]
host database user IP-address IP-mask auth-method [auth-options]
hostssl database user IP-address IP-mask auth-method [auth-options]
hostnossl database user IP-address IP-mask auth-method [auth-options]
- USER:
- all: tüm kullanıcılar
- user:
- +group: bir rol
- @file: bir dizindeki dosyadaki kayıtlara göre
- trust : Kullanıcıların veritabanına parolasız bağlanmasını sağlar.
- rejet : Erişimi reddeder.
- md5 : md5 formatında şifrelenmiş parola ile giriş gerektirir.
- scram-sha-256: (v10 la birlikte geldi)[+] : sha-256 şifreleme
- crypt : Bağlantı için crypt formatında şifrelenmiş parola girmesi gerekir.
- password : Düz metin parola ile girişe izin verir.
- pam : İşletim sistemi tarafından sağlanan Pluggable Authentication Modules (PAM) servisini kullanarak bağlanmak için.
- ldap : bir LDAP sunucudan kullanıcı bilgilerini kullanmak için
- radius : bir RADIUS sunucudan kullanıcı bilgilerini kullanmak için
- cert : SSL istemci sertifikalarını kullanarak bağlanmak için.
- ident : işletim sistemi kullanıcısı, tcp port üzerinden bağlantı için
- peer: işletim sistemi kullanıcısı, socket bağlantısı için
- peer, ident: bir sistem kullanıcısını bir db kullanıcısına eşlemek mümkün.
pg_ident.conf
# MAPNAME SYSTEM-USERNAME PG-USERNAME
birmap fatma appuser
pg_hba.conf
local all all peer map=birmap
name=value
- SSL/TLS
- Ayar dosyalarında belirtilir.
- Güvenli olmayan bağlantı da eş zamanlı kullanılabilir.
- VT bağlanma kısıtlama
create database othervalueabledb;
UPDATE pg_database SET datallowconn='false'
WHERE datname='othervalueabledb';
UPDATE 1
\c othervalueabledb
FATAL: database "othervalueabledb" is not currently accepting connections
Previous connection kept
# tüm kullanıcıları listeler
\du
create user biruser;
create role birrole;
\h create user
drop role/user biruser/birrole;
# roleler ve userlar kaldırılmadan önce sahip olduklarının devredilmesi veya kaldırılması gerekir.
REASSIGN OWNED BY biruser TO ikinciuser;
DROP OWNED BY biruser;
bir rolü diğerine de verme
\h grant
GRANT biruser TO ikinciuser;
REVOKE biruser FROM ikinciuser;
# yetkileri görmek
\dp
- userlar role gibi davranabilir.
Örnek:
postgres=# CREATE ROLE baskauser NOLOGIN;
CREATE ROLE
postgres=# ALTER ROLE baskauser CREATEDB;
ALTER ROLE
postgres=# CREATE ROLE ucuncuuser LOGIN PASSWORD 'abcd12';
CREATE ROLE
postgres=# CREATE ROLE ikincirole LOGIN;
CREATE ROLE
postgres=# GRANT baskauser TO ikincirole;
GRANT ROLE
- grant edilmiş rollerin yetkilerini kullanmak için role geçmen gerek.
# baskauser'ın createdb yetkisi var.
psql -U ikincirole
create database hede124;
ERROR: permission denied to create database
set role to baskauser;
create database hede124;
CREATE DATABASE
# eski role dönmek için
postgres=> RESET ROLE;
RESET
- Önemli viewler:
pg_user
pg_roles
pg_shadow
create table t1 ( a int, b int);
insert into t1
values (1,1),(2,2);
# rates tablosunda description alanı için
grant select (a) on t1 to dbuser;
grant update (a) on t1 to dbuser;
- Satır düzeyinde güvenlik (Row level security-RLS), belirli veri satırlarının bir veya daha fazla rol için nasıl görüntüleneceğini ve çalıştığını kontrol etmek için ilkeler tanımlamak.
- Bir tabloya uygulayabileceğiniz ek bir filtredir. Bir kullanıcı bir tablo üzerinde işlem yapmaya çalıştığında, sorgu kriterlerinden veya diğer filtrelemelerden önce bu filtre uygulanır ve veriler güvenlik politikanıza göre daraltılır veya reddedilir.
- SELECT, INSERT, UPDATE ve DELETE gibi belirli komutlar için satır düzeyinde güvenlik politikaları oluşturabilir, TÜM komutlar için belirtebilirsiniz.
- superuser dışında herkesi etkiler.
etkinleştirmek için
ALTER TABLE birtablo ENABLE ROW LEVEL SECURITY;
- Veritabanına bağlanma:
GRANT CONNECT ON DATABASE database_name TO username;
Grant USAGE on schema
# bunu vermezseniz alttaki nesnelere erişemez.
GRANT USAGE ON SCHEMA schema_name TO username;
# Grant on all tables for DML statements: SELECT, INSERT, UPDATE, DELETE:
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA schema_name TO username;
# Grant all privileges on all tables in the schema:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA schema_name TO username;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA schema_name TO username;
VT2deki tüm yetkiler
GRANT ALL PRIVILEGES ON DATABASE database_name TO username;
VT oluşturmak grant yetkisi:
ALTER USER username CREATEDB;
- superuser yap
ALTER USER myuser WITH SUPERUSER;
- superuser yetkisini kaldır
ALTER USER username WITH NOSUPERUSER;
- Yukarıdaki sadece varolan nesneleri etkiler. Bundan sonraki tablolar için.
ALTER DEFAULT PRIVILEGES FOR USER usernameIN SCHEMA schema_name GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO username;