Veritabanı sahibi için ayrıcalıklar; uygulama kullanıcısı


15

Hızlı sürüm:

Bir veritabanı sahibinin bu veritabanındaki tablolara erişmesine izin vermesini sağlamak için hangi komutu vermeliyim ve bu, söz konusu sahibin hesabından yapılabilir mi?


Daha Uzun Versiyon:

RDS üzerinde bir veritabanı oluşturuyorum. Amazon ile yapılandırdığım bir 'root' kullanıcısı var.

Amazon, otomatik olarak çok ayrıcalıklı ancak aslında bir süper kullanıcı olmayan 'rds_superuser' grup rolünü oluşturur.

Aşağıdaki gibi uygulama için bir veritabanı ve kullanıcı oluşturuyorum:

create database master_integration;
CREATE ROLE master_application LOGIN ENCRYPTED PASSWORD '...' VALID UNTIL 'infinity';
GRANT ALL ON DATABASE master_integration TO GROUP rds_superuser WITH GRANT OPTION;
GRANT ALL ON DATABASE master_integration TO GROUP master_application;

\c master_integration;
ALTER DEFAULT PRIVILEGES GRANT INSERT, SELECT, UPDATE, DELETE, TRUNCATE, REFERENCES, TRIGGER ON TABLES TO rds_superuser;

Bu komut dosyasını Craig Ringer'in bunu nasıl ele almam gerektiğine dair önerilerini yansıtacak şekilde güncelledim.

Uygulama (master_application kimlik bilgileriyle) bağlandığında tabloları oluşturur (ve dolayısıyla sahip olur).

Benim sorunum, yönetici (rootish) oturum açma sorguları çalıştırmak için kullanamazsınız çünkü bu kullanıcının masada ayrıcalıkları yok.

Bunu daha önce uygulama hesabından çalıştırarak çözebildim:

GRANT ALL privileges ON ALL TABLES IN SCHEMA public to rds_superuser;

Ancak, bağımlı bir kullanıcının yönetici kullanıcısına geri ödeme izni vermesi kötü görünüyor.

Yani ... Uygulamadan tabloları oluşturmadan önce veya sonra çalıştırabileceğim bir komut var mı? Bu veritabanı sahibinin veritabanı içindeki tablolara erişmesini sağlayacak mı?


varsayılan ayrıcalıkları değiştirmeyi yeniden denedikten sonra güncelleme ...

Bu hala tablolara erişim sağlamaz; Başka bir yerde önerildiğini görüyorum ve tam mantıklı, ama benim için çalışmıyor. Bir psql kabuğundan:

master_integration=> \ddp
                           Default access privileges
      Owner       | Schema | Type  |             Access privileges             
------------------+--------+-------+-------------------------------------------
 integration_root |        | table | integration_root=arwdDxt/integration_root+
                  |        |       | rds_superuser=arwdDxt/integration_root
(1 row)

master_integration=> \dp users
                           Access privileges
 Schema | Name  | Type  | Access privileges | Column access privileges 
--------+-------+-------+-------------------+--------------------------
 public | users | table |                   | 
(1 row)

Integration_root benim süper kullanıcı ish kullanıcı ve kullanıcılar benim veritabanı içinde bir tablo.


Güncelleme

Amazon'daki birinden oldukça yararsız bir yanıt aldım.

Benden master_application girişinden ALTER DEFAULT PRIVILEGES'i aramamı istediler. Bu muhtemelen işe yarayacak olsa da, soruma cevap vermeyecekti (bu sadece rds_superuser hesabından nasıl gerçekleşir).

Onlardan bunu netleştirmelerini istedim ve gittiler.

Yanıtlar:


9

Sen istiyorsun ALTER DEFAULT PRIVILEGES.

rds_superuserTüm yeni tablolara varsayılan erişim hakları verin .

Bu yalnızca. Öğesinden sonra oluşturulan tabloları etkiler ALTER. Mevcut tablolar için GRANThaklara sahip olmalısınız .


Bunu yapmaya çalışmıştım. Orijinal soruda bunu kötü ifade ettim, tam olarak yürütmekte olduğum komutu göstermek için düzenledim. Yanlış bir şey mi aldım?
Andy Davis

Sadece oluşturulan tablolar etkiler sonraALTER . Ne zaman yaptın? Mevcut tablolar için GRANThaklara sahip olmalısınız .
Craig Ringer

Varsayılan privs'i değiştirdim, sonra tabloları oluşturdum. Tekrar deneyeceğim, belki bir hata yaptım.
Andy Davis

Sorunu çözmesi gereken komut gibi görünüyor olsa da, hala bu konuda şans yok. Tablolardan birinden \ ddp ve \ dp çıktılarını içerecek şekilde komutu güncelledim.
Andy Davis

Çok garip. Sorunu normal (RDS olmayan) PostgreSQL'de yeniden oluşturabilir misiniz?
Craig Ringer

0

Genel şemanın tüm kullanıcılar tarafından görülebilir olması gerekir. Genel şema haklarını yalnızca bir grupla sınırlandırmamalısınız.

Yani, eğer kullanmazsanız:

GRANT ALL ON SCHEMA public TO GROUP rds_superuser WITH GRANT OPTION;

Herkese açık şema ile tüm hesaplarda güvenle çalışabilirsiniz.

Belirli hesapların genel şema tablolarınızı dağıtmasını istemiyorsanız, yeni bir rol oluşturun (uygulamanızın kullanıcıları için) ve genel şema içindeki bu özel rolün haklarını iptal edin. Gibi bir şey:

CREATE USER mywebuser WITH PASSWORD '*****';
REVOKE ALL PRIVILEGES ON SCHEMA public FROM mywebuser;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO mywebuser; (or whatever rights you need to provide)

Yapmaya çalıştığınız gibi değil.


Ha? A GRANThiçbir zaman erişim haklarını azaltamaz . İkna olmadım. Bir şemadaki hakların da o şemadaki yeni tablolar tarafından miras alınmadığına dikkat edin, bu nedenle publicşemaya erişimin olması tablodaki tabloları kullanabileceğiniz anlamına gelmez.
Craig Ringer

Sonunda bunu denedim ve duruma yardımcı olmuyor.
Andy Davis

@Aleandros'un bahsettiği Hibe'yi ortadan kaldırmak için soruyu düzenledim. Sorun gibi görünmüyordu, ama bence dikkat dağıtıcıydı.
Andy Davis
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.