Ana içeriğe geç

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:

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 etkilemeden patrona_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 ve DELETE 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 ve DELETE 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 ve DELETE 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 ve patrona_lemon adlı yeni veritabanı kullanıcıları oluşturun.
  • CONNECT ayrıcalığına sahip bir customer_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.
  • 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.

Daha fazla okuma