使用Vault,我正在尝试在Postgres 11.8实例中创建一个按需临时的只读用户。
我将拥有:
- 1000多个数据库(每个客户或租户一个) - 每个数据库都有一个public和reporting模式。
因此,我正在尝试找到一种方法,让这个只读用户可以访问每个数据库以及两个模式中的所有表。
虽然我想出了以下代码片段:
它仅适用于1个单一的数据库(当前数据库)。如果我使用readonly用户登录并切换到其他数据库,除第一个数据库外,我看不到任何表格。
集群包含许多数据库,每个数据库包含许多模式。不同数据库中具有相同名称的模式是不相关的。授予权限仅适用于当前DB中的特定模式(授予权限时的当前DB)。 https://dev59.com/4mAf5IYBdhLWcg3wMwTX#24923877 由于这个限制,似乎使上面的授予代码片段更加复杂。我应该以某种方式迭代所有的数据库并运行片段吗?如何进行数据库转换?是否可以在简单的SQL中进行(按照Vault's API的要求)?有人做过这个吗?
注意:在MySQL中完成相同的操作只需要两行代码,使用通配符
我将拥有:
- 1000多个数据库(每个客户或租户一个) - 每个数据库都有一个public和reporting模式。
因此,我正在尝试找到一种方法,让这个只读用户可以访问每个数据库以及两个模式中的所有表。
虽然我想出了以下代码片段:
-- Create a new user
CREATE ROLE "my-readonly-user" WITH LOGIN PASSWORD 'test123';
-- Grant access to the two schema's we have
GRANT USAGE ON SCHEMA public TO "my-readonly-user";
GRANT USAGE ON SCHEMA reporting TO "my-readonly-user";
-- Grant access to all tables in our two schema's
GRANT SELECT ON ALL TABLES IN SCHEMA public TO "my-readonly-user";
GRANT SELECT ON ALL TABLES IN SCHEMA reporting TO "my-readonly-user";
-- Grant access to sequences
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO "my-readonly-user";
GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA reporting TO "my-readonly-user";
-- Grant access to future tables
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO "my-readonly-user";
ALTER DEFAULT PRIVILEGES IN SCHEMA reporting GRANT SELECT ON TABLES TO "my-readonly-user";
它仅适用于1个单一的数据库(当前数据库)。如果我使用readonly用户登录并切换到其他数据库,除第一个数据库外,我看不到任何表格。
集群包含许多数据库,每个数据库包含许多模式。不同数据库中具有相同名称的模式是不相关的。授予权限仅适用于当前DB中的特定模式(授予权限时的当前DB)。 https://dev59.com/4mAf5IYBdhLWcg3wMwTX#24923877 由于这个限制,似乎使上面的授予代码片段更加复杂。我应该以某种方式迭代所有的数据库并运行片段吗?如何进行数据库转换?是否可以在简单的SQL中进行(按照Vault's API的要求)?有人做过这个吗?
注意:在MySQL中完成相同的操作只需要两行代码,使用通配符
*.*
,Postgres不支持该通配符,据我所知。CREATE USER '{{name}}'@'10.0.0.0/255.0.0.0' IDENTIFIED BY '{{password}}';
GRANT SELECT, SHOW DATABASES, SHOW VIEW ON *.* TO '{{name}}'@'10.0.0.0/255.0.0.0';