Database 如何在从spring引导应用程序连接到Oracle DB时指定DBA角色

Database 如何在从spring引导应用程序连接到Oracle DB时指定DBA角色,database,oracle,alter,sysdba,pluggable-database,Database,Oracle,Alter,Sysdba,Pluggable Database,我正在创建一个连接到Oracle DB实例的spring boot应用程序。我的应用程序需要处理SQL命令,如创建可插拔数据库、更改可插拔数据库、更改会话、创建表空间、更改用户等 我的Application.properties如下所示 spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver spring.datasource.url=jdbc:oracle:thin:@x.x.x.x:port/servicenam

我正在创建一个连接到Oracle DB实例的spring boot应用程序。我的应用程序需要处理SQL命令,如创建可插拔数据库、更改可插拔数据库、更改会话、创建表空间、更改用户等

我的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数据库命令需要sysdba权限才能执行,因此我在application.properties文件中为sysdba用户“sys”及其密码

然而,当我执行命令时,我得到了错误 “作为SYS的连接应该作为SYSDBA或SYSOPER”。这个用户拥有SYSDBA权限,但是当我从SQLPLUS运行时,我提到 在执行alter命令之前,使用SQLPLUS/as sysdba

我试过具体说明

spring.datasource.username=sys as sydba,
但是,这会导致ORA-01017:用户名/密码无效;拒绝登录错误

您能建议我如何从应用程序中以sysdba身份连接并执行alter命令吗? 注意:我刚刚听说不可能从应用程序以“sys”的形式连接,如果可以,请您建议可以从应用程序连接以执行ALTER PLUGABLE数据库命令的用户所需的用户类型和权限
注2:我的应用程序本身设计用于基于JSON输入创建和更改PDB。DBA不能一次性完成这项任务。

我使用spring boot framework和oracle 12c(数据库)

我的application.properties文件如下所示:

# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCLCDB
spring.datasource.username=sys as sysdba
spring.datasource.password=Oradoc_db1
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

# ===============================
# = JPA / HIBERNATE
# ===============================
# Show or not log for each sql query
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
# Naming strategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
您必须以以下方式指定用户名:

spring.datasource.username=sys as sysdba

我使用spring boot框架和oracle 12c(数据库)

我的application.properties文件如下所示:

# ===============================
# = DATA SOURCE
# ===============================
# Set here configurations for the database connection
spring.datasource.url=jdbc:oracle:thin:@127.0.0.1:1521:ORCLCDB
spring.datasource.username=sys as sysdba
spring.datasource.password=Oradoc_db1
spring.datasource.driver-class-name=oracle.jdbc.OracleDriver

# ===============================
# = JPA / HIBERNATE
# ===============================
# Show or not log for each sql query
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=create-drop
# Naming strategy
spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyHbmImpl
spring.jpa.hibernate.naming.physical-strategy=org.springframework.boot.orm.jpa.hibernate.SpringPhysicalNamingStrategy
# Allows Hibernate to generate SQL optimized for a particular DBMS
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.Oracle12cDialect
spring.jpa.database-platform=org.hibernate.dialect.Oracle12cDialect
您必须以以下方式指定用户名:

spring.datasource.username=sys as sysdba

应用程序永远不应该以
sysdba
的身份连接。这真是个非常非常糟糕的主意。您的应用程序应该依赖DBA来正确设置所有内容。我的应用程序本身就是根据JSON输入创建和更改PDB的。DBA完成这项任务不是一次性的。如果不应使用sysdba,请建议另一种解决方案。您是否需要
sysdba
权限,还是将
DBA
执行此操作?创建满足您的需求所需的特权列表可能是一个良好的开端。您可以使用该列表创建包含这些权限的角色。创建角色后,可以将角色授予用户。您可以将“SYSDBA”权限授予SYS以外的用户/服务帐户,但是,您应该非常小心。如果您使用的是pdb_change_state条款,则可能有必要,如果是,请确保帐户安全。您可以为此创建一个服务帐户。在连接时,它需要将用户名显示为sysdba。我不太了解spring,但使用JDBC,您可以将其作为单个字符串,即
DriverManager.getConnection(“JDBC:oracle:thin:@x.x.x.x:port/servicename”,“sys as sysdba”,“passwd”)
。添加双引号,如
spring.datasource.username=“sys as sydba”
是否会有所不同?我想可能是缺少了“作为sysdba”部分。@TenG:jdbc的行为也是一样的。我使用的是Oracle 19c数据库。正如您所说,我还试用了spring.datasource.username=“sys as sydba”,它会给出同样的错误“无效登录”,应用程序永远不应该以
sysdba
的身份连接。这真是个非常非常糟糕的主意。您的应用程序应该依赖DBA来正确设置所有内容。我的应用程序本身就是根据JSON输入创建和更改PDB的。DBA完成这项任务不是一次性的。如果不应使用sysdba,请建议另一种解决方案。您是否需要
sysdba
权限,还是将
DBA
执行此操作?创建满足您的需求所需的特权列表可能是一个良好的开端。您可以使用该列表创建包含这些权限的角色。创建角色后,可以将角色授予用户。您可以将“SYSDBA”权限授予SYS以外的用户/服务帐户,但是,您应该非常小心。如果您使用的是pdb_change_state条款,则可能有必要,如果是,请确保帐户安全。您可以为此创建一个服务帐户。在连接时,它需要将用户名显示为sysdba。我不太了解spring,但使用JDBC,您可以将其作为单个字符串,即
DriverManager.getConnection(“JDBC:oracle:thin:@x.x.x.x:port/servicename”,“sys as sysdba”,“passwd”)
。添加双引号,如
spring.datasource.username=“sys as sydba”
是否会有所不同?我想可能是缺少了“作为sysdba”部分。@TenG:jdbc的行为也是一样的。我使用的是Oracle 19c数据库。正如您所说,我还试用了spring.datasource.username=“sys as sydba”,它会给出同样的错误“无效登录”