Veritabanı kullanıcıları, rolleri ve ayrıcalıkları
Aşağıdaki veritabanı rollerine sahip bir patrona
veritabanı kullanıcısı oluşturmanızı öneririz:
- Analiz için kullanılan herhangi bir şemaya veya tabloya okuma erişimi için
analytics
. - İsteğe bağlı olarak Patrona eylemleri için kullanılan tablolara yazma erişimi için
patrona_actions
. - İsteğe bağlı olarak Patrona model kalıcılığı için kullanılan şemaya yazma erişimi için
patrona_model_persistence
.
Ayrıcalıklarınızı kullanım durumlarına göre rollere ayırmak, gelecekte ayrıcalıkları yönetmeyi kolaylaştırır (özellikle çoklu kiracılı durumlarda). Örneğin:
- Veritabanınızdaki analiz tablolarına salt okunur erişime ihtiyaç duyan veri yığınınızdaki diğer BI araçları için aynı
analytics
rolünü kullanabilirsiniz. patrona_actions
için yazma erişimini etkilemedenpatrona_model_persistence
için yazma erişimini iptal edebilirsiniz.
Minimum veritabanı ayrıcalıkları
Patrona'da tablolarınızı görüntülemek ve sorgulamak için Patrona'nın veritabanı kullanıcısına şunları vermeniz gerekir:
- Veritabanınıza
CONNECT
. - Patrona'da kullanmak istediğiniz herhangi bir şemaya veya tabloya
SELECT
ayrıcalıkları.
Bu ayrıcalıkları düzenlemek (ve ileride bakımı kolaylaştırmak) için:
analytics
adlı bir veritabanı rolü oluşturun.patrona
adlı bir veritabanı kullanıcısı oluşturun.patrona
kullanıcısınıanalytics
rolüne ekleyin.analytics
rolüne ayrıcalıklar ekleyin.
Örneğin, bir Postgres veritabanı kullanıyorsanız, bir yönetici olarak oturum açar ve SQL ifadelerini çalıştırırsınız:
-- "analytics" adında bir rol oluşturun.
CREATE ROLE analytics WITH LOGIN;
-- Role CONNECT ayrıcalığını ekleyin.
GRANT CONNECT ON DATABASE "your_database" TO analytics;
-- "patrona" adında bir veritabanı kullanıcısı oluşturun.
CREATE USER patrona WITH PASSWORD "your_password";
-- Rolü patrona kullanıcısına verin.
GRANT analytics TO patrona;
-- Role sorgu ayrıcalıkları ekleyin (seçenek 1-4):
-- Seçenek 1: Analytics rolüne sahip kullanıcıların TÜM VERİLERİ sorgulamasına izin vermek için aşağıdaki satırın yorumunu kaldırın (Postgres 14 veya üstü sürümlerde. Bkz. [Önceden Tanımlanmış Roller](https://www.postgresql.org/docs/current/predefined-roles.html#PREDEFINED-ROLES)).
-- GRANT pg_read_all_data TO analytics;
-- Seçenek 2: Analytics rolüne sahip kullanıcıların VERİTABANINDAKİ her şeyi sorgulamasına izin vermek için aşağıdaki satırın yorumunu kaldırın.
-- GRANT USAGE ON DATABASE "your_schema" TO analytics;
-- GRANT SELECT ON DATABASE "your_schema" TO analytics;
-- Seçenek 3: Analytics rolüne sahip kullanıcıların belirli bir ŞEMADAKİ her şeyi sorgulamasına izin vermek için aşağıdaki satırın yorumunu kaldırın.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON ALL TABLES IN SCHEMA "your_schema" TO analytics;
-- Seçenek 4: Analytics rolüne sahip kullanıcıların belirli bir TABLODAKİ her şeyi sorgulamasına izin vermek için aşağıdaki satırın yorumunu kaldırın.
-- GRANT USAGE ON SCHEMA "your_schema" TO analytics;
-- GRANT SELECT ON "your_table" IN SCHEMA "your_schema" TO analytics;
Patrona'yı nasıl kullandığınıza bağlı olarak, ek olarak şunları da verebilirsiniz:
- Geçici tablolar oluşturmak için
TEMPORARY
ayrıcalıkları. - Saklı yordamları veya kullanıcı tanımlı işlevleri kullanmak için
EXECUTE
ayrıcalıkları.
Bir role ayrıcalık verdiğinizde, bu role sahip tüm kullanıcıların bu ayrıcalıklara sahip olacağını unutmayın.
Tüm veritabanı ayrıcalıklarını verme
Veritabanı ayrıcalıklarınızı henüz yapılandırmak istemiyorsanız:
- Bir
patrona
veritabanı kullanıcısı oluşturun. patrona
kullanıcısına veritabanına tüm ayrıcalıkları verin.
-- "patrona" adında bir veritabanı kullanıcısı oluşturun.
CREATE USER patrona WITH PASSWORD "your_password";
-- Kullanıcıya veritabanındaki her şeye okuma ve yazma ayrıcalıkları verin.
GRANT ALL PRIVILEGES ON "database" TO patrona;
Bu, geliştirme veya test için yerel bir veritabanına bağlanıyorsanız iyi bir seçenektir.
Eylemleri etkinleştirmek için ayrıcalıklar
Eylemler, Patrona'nın veritabanınızdaki belirli tablolara geri yazmasına olanak tanır.
Minimum veritabanı ayrıcalıklarına ek olarak, eylemlerle kullanılan herhangi bir tabloya yazma erişimi vermeniz gerekir:
patrona_actions
adlı yeni bir rol oluşturun.- Role, Patrona eylemleriyle kullanılan herhangi bir tabloya
INSERT
,UPDATE
veDELETE
ayrıcalıkları verin. patrona_actions
rolünüpatrona
kullanıcısına verin.
-- Patrona eylemleri için veritabanı ayrıcalıklarını paketlemek için bir rol oluşturun.
CREATE ROLE patrona_actions WITH LOGIN;
-- Patrona eylemleriyle kullanılan TABLOYA yazma ayrıcalıkları verin.
GRANT INSERT, UPDATE, DELETE ON "your_table" IN SCHEMA "your_schema" TO patrona_actions;
-- Rolü patrona kullanıcısına verin.
GRANT patrona_actions TO patrona;
Model kalıcılığını etkinleştirmek için ayrıcalıklar
Model kalıcılığı, Patrona'nın sorgu sonuçlarını veritabanınızdaki belirli bir şemaya kaydetmesine olanak tanır. Patrona'nın veritabanı kullanıcısının, model önbelleğe alma için ayrılmış şemayı ayarlamak için CREATE
ayrıcalığına ve ayrıca bu şemaya yazma erişimine (INSERT
, UPDATE
, DELETE
) ihtiyacı olacaktır.
Minimum veritabanı ayrıcalıklarına ek olarak:
patrona_model_persistence
adlı yeni bir rol oluşturun.- Role veritabanına
CREATE
erişimi verin. - Role, model kalıcılığı için kullanılan şemaya
INSERT
,UPDATE
veDELETE
ayrıcalıkları verin. patrona_model_persistence
rolünüpatrona
kullanıcısına verin.
-- Patrona model kalıcılığı için veritabanı ayrıcalıklarını paketlemek için bir rol oluşturun.
CREATE ROLE patrona_model_persistence WITH LOGIN;
-- Veritabanınıza CREATE erişimi vermek istemiyorsanız,
-- modelleme kalıcılığını etkinleştirmeden önce şemayı manuel olarak ekleyin.
GRANT CREATE ON "database" TO patrona_model_persistence;
-- Model kalıcılığı için kullanılan ŞEMAYA yazma ayrıcalıkları verin.
GRANT USAGE ON "your_schema" TO patrona_model_persistence;
GRANT INSERT, UPDATE, DELETE ON "your_model's_table" IN SCHEMA "your_schema" TO patrona_model_persistence;
-- Rolü patrona kullanıcısına verin.
GRANT patrona_model_persistence TO patrona;
Yüklemeleri etkinleştirmek için ayrıcalıklar
Desteklenen veritabanlarına CSV yükleyebilirsiniz. Patrona'nın veritabanı kullanıcısı, yüklemeleri depolamak istediğiniz şemaya yazma erişimine (INSERT
, UPDATE
, DELETE
) sahip olmalıdır.
Öncelikle yüklemeleri depolamak için bir şema oluşturmanız (veya mevcut bir şema kullanmanız) ve Patrona'ya bu şemayı yüklemeleri depolamak için kullanmak istediğinizi söylemeniz gerekir.
Minimum veritabanı ayrıcalıklarına ek olarak:
patrona_uploads
adlı yeni bir rol oluşturun.- Role, yüklemeleri depolamak istediğiniz şemaya
INSERT
,UPDATE
veDELETE
ayrıcalıkları verin. patrona_uploads
rolünüpatrona
kullanıcısına verin.
-- Yüklemeler için veritabanı ayrıcalıklarını paketlemek için bir rol oluşturun.
CREATE ROLE patrona_uploads WITH LOGIN;
-- Yüklemeler için kullanılan ŞEMAYA yazma ayrıcalıkları verin.
GRANT USAGE ON "your_schema" TO patrona_uploads;
GRANT INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA "your_schema" TO patrona_uploads;
-- Rolü patrona kullanıcısına verin.
GRANT patrona_uploads TO patrona;
Çoklu kiracılı izinler
SQL erişimine ihtiyaç duyan müşteriler için çoklu kiracılı izinler ayarlıyorsanız, müşteri başına bir veritabanı bağlantısı oluşturabilirsiniz. Bu, her müşterinin veritabanına kendi veritabanı kullanıcısını kullanarak bağlanacağı anlamına gelir.
Diyelim ki Tangerine ve Lemon adında müşterileriniz var:
patrona_tangerine
vepatrona_lemon
adlı yeni veritabanı kullanıcıları oluşturun.CONNECT
ayrıcalığına sahip bircustomer_facing_analytics
rolü oluşturun.- Her müşterinin kullanım durumuna özel ayrıcalıkları paketlemek için roller oluşturun. Örneğin:
- Kişilerin Tangerine şemasına karşı sorgu yapması ve saklı yordamlar oluşturması için okuma ayrıcalıklarını paketlemek üzere
tangerine_queries
. - Kişilerin Lemon şemasındaki tabloları sorgulaması için okuma ayrıcalıklarını paketlemek üzere
lemon_queries
. - Lemon şemasındaki bir Lemonade tablosunda eylemler oluşturmak için gereken yazma ayrıcalıklarını paketlemek üzere
lemon_actions
.
- Kişilerin Tangerine şemasına karşı sorgu yapması ve saklı yordamlar oluşturması için okuma ayrıcalıklarını paketlemek üzere
- Her kullanıcıyı kendi rollerine ekleyin.
-- Müşteri başına bir veritabanı kullanıcısı oluşturun.
CREATE USER patrona_tangerine WITH PASSWORD "orange";
CREATE USER patrona_lemon WITH PASSWORD "yellow";
-- Tüm müşteriler için ayrıcalıkları paketlemek için bir rol oluşturun.
CREATE ROLE customer_facing_analytics;
GRANT CONNECT ON DATABASE "citrus" TO customer_facing_analytics;
GRANT customer_facing_analytics TO patrona_tangerine, patrona_lemon;
-- Müşteri Tangerine için analiz okuma erişimini paketlemek için bir rol oluşturun.
CREATE ROLE tangerine_queries;
GRANT USAGE ON SCHEMA "tangerine" TO tangerine_queries;
GRANT SELECT, EXECUTE ON ALL TABLES IN SCHEMA "tangerine" TO tangerine_queries;
GRANT tangerine_queries TO patrona_tangerine;
-- Müşteri Lemon için analiz okuma erişimini paketlemek için bir rol oluşturun.
CREATE ROLE lemon_queries;
GRANT USAGE ON SCHEMA "lemon" TO lemon_queries;
GRANT SELECT ON ALL TABLES IN SCHEMA "lemon" TO lemon_queries;
GRANT lemon_queries TO patrona_lemon;
-- Müşteri Lemon için Patrona eylemlerine ayrıcalıkları paketlemek için bir rol oluşturun.
CREATE ROLE lemon_actions;
GRANT INSERT, UPDATE, DELETE ON TABLE "lemonade" IN SCHEMA "lemon" TO lemon_actions;
GRANT lemon_actions TO patrona_lemon;
Müşteri başına kullanım durumlarına göre ayrıcalıkları rollere ayırmanızı öneririz. Bu şekilde, müşteriler arasında ortak ayrıcalıkları yeniden kullanabilirken, yine de müşteri başına ayrıntılı ayrıcalıklar verebilir veya iptal edebilirsiniz. Örneğin:
- Müşteri Tangerine'in Tangerine şemasını başka bir analiz aracından sorgulaması gerekiyorsa, bu aracı kurarken
tangerine_queries
rolünü kullanabilirsiniz. - Müşteri Lemon, artık Patrona eylemlerini kullanmak istemediğine karar verirse (ancak yine de soru sormak istiyorsa),
lemon_actions
rolünü basitçe iptal edebilir veya bırakabilirsiniz.