我正在尝试使用云函数删除云sql(postgres(中的数据库,
dbDeleteResp, err := sqladminService.Databases.Delete(projectName, instanceName, dbName).Context(ctx).Do()
并得到以下异常
db=cloudsqladmin,user=cloudsqlagent ERROR: must be owner of database XXXX
是否可以向云SQL代理用户授予删除云SQL中数据库的权限?
如果您查看 Cloud SQL Admin API 文档以了解databases.delete
,您将看到它需要 IAM 角色sqlservice.admin
。确保此函数的服务帐户具有该角色。
Cloud SQL 是一项托管服务。 您(用户(不拥有数据库。 基仕伯保留幕后的所有权。
要执行所有者级别的活动(例如删除数据库(,您需要通过适当的 GCP API。
根据文档,您可以从云函数进行 REST API 调用来完成此操作:
DELETE https://www.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id/databases/database-name
请确保您的云函数服务帐户具有相应的云 SQL 权限!
您有多确定gcloud
正在使用您认为的服务帐户?
当您运行gcloud info
时,确认您认为它正在使用的项目是正确的项目,然后在您运行gcloud auth login
并且您登录时使用的用户具有足够的权限。
另一种方法是使用服务帐户设置gcloud
,这里有一个很好的操作方法:https://medium.com/@pnatraj/how-to-run-gcloud-command-line-using-a-service-account-f39043d515b9
正如其他人在他们的评论中所说,您需要的角色/权限是roles/cloudsql.admin
。