无论如何支持presto的会话级连接器配置

anyway to support session level connector configuration for presto

基于Connectors configuration,所有worker在目录文件夹下共享相同的连接器配置,这意味着它将为任何presto集群用户使用相同的连接器配置。例如,来自 prestosql user1 和 user2 的查询将使用相同的 jdbc 查询配置。而传统的RDBMS ACL是基于username in JDBC配置来支持隔离的。例如,user1 将使用 jdbc:mysql://user1@host:3306 而 user2 将使用 jdbc:mysql://user2@host:3306.

问题:在同一个 presto 集群中是否有任何支持会话级连接器配置的指示或说明?例如,当 user1 运行 查询时,它会在使用 mysql 连接器时选择 jdbc:mysql://user1@host:3306,而当 user2 运行 连接到的查询时它可以切换到 jdbc:mysql://user2@host:3306 mysql.

我愿意接受任何设计输入,例如使用像 consul 或 etcd 这样的集中式配置管理工具。

这是通过使用额外的凭据直接支持的。 参见 https://github.com/trinodb/trino/blob/8c1a4a10abaad91a2f4656653a3f5eb0e44aa6c1/presto-base-jdbc/src/main/java/io/prestosql/plugin/jdbc/credential/ExtraCredentialProvider.java#L26

有关详细信息,请参阅文档任务:

您可以为 MySQL 连接器目录属性文件进行配置:

user-credential-name=mysql_user
password-credential-name=mysql_password

这允许用户提供 MySQL 用户名和密码作为 额外的凭据 当 运行 时直接传递给后端 MySQL 服务器=] Presto 查询:

presto --extra-credential mysql_user=user1 --extra-credential mysql_password=secret

凭据名称 mysql_usermysql_password 是任意的,让您可以灵活地配置它。例如,假设您有两个 MySQL 目录指向两个不同的 MySQL 服务器。如果两个服务器共享相同的用户,那么您将使用相同的凭据名称配置两个目录,从而允许对两者使用相同的凭据。如果它们不同,那么您将以不同的方式命名它们,例如 mysql1_usermysql2_user,允许用户为每个目录提供不同的凭据。

如果您使用的是 Starburst Presto,那么还有一个用户模拟选项。参见 https://docs.starburstdata.com/latest/security/impersonation.html。其中,目前支持 PostgreSql,但还不支持 MySql 连接器。