如何在 Go 中执行多个 SELECT INTO OUTFILE S3 语句而不需要每次都执行 SET ROLE?

问题描述 投票:0回答:1

我正在尝试按照此处的说明进行操作,以便 SELECT INTO OUTFILE S3。我正在使用 here 的说明来实现 Go。

我想执行两个或多个 SELECT INTO OUTFILE S3 语句。我的代码如下所示:

func main() {
    cfg := mysql.Config{
        User:                 "mydb_user",
        Passwd:               "mydb_pass",
        Net:                  "tcp",
        Addr:                 "database-1.cluster-falexpegpmn8.us-west-2.rds.amazonaws.com:3306",
        DBName:               "mydb",
        AllowNativePasswords: true,
    }

    db, err := sql.Open("mysql", cfg.FormatDSN())

    _, err = db.Exec("SET ROLE AWS_SELECT_S3_ACCESS")

    _, err = db.Query("SELECT * FROM items_20231026 INTO OUTFILE S3 "+
        "'s3://falex-aurora-backups/mysqldumps/2023/10/26/mydb-items_20231026-AAA' "+
        "FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON")

    _, err := db.Query("SELECT * FROM items_20231026 INTO OUTFILE S3 "+
        "'s3://falex-aurora-backups/mysqldumps/2023/10/26/mydb-items_20231026-BBB' "+
        "FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' MANIFEST ON")
}

第一个 SELECT INTO OUTFILE S3 成功。然而,第二个失败并出现错误:

Error 1227: Access denied; you need (at least one of) the SELECT INTO S3 privilege(s) for this operation

为了避免该错误,我必须在第二个 SELECT INTO OUTFILE S3 语句之前再次执行 SET ROLE AWS_SELECT_S3_ACCESS 。

我的问题是如何修改代码,以便每当我需要执行 SELECT INTO OUTFILE S3 语句时就不必不断执行 SET ROLE AWS_SELECT_S3_ACCESS ?

mysql go amazon-aurora
1个回答
0
投票

根据 AWS Docs,您可以在 RDS 集群上将

activate_all_roles_on_login
参数设置为
1
,以在登录时自动启用所有角色,无需每次都运行
SET ROLE AWS_SELECT_S3_ACCESS
命令:

您可以使用

activate_all_roles_on_login
数据库集群参数在用户连接到数据库实例时自动激活所有角色。设置此参数后,通常不必显式调用
SET ROLE
语句来激活角色。

这可能对您来说可以接受,也可能不可以接受,具体取决于您环境中 MySQL 角色的使用情况,但它是一个可能对某些人有用的选项。

© www.soinside.com 2019 - 2024. All rights reserved.