我正在使用IAM服务帐户用户测试CloudSQL IAM自动身份验证。目标是部署一个使用服务帐户(SA(在云中运行的后端服务,该服务可以在不使用密码验证的情况下连接到CloudSQL数据库。
这就是我所做的:
- 通过gcloud控制台创建云SQL数据库
demo-db
- 通过gcloud控制台创建服务帐户
sa
- 在云sqljdbcsocket工厂的帮助下,创建一个后端服务并以
sa
为帐户在k8s中运行.并使后端服务具有liquibaseschema迁移,以便它可以创建表 - 通过gcloud控制台在
demo-db
中创建IAM服务帐户用户user-sa
- 通过gcloud控制台在
demo-db
中创建一个普通的内置用户user-db
(带密码((用于我的本地登录/psql到数据库( - 将后端部署到生产环境,并连接(使用
user-sa
(并在demo-db
中创建表(使用liquibase(
这是我现在遇到的一个问题:
当我使用云sql代理通过psql本地登录demo-db
时,使用用户user-db
和密码,我意识到我无法查看或选择后端服务创建的表(通过user-sa
(。
那么,作为开发人员,我如何查看数据库中的数据呢?
PS:现在我无法访问user-sa
或sa
的秘密/密钥文件。因为它由我们的基础设施管理。我只拥有demo-db
的所有权,我可以将我的数据库访问权授予user-sa
。。。
我在AWS的Postgres RDS上遇到了同样的问题。
您(作为后端创建服务(基本上必须创建一个角色,将您的部署角色(user-sa
(和应用程序用户(user-db
(放入该角色中。
然后您的部署脚本将不得不使用ALTER <OBJECT> OWNER TO <ROLE>
。现在,该角色中的每个角色或用户都将拥有访问权限。对于函数、表等,您必须这样做
另一种选择是通过ALTER DEFAULT PRIVILEGES
设置默认权限,但请注意,这些权限仅对新对象生效。如果之后添加了一个新的数据库角色,并希望授予它对已经存在的表的权限,则仍然需要为新角色添加显式权限。
*
注意,在postgres中,角色和用户在命令中是可互换的。在我看来,角色不登录,但它可以用来持有一组权限。与其将权限分配给单个用户,不如将其分配给组/角色,然后将用户成员资格授予该组/角色。请确保允许您对用户和角色拥有继承权限,这样才能正常工作。