【发布时间】:2019-04-17 15:27:21
【问题描述】:
我正在创建一个连接到 Oracle 数据库实例的 Spring Boot 应用程序。我的应用程序需要处理 SQL 命令,例如 CREATE PLUGGABLE DATABASE、ALTER PLUGGABLE DATABASE、ALTER SESSION、CREATE TABLESPACE、ALTER USER 等。
我的 Application.properties 如下
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.datasource.url=jdbc:oracle:thin:@x.x.x.x:port/servicename
spring.datasource.username=sys
spring.datasource.password=somepassword
由于 ALTER PLUGGABLE DATABASE COMMANDS 需要 sysdba 权限才能执行,所以我在 application.properties 文件中给了 sysdba 用户“sys”及其密码。
但是当我执行命令时,我得到了错误 “作为 SYS 的连接应该是 SYSDBA 或 SYSOPER”。这个用户有 sysdba 权限,但是当我从 SQLPLUS 运行时我提到 SQLPLUS / as sysdba 在执行 alter 命令之前。
我尝试过指定
spring.datasource.username=sys as sydba,
但是,这会导致 ORA-01017:用户名/密码无效;登录被拒绝错误。
您能否建议我如何以 sysdba 身份从我的应用程序连接并执行更改命令? 注意:我刚听说不能从应用程序连接为“sys”,如果可以,请建议可以从应用程序连接的用户需要什么类型的用户以及需要什么权限才能执行 ALTER PLUGGABLE DATABASE命令 注意 2:我的应用程序本身旨在根据 JSON 输入创建和更改 PDB。这不是 DBA 一次性完成的任务。
【问题讨论】:
-
应用程序应该从不,永远连接为
sysdba。这是一个非常非常非常糟糕的主意。您的应用程序应该依赖 DBA 来正确设置所有内容。 -
我的应用程序本身旨在创建和更改基于 JSON 输入的 PDB。由 DBA 完成它不是一次性的任务。如果不应该使用 sysdba,请建议一个替代解决方案。
-
您需要
SYSDBA权限,还是DBA可以解决问题?创建满足您的要求所需的权限列表可能是一个好的开始。您可以使用该列表来创建包含这些权限的角色。创建角色后,您可以将角色授予用户。您可以将“SYSDBA”权限授予 SYS 以外的用户/服务帐户,但是,您应该非常小心。如果您使用 pdb_change_state 子句,则可能有必要,如果是,请确保帐户是安全的。您可以为此创建一个服务帐户。 -
连接时需要将用户名
sys as sysdba提供给Oracle。我对 spring 了解不多,但是使用 JDBC 你可以将它作为一个字符串,即DriverManager.getConnection("jdbc:oracle:thin:@x.x.x.x:port/servicename","sys as sysdba","passwd")。添加像spring.datasource.username="sys as sydba"这样的双引号会有所不同吗?我在想也许它缺少“as sysdba”部分。 -
@TenG :jdbc 的行为也是一样的。我使用的是 Oracle 19c 数据库。正如你所说,我还尝试了 spring.datasource.username="sys as sydba",它给出了同样的错误“无效登录”
标签: database oracle alter sysdba pluggable-database