psql Çalıştıran Kullanıcıları İzleme

psql-calistiran-kullanicilar

Başkalarının sizden gizli PostgreSQL client(psql) ile veritabanında neler yaptıklarını bilmek istiyorsanız, bu değişiklikleri size mail atan ufak bir script yazabilirsiniz.

Öncelikle sahte psql client’ı hazırlıyoruz. Bu kişinin yaptıklarını logluyor ve mail atıyor.

#!/bin/bash 
user=$(whoami) # $* ile psql için yazdığı parametreleri buraya aktarıyoruz.  
script -qc "main-psql $*" $user.log  
time=$(date -d now +%d/%m/%y\ %H:%M)  
cat $user.log | mail -s "psql alert by $user at $time " admin@mail.com  
rm $user.log  

Gerçek psql client’ının ismini değiştirip, kendi yazdığımız scripti gerçek client’mış gibi gösteriyoruz.

[root@travego ~]$ mv /bin/psql /bin/main-psql
[root@travego ~]$ ln -s /home/user/mypsql.sh /bin/psql 
[root@travego ~]$ psql -U postgres db1

Şeklinde kullanıldığında artık sizin her türlü işlemden haberiniz olacaktır.

Yapılan işlemler sonucu böyle bir mail gelecektir.

Script started on Mon 27 Aug 2012 01:58:37 PM EET  
main-psql (9.3.0, server 9.2.5)  
Type "help" for help.  
postgres=# create database test;  
CREATE DATABASE  
postgres=# \c test  
main-psql (9.3.0, server 9.2.5) You are now connected to database "test" as user "postgres".  
test=# create table foo(id serial);  
NOTICE: CREATE TABLE will create implicit sequence "foo_id_seq" for serial column "foo.id"  
CREATE TABLE  
test=# \dt+  
List of relations  
Schema | Name | Type | Owner | Size | Description  
--------+------+-------+----------+---------+------------- 
public | foo | table | postgres | 0 bytes |  
(1 row) 
test=#  
test=# insert into foo values (1);  
INSERT 0 1  
test=# select * from foo;  
id  
---- 
1  
(1 row) 
test=# \q  

Erkin Çakar

PostgreSQL DBA & Software developer