Mencegah penghapusan database secara tidak sengaja

Halaman ini menjelaskan cara melindungi database Spanner dari penghapusan yang tidak disengaja.

Perlindungan penghapusan database Spanner mencegah penghapusan database yang ada secara tidak sengaja oleh pengguna atau akun layanan yang memiliki izin IAM yang diperlukan untuk menghapus database. Dengan mengaktifkan perlindungan penghapusan database, Anda dapat mengamankan database yang penting untuk aplikasi dan layanan Anda. Gunakan perlindungan penghapusan database bersama dengan pemulihan point-in-time dan fitur pencadangan untuk memberikan serangkaian kemampuan perlindungan data yang komprehensif untuk database Spanner Anda.

Secara default, setelan perlindungan penghapusan dinonaktifkan saat Anda membuat database baru. Anda dapat mengaktifkan setelan perlindungan penghapusan setelah pembuatan database berhasil. Selain itu, Anda dapat mengaktifkan setelan ini di database yang ada. Jika Anda ingin melindungi beberapa database, aktifkan setelan di setiap database satu per satu. Mengaktifkan atau menonaktifkan perlindungan penghapusan tidak berdampak pada performa database. Jika Anda perlu menghapus database yang mengaktifkan perlindungan database, Anda harus menonaktifkan perlindungan tersebut sebelum dapat menghapus database.

Batasan

Anda tidak dapat mengaktifkan perlindungan penghapusan database dalam skenario berikut:

  • Jika database sedang dihapus.
  • Jika database dipulihkan dari cadangan. (Setelah operasi pemulihan selesai, Anda dapat mengaktifkan perlindungan database).

Selain itu, cadangan database dan database yang dipulihkan dari cadangan tidak mewarisi setelan perlindungan penghapusan database dari database sumbernya. Setelah memulihkan database dari cadangan, Anda harus mengaktifkan perlindungan penghapusan database secara terpisah.

Jika Anda menghapus project, perlindungan penghapusan database Spanner tidak mencegah penghapusan database atau instance Anda. Untuk mengetahui informasi selengkapnya tentang apa yang terjadi jika Anda menghapus project, lihat Menghentikan (menghapus) project.

Kontrol akses dengan IAM

Untuk mengaktifkan setelan perlindungan penghapusan database, Anda harus memiliki izin IAM tertentu.

Anda harus memiliki izin spanner.databases.update untuk mengaktifkan atau menonaktifkan perlindungan penghapusan database. Jika hanya perlu melihat status konfigurasi database, Anda harus memiliki izin spanner.databases.list atau spanner.databases.get. Untuk mengetahui informasi tentang cara memberikan izin IAM Spanner, lihat Menerapkan izin IAM.

Jika memiliki peran Admin Database Spanner roles/spanner.databaseAdmin yang telah ditentukan sebelumnya untuk database, Anda dapat memperbarui dan mengaktifkan perlindungan penghapusan database.

Anda dapat mengaktifkan setelan perlindungan penghapusan database pada database yang ada untuk mencegah penghapusan database secara tidak sengaja.

Mengaktifkan perlindungan penghapusan database

Anda dapat mengaktifkan perlindungan penghapusan database menggunakan gcloud CLI, library klien, dan REST atau RPC API. Anda tidak dapat mengaktifkan perlindungan penghapusan database menggunakan konsol Google Cloud .

gcloud

Untuk mengaktifkan setelan perlindungan penghapusan database, jalankan perintah berikut:

  gcloud spanner databases update
  DATABASE_ID --instance=INSTANCE_ID
  --enable-drop-protection [--async]

Opsi berikut diperlukan:

DATABASE_ID
ID database.
INSTANCE_ID
ID instance untuk database.

Opsi berikut bersifat opsional:

--async
Segera tampilkan, tanpa menunggu operasi yang sedang berlangsung selesai.

Library klien

C++

void UpdateDatabase(google::cloud::spanner_admin::DatabaseAdminClient client,
                    std::string const& project_id,
                    std::string const& instance_id,
                    std::string const& database_id, bool drop_protection) {
  google::cloud::spanner::Database db(project_id, instance_id, database_id);
  google::spanner::admin::database::v1::Database database;
  database.set_name(db.FullName());
  database.set_enable_drop_protection(drop_protection);
  google::protobuf::FieldMask update_mask;
  update_mask.add_paths("enable_drop_protection");
  auto updated = client.UpdateDatabase(database, update_mask).get();
  if (!updated) throw std::move(updated).