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.