本页面介绍了如何保护 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
- 立即返回结果,而无需等待正在进行的操作完成。