我正在尝试按照此处的说明进行操作,以便 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 ?
根据 AWS Docs,您可以在 RDS 集群上将
activate_all_roles_on_login
参数设置为 1
,以在登录时自动启用所有角色,无需每次都运行 SET ROLE AWS_SELECT_S3_ACCESS
命令:
您可以使用
数据库集群参数在用户连接到数据库实例时自动激活所有角色。设置此参数后,通常不必显式调用activate_all_roles_on_login
语句来激活角色。SET ROLE
这可能对您来说可以接受,也可能不可以接受,具体取决于您环境中 MySQL 角色的使用情况,但它是一个可能对某些人有用的选项。