本页面介绍如何保护 Spanner 数据库免遭意外删除。
Spanner 数据库删除保护可防止拥有删除数据库所需的 IAM 权限的用户或服务帐号意外删除现有数据库。通过启用数据库删除防护,您可以保护对您的应用和服务至关重要的数据库。将数据库删除保护与时间点恢复和备份功能结合使用,可为 Spanner 数据库提供一套全面的数据保护功能。
默认情况下,创建新数据库时,删除保护设置处于停用状态。您可以在数据库创建成功后启用删除保护设置。此外,您还可以对现有数据库启用此设置。如果要保护多个数据库,请分别为每个数据库启用此设置。启用或停用删除保护不会对数据库产生任何性能影响。如果您需要删除启用了数据库保护的数据库,需要先停用该保护,然后才能删除该数据库。
限制
在以下情况下,您无法启用数据库删除保护:
- 是否删除数据库。
- 是否使用备份恢复数据库。(恢复操作完成后,您可以启用数据库保护功能)。
此外,数据库的备份和通过备份恢复的数据库不会继承其源数据库的数据库删除保护设置。使用备份恢复数据库后,必须单独启用其数据库删除保护。
如果您删除项目,Spanner 数据库删除保护功能不会阻止删除数据库或实例。如需详细了解删除项目后会发生的情况,请参阅关停(删除)项目。
使用 IAM 控制访问权限
如需启用数据库的删除保护设置,您必须具有特定的 IAM 权限。
您需要拥有 spanner.databases.update
权限才能启用或停用数据库删除保护。如果您只需要查看数据库配置的状态,则需要具有 spanner.databases.list
或 spanner.databases.get
权限。如需了解如何授予 Spanner IAM 权限,请参阅应用 IAM 权限。
如果您拥有数据库的预定义 Spanner Database Admin roles/spanner.databaseAdmin
角色,则可以更新并启用数据库删除保护。
您可以对现有数据库启用数据库删除保护设置,以防止意外删除数据库。
启用数据库删除保护
您可以使用 gcloud CLI、客户端库以及 REST 或 RPC API 来启用数据库删除防护。您无法使用 Google Cloud 控制台启用数据库删除保护。
gcloud
如需启用数据库的删除保护设置,请运行以下命令:
gcloud spanner databases update
DATABASE_ID --instance=INSTANCE_ID
--enable-drop-protection [--async]
以下选项为必需:
DATABASE_ID
- 数据库的 ID。
INSTANCE_ID
- 数据库的实例 ID。
以下选项为可选:
--async
- 立即返回,无需等待操作完成。
客户端库
C++
C#
Go
Java
Node.js
PHP
Python
Ruby
检查数据库是否启用了删除保护
您可以通过查看数据库配置来确定数据库是否启用了删除保护。
gcloud
如需检查数据库是否启用了删除保护,您可以运行 gcloud spanner databases describe
命令来获取数据库的详细信息,也可以运行 gcloud spanner databases list
来获取有关实例中数据库的详细信息。
gcloud spanner databases describe
projects/PROJECT_ID/instances/INSTANCE_ID/databases/DATABASE_ID
以下选项为必需:
PROJECT_ID
- 数据库项目的 ID。
INSTANCE_ID
- 数据库的实例 ID。
DATABASE_ID
- 数据库的 ID。
如果启用了删除保护,您将在输出中看到 enableDropProtection: true
参数。
停用数据库删除保护
如果数据库不再需要此保护,或者您需要删除启用了此设置的数据库,可以停用数据库删除保护。
如果要删除具有一个或多个启用了删除保护的数据库的实例,您必须先对该实例中的所有数据库停用删除保护,然后才能删除该实例。
gcloud
如需停用数据库的删除保护设置,请运行以下命令:
gcloud spanner databases update
DATABASE_ID --instance=INSTANCE_ID
--no-enable-drop-protection [--async]
以下选项为必需:
DATABASE_ID
- 数据库的 ID。
INSTANCE_ID
- 数据库的实例 ID。
以下选项为可选:
--async
- 立即返回,无需等待操作完成。