ApsaraDB RDS for MySQL örneğinizde her zaman gizli veritabanı özelliğini kullanmadan önce bir veri koruma kuralı yapılandırmanız gerekir. ApsaraDB RDS for MySQL, veri koruma kurallarını yönetmek için bir yapılandırma dosyası kullanmanıza olanak tanır. Bu konuda, SQL deyimleri kullanarak veri koruma kuralının nasıl yapılandırılacağı ve ilgili API işlemlerinin nasıl kullanılacağı açıklanmaktadır.
Her zaman gizli veritabanı özelliği, yapılandırdığınız veri koruma kuralını RDS örneğinizin sistem tablolarında saklar. RDS örneğindeki sistem tablolarına yalnızca yetkili hesap veya yetkilendirilmiş kullanıcılar veri yazabilir. Sistem tabloları mysql.encdb_sensitive_rules ve mysql.encdb_auth_users tablolarıdır.
Önkoşullar
RDS for MySQL örneğiniz, küçük motor sürümü 20231031 veya üzeri olan MySQL 5.7 ya da küçük motor sürümü 20240430 veya üzeri olan MySQL 8.0 çalıştırıyor olmalıdır. Daha fazla bilgi için bkz. Küçük motor sürümünü güncelleme.
Her zaman gizli veritabanı özelliği etkinleştirilmiş olmalıdır. Daha fazla bilgi için bkz. Her zaman gizli veritabanı özelliğini kullanma.
Veri koruma kurallarını yapılandırmak için yetkili bir hesap kullanın.
Kullanım notları
Bir veri koruma kuralını yapılandırıp etkinleştirdikten sonra kural, RDS örneğindeki tüm veritabanlarında geçerli olur; kuralı tekrar tekrar yapılandırmanız gerekmez.
Veri koruma kurallarını ve çevrimiçi uygulamaları yönetmek için ayrı veritabanı hesapları kullanmanızı öneririz. Gerekmedikçe çevrimiçi uygulamalar üzerinde yönetim izinleri vermeyin.
mysql.encdb_sensitive_rulesvemysql.encdb_auth_userstabloları üzerinde okuma ve yazma izinleri verirken dikkatli olun. Tablolarda yapılan değişiklikler, saldırganların her zaman gizli korumasını atlamasına neden olabilir.
SQL UDF'lerinde İşlemler
-
ADD: Kural ekler.
SELECT encdb_rule_op('add',<rule object json string> or <rules list json string>);Örnek 1: newrule adlı bir kural ekleyin.
SELECT encdb_rule_op('add','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');Örnek 2: newrule1 ve newrule2 adlı kuralları ekleyin.
SELECT encdb_rule_op('add','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]'); -
UPDATE: Kuralı günceller.
SELECT encdb_rule_op('update',<rule object json string> or <rules list json string>);Örnek 1: newrule adlı kuralı güncelleyin.
SELECT encdb_rule_op('update','{"name":"newrule","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}}');Örnek 2: newrule1 ve newrule2 adlı kuralları güncelleyin.
SELECT encdb_rule_op('update','[{"name":"newrule1","enabled":true,"meta":{"databases":["test"],"tables":["test"],"columns":["a","b"]}},{"name":"newrule2","enabled":true,"meta":{"databases":["test2"],"tables":["test2"],"columns":["a","b"]}}]');Notnametarafından belirtilen kural zaten varsa güncellenir. Aksi takdirde,nameiçin yeni bir kural eklenir. Bu durumdaupdateişlemi,addişlemiyle aynıdır. -
DELETE: Kuralı siler.
SELECT encdb_rule_op('delete',<rule name json string> or <rule name list json string>);Örnek 1: delrule adlı kuralı silin.
SELECT encdb_rule_op('delete','"delrule"');Örnek 2: delrule1 ve delrule2 adlı kuralları silin.
SELECT encdb_rule_op('delete','["delrule1","delrule2"]');Notparamsparametresinin değeri JSON biçiminde olmalıdır. Bu nedenle, tek bir kuralı silerken kural adınıxxxbiçimi yerine"xxx"biçiminde belirtmeniz gerekir. Örneğin,'delrule'yerine'"delrule"'belirtin. -
GRANT: İzin verir veya izinleri iptal eder.
NotKullanıcılara gerekli izinleri vermeniz gerekir.
İzin verin veya izinleri iptal edin.
SELECT encdb_rule_op('grant',<users object json string>);Örnek 1: appuser ve test_user kullanıcılarına sınırlı kaynaklara erişim izni verin.
SELECT encdb_rule_op('grant','{"restrictedAccess": ["appuser","test_user"]}');Örnek 2: illegal kullanıcısının izinlerini iptal edin.
SELECT encdb_rule_op('grant','{"noneAccess": ["illegal"]}');Örnek 3: appuser ve test_user kullanıcılarına sınırlı kaynaklara erişim izni verin ve illegal kullanıcısının izinlerini iptal edin.
SELECT encdb_rule_op('grant','{"restrictedAccess": ["appuser","test_user"], "noneAccess": ["illegal"]}');NotBu bölümde bahsedilen kullanıcıların RDS örneğinde mevcut olması gerekir.
Kullanıcılara geçici kullanım için tam erişim izni verin
Kullanım kolaylığı sağlamak ve geçici düz metin veri bakımını kolaylaştırmak amacıyla her zaman gizli veritabanı özelliği, kullanıcılara
fullAccessizni vermenize olanak tanır. Bu izne sahip bir kullanıcı veritabanına düz metin olarak erişebilir:Bu durumda, yapılandırılan veri koruma kuralı kullanıcılar üzerinde etkili olmaz ve kullanıcılar RDS örneğindeki veritabanı verilerini doğrudan düz metin olarak sorgulayabilir.
Güvenlik amaçlarıyla, izinleri kısa bir süre için ve yalnızca gerektiğinde vermenizi öneririz.
fullAccessiznini vermeden önce iş gereksinimlerinizi anlamalı ve ilgili risklerin sorumluluğunu üstlenmelisiniz.expiredparametresinin değeri, **1970-01-02 00:00:01 ile 2038-01-18 03:14:07** arasında olan ve MySQL tarafından desteklenen aralıkta olmalıdır.
Örnek: dba kullanıcısına geçici kullanım için tam erişim izni verin
SELECT encdb_rule_op('grant','{"fullAccess": ["dba"], "expired": "2023-08-21 14:21:30"}');