sqle
sqle copied to clipboard
Oracle使用sys用户执行 TOP SQL扫描任务失败
版本信息(Version)
3.2408.0
问题描述(Describe)
创建Oracle TOP SQL任务,无法从页面获取采集信息。日志中发现连接Oracle失败。
截图或日志(Log)
如何复现(To Reproduce)
添加Oracle数据源,用户为sys, 创建Oracle TOP SQL扫描任务
问题原因
- sys用户只能用SYSDBA或者SYSOPER两种身份登陆,当前使用的sql.Open()默认为normal登陆。
解决方案
sys用户需要添加 as sysdba的连接字符
var DBAPrivilege string
if strings.ToUpper(dsn.User) == "SYS" {
DBAPrivilege = "AS SYSDBA"
}
sqlDB, err := sql.Open("oracle", fmt.Sprintf("oracle://%s:%s@%s:%s/%s%s", dsn.User, dsn.Password, dsn.Host, dsn.Port, dsn.ServiceName, DBAPrivilege))
if err != nil {
return nil, errors.Wrapf(err, "failed to connect to %s", dsn.String())
}
err = sqlDB.Ping()
if err != nil {
return nil, errors.Wrapf(err, "failed to ping %s", dsn.String())
}