İlk olarak, sorguları çalıştırmak için veritabanına bağlanabilmeniz gerekir. Bu elde edilebilir
REVOKE CONNECT ON DATABASE your_database FROM PUBLIC;
GRANT CONNECT
ON DATABASE database_name
TO user_name;
REVOKE
Gerekli çünkü
PUBLIC anahtar sözcüğü, ayrıcalıkların daha sonra yaratılabilecekler dahil olmak üzere tüm rollere verileceğini belirtir. KAMU, her zaman tüm rolleri içeren, dolaylı olarak tanımlanmış bir grup olarak düşünülebilir. Herhangi bir özel rol, doğrudan kendisine verilen ayrıcalıklara, şu anda üyesi olduğu herhangi bir rol için verilen ayrıcalıklara ve KAMU'ya verilen ayrıcalıklara sahip olacaktır.
Kullanıcınızı gerçekten DML ifadeleriyle sınırlandırmak istiyorsanız, yapmanız gereken daha çok şey var:
REVOKE ALL
ON ALL TABLES IN SCHEMA public
FROM PUBLIC;
GRANT SELECT, INSERT, UPDATE, DELETE
ON ALL TABLES IN SCHEMA public
TO user_name;
Bunlar, yalnızca bir şemaya sahip olduğunuzu varsayar (varsayılan olarak 'genel' olarak adlandırılır).
Jack Douglas'ın belirttiği gibi, yukarıdakiler yalnızca mevcut tablolar için ayrıcalıklar verir . Gelecekteki tablolarda da aynısını elde etmek için varsayılan ayrıcalıkları tanımlamanız gerekir :
ALTER DEFAULT PRIVILEGES
FOR ROLE some_role -- Alternatively "FOR USER"
IN SCHEMA public
GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO user_name;
Burada, some_role
tabloları yaratan user_name
, ayrıcalıklara sahip olan bir roldür . Bunu tanımlayarak, some_role
bir üye veya üye olarak giriş yapmış olmanız gerekir .
Ve son olarak, diziler için aynısını yapmanız gerekir (işaret etmek için PlaidFan sayesinde) - işte USAGE
ihtiyacınız olan ayrıcalık.
FOR some_role
daha sonra yarattığım tablolarda çalışmasını sağlamak için eksik olduğum ana kısım buydu. Ancaksome_role
, varsayılan yöneticipostgres
kullanıcısı olarak sorguyu uyguladıysam, oturum açmam gerekmedi .