本页介绍了如何保护 Spanner 数据库免遭意外删除。
Spanner 数据库删除保护功能可防止具有删除数据库所需 IAM 权限的用户或服务账号意外删除现有数据库。通过启用数据库删除保护,您可以保护对应用和服务至关重要的数据库。结合使用数据库删除保护功能以及时间点恢复和备份功能,为 Spanner 数据库提供一整套全面的数据保护功能。
默认情况下,在您创建新数据库时,系统会停用删除保护设置。数据库创建成功后,您可以启用删除保护设置。此外,您还可以为现有数据库启用此设置。如果您要保护多个数据库,请为每个数据库单独启用此设置。启用或停用删除保护对数据库没有任何性能影响。如果您需要删除已启用数据库保护的数据库,则需要先停用此保护,然后才能删除数据库。
限制
在以下情况下,您无法启用数据库删除保护:
- 如果数据库正在被删除。
- 如果数据库是从备份恢复的。(恢复操作完成后,您可以启用数据库保护)。
此外,数据库的备份以及从备份恢复的数据库不会继承其源数据库的数据库删除保护设置。从备份恢复数据库后,您必须单独为其启用数据库删除保护。
如果您删除项目,Spanner 数据库删除保护功能不会阻止删除数据库或实例。如需详细了解删除项目后会出现什么情况,请参阅关停(删除)项目。
使用 IAM 进行访问权限控制
如需为数据库启用删除保护设置,您必须拥有特定的 IAM 权限。
您需要拥有 spanner.databases.update
权限才能启用或停用数据库删除保护。如果您只需要查看数据库配置的状态,则需要拥有 spanner.databases.list
或 spanner.databases.get
权限。如需了解如何授予 Spanner IAM 权限,请参阅应用 IAM 权限。
如果您为数据库分配了预定义的 Spanner 数据库管理员 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
- 会立即返回结果,而无需等待正在进行的操作完成。