2013-05-16 13 views
5

Yeni bir kullanıcıya ihtiyacım var, ancak diğer mevcut kullanıcı/rolün sahip olduğu tüm ayrıcalıklara sahip olması gerekiyor.Postgres'te bir kullanıcının yinelenen rolünü nasıl oluşturabilirim

örn.

  • Kullanıcı A, yeni bir kullanıcı B oluşturulursa

, ben aynı ayrıcalıklara gerek ...

  • Kullanıcı A Table2
  • üzerine ayrıcalıkları yürütmek sahiptir Table1 üzerinde SEÇ ayrıcalıkları vardır

    • B kullanıcısı Table1 üzerinde SEÇ ayrıcalıkları
    • B kullanıcısı ÇALIŞTIR sahiptir vardır Table2 üzerinde ayrıcalıkları
    • ...

    Dont ask neden:/

    Aslında A kullanıcısı farklı tablolar, şemalar ve fonksiyonları üzerine özel ayrıcalıklara sahip; Bu nedenle, yeni kullanıcıya izinleri manuel olarak vermek için çok sıkıcı ve uzun süreç. Her türlü yardım iyi olabilir.

  • cevap

    0

    Kullanıcı A'nın ayrıcalıkları arasında dolaşmak ve Kullanıcı B'ye vermek için pgpsql kodunu yazmam gerekiyordu.

    create or replace function update_user_privileges() returns text as 
    $$ 
    declare 
    
         info record; 
         str text; 
    
    begin 
         /*Grant privileges to user B the same as with user A for a given table schema*/ 
         str:=''; 
         FOR info IN 
          select * from information_schema.table_privileges where table_schema='public' and grantee = 'A' 
         LOOP 
          /*append the tables' name, for which we are assigning privileges from user A to B*/ 
          str:= str ||info.table_name || ','; 
    
         /*this is the main statement to grant any privilege*/ 
         execute 'GRANT '|| info.privilege_type ||' on table public.'|| info.table_name || ' to B'; 
    
         END LOOP; 
    
        return str; 
    end 
    
    $$ language 'plpgsql'; 
    

    Kullanımı: kopyala/sandık için bu kodu bu işlevi yapıştırın ve sonra Eğer masa şema ve tablo-adları için adapte etmek zorunda **

    select update_user_privileges(); 
    

    yok. Umarım herkese yardım eder

    +0

    sütun, işlev, görünüm izinleri nedir? – ArunaFromLK

    1

    İlk olarak roles ve users'un aynı şey olduğunu anlayın. Aslında user denen bir şey yok, sadece LOGIN seçeneği ile bir ROLE var. Diğer roles numaralı roles numaralı telefona verilen

    .

    Rollerde üçüncü ayrıcalıklar devralınabilir.

    Yani sevdiği kullanıcıyı a oluşturduk varsayarak:

    CREATE ROLE A LOGIN; 
    GRANT SELECT ON table1 TO a; 
    GRANT EXECUTE ON FUNCTION xxx TO a; 
    

    Sen gibi ilk rolünü yansıtan bir ikinci rolü oluşturmak mümkün olmalıdır:

    CREATE ROLE b LOGIN; 
    GRANT a TO b; 
    
    +0

    Sen (haklarını devralır kim) Sadece rol B için 'rolü A. için INHERIT' belirtmek gerekmez. + 'INHERIT' bir varsayılan, bu yüzden açıkça yazmak gerek yok. –

    +0

    İyi bir nokta, sadece açık davranıyordum, ama muhtemelen sadece can sıkıcı ... * güncellemeler * –

    +0

    Ya rol ayrıcalıklarını devralmak istemiyorum ama A'dan B'ye tüm ayrıcalıkları vermek istemiyorum ve ayrıca A'nın ayrıcalıklarını değiştirebiliyorum. B – Saad

    4

    deneyin gibi bir şey:

    GRANT A TO B; 
    

    A rolünün tümünü B'ye verir.

    Ayrıntılar için, kılavuzun this bölümünü okuyun.

    +0

    Yetersiz. A bir süper kullanıcı ise, aşağıdakilere de ihtiyacınız vardır: SÜPERERER İLE ALTER KULLANICI; –

    +0

    Bildiri: Bu rol B rolünü A rolünün "devralmasına" yol açacaktır. Roller, bir çeşit miras ilişkisi ile birleştirilecektir. Bu aslında ayrıcalıkları çoğaltmayacak. –

    0

    Ubuntu kullanarak mevcut bir kullanıcı ile aynı yeni bir kullanıcı oluşturmak için aşağıdaki yöntemi kullandım.

    1. mevcut veritabanının tam dökümü alın.
    2. klonlamak istediğiniz kullanıcı ile her satırı ayıklamak için aşağıdaki komutu kullanın.

      kedi// yol/db_dump_file | grep "present_user_name" >> /path/to/extract.sql

    3. Bir metin düzenleyicisiyle extract.sql dosyasını açın ve mevcut kullanıcı adını yeni kullanıcı adıyla değiştirin.

    4. Kaldır istenmeyen sorguları (varsa).
    5. Artık yeni kullanıcı oluşturmak için yeni SQL sorgularınız var.

    Bu benim için sadece iyi çalıştı. Umarım bu birisine yardım eder.

    İlgili konular