Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Azure HorizonDB'nize erişimi yönetmek, güvenlik ve uyumluluğu korumanın önemli bir parçasıdır. Bu makalede, izinleri denetlemek ve erişim yönetimi için en iyi yöntemleri uygulamak için PostgreSQL rollerinin ve Azure özelliklerinin nasıl kullanılacağı açıklanmaktadır.
Rol yönetimi
Azure HorizonDB veritabanı erişim izinlerini büyük ölçekte yönetmenin en iyi yolu roles kavramını kullanmaktır. Rol, veritabanı kullanıcısı veya veritabanı kullanıcısı grubu olabilir. Roller, veritabanı nesnelerine sahip olabilir ve bu nesneler üzerinde ayrıcalıkları diğer rollere atayarak kimlerin hangi nesnelere erişimi olduğunu denetleyebilir. Bir rolün üyeliğini başka bir role verebilirsiniz; bu, üye rolün başka bir role atanmış ayrıcalıkları kullanmasına olanak tanır. Azure HorizonDB, doğrudan veritabanı kullanıcılarına izin vermenizi sağlar. İyi bir güvenlik uygulaması olarak, en düşük uygulama ve erişim gereksinimlerine göre belirli izin kümeleriyle roller oluşturun. Her kullanıcıya uygun rolleri atayın. Veritabanı nesnelerine erişmek için en az ayrıcalık modelini zorlamak için rolleri kullanın.
PostgreSQL'in oluşturduğu yerleşik rollere ek olarak, Azure HorizonDB kümesi üç varsayılan rol içerir. Aşağıdaki komutu çalıştırarak bu rolleri görebilirsiniz:
SELECT rolname FROM pg_roles;
Roller şunlardır:
azure_pg_adminazuresuadministrator role
Azure HorizonDB kümesini oluşturduğunuzda, bir administrator roleiçin kimlik bilgilerini sağlarsınız. Daha fazla administrator role oluşturmak için bunu kullanın.
Örneğin, adlı exampleuserbir kullanıcı veya rol oluşturabilirsiniz.
CREATE USER exampleuser PASSWORD password123;
Uygulama için yönetici rolünü kullanmayın.
Bulut tabanlı PaaS ortamlarında Azure HorizonDB süper kullanıcı hesabına erişim yalnızca denetim düzlemi işlemleriyle sınırlıdır.
azuresu rolü süper kullanıcı ayrıcalıklarına sahiptir, ancak Azure HorizonDB kümesi yönetici hesabı azuresu rolünün parçası değildir.
azure_pg_admin rolü, sözde süper kullanıcı hesabı olarak mevcuttur. Kümeyi oluştururken yapılandırdığınız yönetici oturum açma hesabı, azure_pg_admin rolünün bir üyesidir.
Kümenizdeki rollerin listesini düzenli aralıklarla denetleyebilirsiniz.
Örneğin, istemcisini psql kullanarak bağlanabilir ve diğer rolleri oluşturma, veritabanı oluşturma, çoğaltma ve daha fazlası gibi ayrıcalıklarla birlikte tüm rolleri listeleyen tabloyu sorgulayabilirsiniz pg_roles .
select * from pg_roles where rolname='demouser';
-[ RECORD 1 ]--+---------
rolname | demouser
rolsuper | f
rolinherit | t
rolcreaterole | f
rolcreatedb | f
rolcanlogin | f
rolreplication | f
rolconnlimit | -1
rolpassword | ********
rolvaliduntil |
rolbypassrls | f
rolconfig |
oid | 24827
Important
Azure HorizonDB, CAST komutları oluşturmanıza olanak tanır.
CREATE CAST deyimini çalıştırmak için kullanıcının azure_pg_admin rolünün bir üyesi olması gerekir. Şu anda, oluşturduktan sonra bir CAST'i silemezsiniz.
Azure HorizonDB yalnızca WITH FUNCTION ve WITH INOUT seçeneklerini kullanan CAST komutlarını destekler. Bu WITHOUT FUNCTION seçenek desteklenmez.
Şema erişimini denetleme
Azure HorizonDB'de yeni oluşturulan veritabanları, veritabanının genel şemasında tüm veritabanı kullanıcılarına ve rollere nesne oluşturma yeteneği veren varsayılan bir ayrıcalık kümesi içerir. Uygulama kullanıcısının Azure HorizonDB örneğinizde oluşturduğunuz veritabanlarına erişimini daha iyi sınırlamak için bu varsayılan genel ayrıcalıkları iptal etmeyi göz önünde bulundurun. Bu ayrıcalıkları iptal ettikten sonra veritabanı kullanıcılarına daha ayrıntılı bir şekilde belirli ayrıcalıklar verin. Örneğin:
Uygulama veritabanı kullanıcılarının ortak şemada nesne oluşturmasını önlemek için rolden
publicşema oluşturma ayrıcalıklarınıpubliciptal edin.REVOKE CREATE ON SCHEMA public FROM PUBLIC;Yeni bir veritabanı oluşturun.
CREATE DATABASE Test_db;Bu yeni veritabanındaki PUBLIC şemasındaki tüm ayrıcalıkları iptal edin.
REVOKE ALL ON DATABASE Test_db FROM PUBLIC;Uygulama veritabanı kullanıcıları için özel bir rol oluşturun.
CREATE ROLE Test_db_user;Bu role sahip veritabanı kullanıcılarına veritabanına bağlanma olanağı verin.
GRANT CONNECT ON DATABASE Test_db TO Test_db_user; GRANT ALL PRIVILEGES ON DATABASE Test_db TO Test_db_user;Veritabanı kullanıcısı oluşturma.
CREATE USER user1 PASSWORD 'Password_to_change'Rolü, bağlanma ve seçme ayrıcalıklarıyla birlikte kullanıcıya atayın.
GRANT Test_db_user TO user1;
Bu örnekte, kullanıcı user1 bağlanabilir ve test veritabanı Test_db üzerinde tüm ayrıcalıklara sahiptir, ancak kümedeki diğer hiçbir veritabanı üzerinde ayrıcalığa sahip değildir. Bu kullanıcıya veya role, bu veritabanı ve nesneleri üzerinde TÜM AYRICALIKLAR vermek yerine, SELECT, INSERT, EXECUTE ve diğerleri gibi daha seçici izinler vermeyi değerlendirin. PostgreSQL veritabanlarındaki ayrıcalıklar hakkında daha fazla bilgi için PostgreSQL belgelerindeki GRANT ve REVOKE komutlarına bakın.
Azure HorizonDB'de genel şema sahipliği değişiklikleri
Azure HorizonDB'de genel şema, desteklenen tüm PostgreSQL sürümlerinde azure_pg_admin rolüne aittir.
azure_pg_admin için geliştirilmiş denetim
Azure HorizonDB'azure_pg_adminde rol, değiştiremeyeceğiniz, sistem tarafından yönetilen, kısıtlanmış bir roldür. Başka bir rol vererek bu rolü değiştirmeye çalışırsanız aşağıdaki gibi bir hata alırsınız:
GRANT <db_user> TO azure_pg_admin;
ERROR: permission denied to alter restricted role "azure_pg_admin"
Bu kısıtlama, kritik yönetim rollerinde değişiklik yapılmasını önlemeye yönelik yerleşik bir korumadır. Ayrıcalıklar veya roller atamanız gerekiyorsa, bunun yerine özel bir rol oluşturmayı ve bu rol için gerekli izinleri vermeyi göz önünde bulundurun.
Azure HorizonDB, rolün azure_pg_admin tüm PostgreSQL sürümlerindeki özelliklerini geliştirir. Rolün azure_pg_admin üyeleri, aynı zamanda azure_pg_admin üyesi olsalar bile, kısıtlanmamış herhangi bir rolün sahip olduğu rolleri yönetebilir ve nesnelere erişebilir. Bu özellik, yönetici kullanıcıların rol ve izin yönetimi üzerinde tutarlı ve kapsamlı bir denetime sahip olmasını sağlayarak süper kullanıcı erişimi gerektirmeden sorunsuz ve güvenilir bir deneyim sağlar.
Important
Azure HorizonDB, kullanıcılara pg_write_all_data özniteliğinin verilmesine izin vermez; bu öznitelik, kullanıcıya açıkça verilmemiş olsa bile, bu nesneler üzerinde INSERT, UPDATE ve DELETE haklarına sahipmiş gibi tüm verilere (tablolar, görünümler, diziler) yazma ve tüm şemalarda USAGE haklarına sahip olma yetkisi tanır. Geçici bir çözüm olarak, veritabanı ve nesne başına daha ayrıntılı bir düzeyde benzer izinler verilmesi önerilir.
Satır düzeyi güvenlik
Row-level security (RLS) veritabanı yöneticilerinin belirli veri satırlarının bir veya daha fazla rol için nasıl görüntüleneceğini ve çalıştığını denetleyebilen ilkeler tanımlamasına olanak tanıyan bir Azure HorizonDB güvenlik özelliğidir. Satır düzeyi güvenlik, Azure HorizonDB veritabanı tablosuna ek bir filtre ekler. Kullanıcı bir tabloda eylem gerçekleştirmeye çalıştığında, bu filtre sorgu ölçütlerinden veya diğer filtrelemelerden önce uygulanır ve veriler güvenlik ilkenize göre daraltılır veya reddedilir. , , SELECTINSERTve UPDATEgibi DELETEbelirli komutlar için satır düzeyi güvenlik ilkeleri oluşturabilir veya tüm komutlar için belirtebilirsiniz. Satır düzeyi güvenlik için kullanım örnekleri PCI uyumlu uygulamalar, sınıflandırılmış ortamlar ve paylaşılan barındırma veya çok kiracılı uygulamalardır.
Yalnızca hakları olan SET ROW SECURITY kullanıcılar tabloya satır güvenliği hakları uygulayabilir. Tablo sahibi bir tabloda satır güvenliği ayarlayabilir. gibi OVERRIDE ROW SECURITY, bu hak şu anda örtük bir haktır. Satır düzeyi güvenlik mevcut GRANT izinleri geçersiz kılmaz. Daha ayrıntılı bir denetim düzeyi ekler. Örneğin, belirli bir kullanıcının yalnızca satırlara erişmesine izin verecek şekilde ROW SECURITY FOR SELECT ayarlanması, bu kullanıcıya yalnızca söz konusu sütun veya tablo üzerinde SELECT ayrıcalıkları da varsa erişim sağlar.
Aşağıdaki örnekte, yalnızca özel olarak oluşturulan yöneticirolünün üyelerinin belirli bir hesabın satırlarına erişmesini sağlayan bir ilkenin nasıl oluşturulacağı gösterilmektedir. Aşağıdaki örnekteki kod PostgreSQL belgelerinde paylaşılır.
CREATE TABLE accounts (manager text, company text, contact_email text);
ALTER TABLE accounts ENABLE ROW LEVEL SECURITY;
CREATE POLICY account_managers ON accounts TO managers
USING (manager = current_user);
USING yan tümcesi örtük olarak bir WITH CHECK yan tümce ekler ve yönetici rolünün üyelerinin diğer yöneticilere ait olan satırlarda , SELECTveya DELETE işlemlerini gerçekleştirememelerini UPDATEve başka bir yöneticiye ait yeni satırlar oluşturamamalarını INSERT sağlar.
Bu örnekte gösterildiği gibi komutunu kullanarak DROP POLICY satır güvenlik ilkesini bırakabilirsiniz:
DROP POLICY account_managers ON accounts;
İlkeyi bırakabilirsiniz ancak rol yöneticisi yine de başka bir yöneticiye ait olan verileri görüntüleyemez. Bu kısıtlamanın nedeni, hesaplar tablosunda satır düzeyi güvenlik ilkesinin hala etkinleştirilmesidir. Satır düzeyi güvenlik varsayılan olarak etkinse PostgreSQL varsayılan reddetme ilkesi kullanır.
Aşağıdaki örnekte gösterildiği gibi satır düzeyi güvenliği devre dışı bırakabilirsiniz:
ALTER TABLE accounts DISABLE ROW LEVEL SECURITY;
Satır düzeyi güvenliğini atlama
PostgreSQL, bir role atayabileceğiniz BYPASSRLS ve NOBYPASSRLS izinlerini içerir. Varsayılan olarak, NOBYPASSRLS izni atanır.
Azure HorizonDB'de, satır düzeyi güvenlik ayrıcalıklarını atlama (BYPASSRLS) aşağıdaki gibi çalışır:
azure_pg_adminyönetici rolü tarafından oluşturulan yönetici olmayan kullanıcılar, gerektiğindeBYPASSRLSözniteliğine veya ayrıcalığına sahip roller oluşturabilir.azure_pg_adminAyrıcalık gerektirenBYPASSRLSyönetim görevlerini gerçekleştirmek için kullanıcıyı kullanın.