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