Postgresql and Vault. ERROR: permission denied for relation example
Postgresql and Vault. ERROR: permission denied for relation example
我正在 Ubuntu 18.04 的机器上使用 vault (v0.10.1) 为 postgresql (9.5.13) 生成动态凭据,但是使用生成的凭据我可以登录并查看 table (\dt),但我不能 select 来自它的值:
pgdbdemo=> select * from example;
ERROR: permission denied for relation example
如果我使用 postgres 用户在 postgresql 上手动授予权限,然后执行 select。
pgdbdemo=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO "v-userpass-readonly-0tqxxxxxxxxxxxxxxxxx-1xxxxxxxxx9";
GRANT
但我希望它们与以下保管库角色集成,尽管使用正确的 TTL 等创建了凭据,但该保管库角色似乎忽略了 GRANT 语句:
vault write database/roles/readonly \
db_name="pgdbdemo" \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="10m" \
max_ttl="24h"
我的 Vault 数据库配置:
vault write database/config/pgdbdemo \
plugin_name="postgresql-database-plugin" \
allowed_roles="readonly" \
connection_url="postgresql://postgres:pgpass@127.0.0.1:5432?sslmode=disable" \
如何让 select 使用这些动态凭据?
您应该在配置中指定要连接的数据库:connection_url="postgresql://postgres:pgpass@127.0.0.1:5432/pgdbdemo?sslmode=disable"
否则,根据official Postgres documentation,会连接到与用户名同名的数据库,本例为postgres
我正在 Ubuntu 18.04 的机器上使用 vault (v0.10.1) 为 postgresql (9.5.13) 生成动态凭据,但是使用生成的凭据我可以登录并查看 table (\dt),但我不能 select 来自它的值:
pgdbdemo=> select * from example;
ERROR: permission denied for relation example
如果我使用 postgres 用户在 postgresql 上手动授予权限,然后执行 select。
pgdbdemo=# GRANT SELECT ON ALL TABLES IN SCHEMA public TO "v-userpass-readonly-0tqxxxxxxxxxxxxxxxxx-1xxxxxxxxx9";
GRANT
但我希望它们与以下保管库角色集成,尽管使用正确的 TTL 等创建了凭据,但该保管库角色似乎忽略了 GRANT 语句:
vault write database/roles/readonly \
db_name="pgdbdemo" \
creation_statements="CREATE ROLE \"{{name}}\" WITH LOGIN PASSWORD '{{password}}' VALID UNTIL '{{expiration}}'; \
GRANT SELECT ON ALL TABLES IN SCHEMA public TO \"{{name}}\";" \
default_ttl="10m" \
max_ttl="24h"
我的 Vault 数据库配置:
vault write database/config/pgdbdemo \
plugin_name="postgresql-database-plugin" \
allowed_roles="readonly" \
connection_url="postgresql://postgres:pgpass@127.0.0.1:5432?sslmode=disable" \
如何让 select 使用这些动态凭据?
您应该在配置中指定要连接的数据库:connection_url="postgresql://postgres:pgpass@127.0.0.1:5432/pgdbdemo?sslmode=disable"
否则,根据official Postgres documentation,会连接到与用户名同名的数据库,本例为postgres