Oracle'da PL / SQL yapan Uygulama Geliştiricileri için Güvenlik


13

Oracle'da Şema düzeyinde ayrıcalıkların yokluğunu nasıl ele alıyorsunuz? Oracle'ın güvenlik mimarisi, yalnızca nesne düzeyinde ayrıcalıklara ihtiyaç duyan uygulamalar için iyi çalışır ve az kısıtlamaya ihtiyaç duyan DBA'lar için iyi çalışır. Bununla birlikte, bir ön uç uygulaması ve çoklu şemada PL / SQL ile geliştirme yapan programcılar için mimaride büyük bir boşluk var gibi görünüyor. İşte benim dezavantajları ile bazı seçeneklerim:

  1. Her programcının kendi şemasında geliştirme yapmasını sağlayın. DBA, ihtiyaç duyan programcılara nesne düzeyinde ayrıcalıklar tanıyacaktır. Herhangi bir paket geliştirme bir DBA tarafından yapılmalıdır. En büyük dezavantajı, programcıların veritabanını, veritabanı performansına zarar vermek için bir bit grubu gibi kullanmasıdır. Programcıların veritabanında gelişmesini istiyorum, ancak bu yöntem büyük ölçüde cesaret kırıcı olacaktır.

  2. Her programcıya, geliştirmeleri gereken düzinelerce şema için kullanıcı adı / şifre verin. Bu uygulama şemasına prosedürler, tablolar vb. Oluşturmak için izin verin. Bu yaklaşımla ilgili bazı dezavantajlar, programcıların birden fazla oturum açması ve nadiren kendileri olarak giriş yaptılar. Çapraz şema geliştirme de zordur.

  3. Programcılara, geliştirmeleri gereken her şema için proxy kimlik doğrulama ayrıcalıkları verin. Bu, proxy ayrıcalığı dışındaki ayrıcalıkları vermek zorunda kalmadan kendilerinin oturum açmasını sağlar. Dezavantajları arasında, proxy'leri her şema için ayrı bağlantı sağlamak zorunda olan programcılar, bağlantıların sürekli olarak değişmesi gerektiğinden çapraz şema geliştirme daha zahmetlidir ve geçiş kimlik doğrulamasıyla ortak veritabanı bağlantıları kullanan paketler proxy bağlantıları içinde derlenmez.

  4. Her programcıya DBA ayrıcalıkları verin. - Buradaki dezavantaj güvenlik. Hiçbir şema programcısı herhangi bir şemadan uzak tutulamaz ve herhangi bir programcı başka bir programcıyı (DBA) taklit edebilir.

Her programcıya SELECT / INSERT / CREATE / etc'yi vermek için eksik bir seçenek var gibi görünüyor. geliştirmeleri gereken şema üzerinde ayrıcalıklar. Bir bağlantı kullanarak işlerini yapmak için kendileri olarak giriş yapıyorlar. Şemadaki erişime sahip oldukları yeni nesneler hemen kullanılabilir.

Bir şey mi kaçırıyorum? PL / SQL geliştirme yapan uygulama programcılarını nasıl ele alırsınız?


3
+1 harika soru - bu, entegre kaynak kontrolü eksikliğiyle birleştiğinde, çok geliştirici ortamında Oracle ile önemli bir sorundur.
ScottCher

Yanıtlar:


11

Bir Oracle mağazasında çalıştığım günlerde, 'prod' (üretim) sunucusundan farklı güvenlik kısıtlamaları olan belirli bir 'dev' (geliştirme) sunucumuz vardı. Geliştiriciler ihtiyaç duydukları her şeyi yapabilirdi ve daha sonra üretim sunucusuna başvurmak için gerekli komut dosyalarını DBA'ya dağıtırdık.

Kritik sistemlerimizde (sınıfları ve öğrencileri izlemek için SCT Banner ve Oracle Financials), ayrıca 'test' ve 'tohum' sunucuları da vardı. Test, geliştiriciden eşyaya geçmeden önce kullanıcı kabul testi içindi; 'seed' yazılımın stok kurulumuydu, bu yüzden bir hata bulmalıyız, SCT veya Oracle'ın yazılımından tanıttığımız veya geldiğimiz bir şey olup olmadığını doğrulayabiliriz.


+1 Genel kullanım veritabanımızla, geliştiriciler çok çeşitli projeler üzerinde çalışırlar, bu nedenle en az ayrıcalık ilkesi, geliştirme sunucusuna bile tam erişim sağlamaz. ( en.wikipedia.org/wiki/Principle_of_least_privilege )
Leigh Riffel

@Leigh - Muhtemelen açıklığa kavuşturmalıydım ... dev sunucusu çoğunlukla # 1 olarak sahip olduğunuz şeyin altına düştü, # 4 değil
Joe

1
DEV veritabanlarının Üretimden kopyalandığını, daha sonra geliştiricilerin kısıtlama olmadan çalışmasını sağlamak için karmaşık hibeler olduğunu hatırlıyorum. Sonunda her geliştiriciye kendi veritabanı ve DBA erişimi vermek daha kolaydı. Daha sonra bir yayın döngüsü aracılığıyla Dev'deki değişiklikleri besler. Sanallaştırma ile artık daha kolay olmalı.
Sumnibot

@Sumnibot - Bakım, yedekleme, vb. Yüklemek her geliştirici için izin vermek yerine ayrı bir veritabanı kurmak daha kolaydır! Bunların her birini güncel tutmak için gereken süreye ek olarak, lisanslama maliyetleri önemli gibi gözüküyor veya kurumsal sürümü vermediniz mi?
Leigh Riffel

1
Benim için somut bir cevap içermiyor.
Michael-O

3

Nesnelerin koleksiyonlarını ilişkilendirmek için rolleri kullanın, sonra rollere erişim verin

HİBE deyimi DBA sağlar:

Belirli bir nesne için kullanıcılar, roller ve KAMU için nesne ayrıcalıkları. Tablo 18-2'de nesne ayrıcalıkları ve yetkilendirdikleri işlemler listelenmektedir.

Bir role nesne ayrıcalıkları verilebildiğinden, bir şemadaki tüm tablolara rol erişimi vermek nispeten kolaydır:

sql> spool privs.sql
sql> seçin 'scott üzerinde seçim ver' || table_name || ' role_select; ' dba_tables dan burada owner = 'SCOTT';
sql> @ privs.sql
sql> john, sam, peter'e role_select ver;

Bu, GRANT CREATE TABLEuygun şema kullanıcısı tarafından verilen rolle birlikte, geliştiricilerin tabloları seçip oluşturabileceği anlamına gelir. Oluşturulan bir tablonun komut dosyasının tekrar çalıştırılmasını gerektirdiği için mükemmel değildir , ancak WITH GRANT OPTIONher geliştiricinin oluşturdukları tabloya uygun role erişim verebileceğini önerir.

Bu , uygun verme sürecini yürütebilecek DDL düzey tetikleyicileri oluşturabileceğinizi gösterir, ancak önemli miktarda test yapılması açıkça gerekli olsa da, tablo oluşturma ifadesinin otomatik olarak uygun rollere uygun izinler vermesi mümkün olmalıdır.

Düzenle --

GRANT'a göre , CREATE TABLEayrıcalık:

Yetkilendirilenin şemasında bir tablo oluşturun.

Böylece, onları masa, alter tablo vb .. oluşturmak vererek dan onlar uygun kullanıcı sanki doğru kullanıcı, onlar kullanıcının şema bu erişim mümkün olmalıdır.


Başvurduğunuz metodolojiyi çok başarılı olmadan denedim; ancak bunun kapsamlı testlerle yapılabileceğinin doğru olduğuna inanıyorum. Sorun, bunun yalnızca geliştiricilerin tablolarda erişimi seçmesine izin vermesidir. Tablo oluşturmayı doğrudan veya bir rol aracılığıyla vermek, yalnızca kendi şemalarında tablo ayrıcalıkları oluşturmalarını sağlar. Hala kendi şemaları dışında herhangi bir şemada tablo, yordam, paket, tetikleyici veya başka bir nesne oluşturamazlar mı, yoksa geliştirme sırasında bile yalnızca kendi şemalarında nesne oluşturmaları gerektiği anlamına mı geliyor?
Leigh Riffel

@Leigh Ayrıntılar ile güncellendi.
Brian Ballsun-Stanton

Oracle bu şekilde çalışmaz. Bunu deneyin: "ThisIsMy1Password" tarafından tanımlanan kullanıcı u1'i oluşturun; "ThisIsMy1Password" ile tanımlanan kullanıcı u2 oluşturun; u1'e dba verin; u2'ye bağlanma hibe; connect u1 / "ThisIsMy1Password" @db; u2'ye tablo oluştur; connect u2 / "ThisIsMy1Password" @db; tablo u1.t1 (c1 varchar2 (10)) oluşturun; Son adım yetersiz ayrıcalıklarla başarısız olur.
Leigh Riffel
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.