【问题标题】:how to specify DBA role while connecting to Oracle DB from a spring boot application从 Spring Boot 应用程序连接到 Oracle DB 时如何指定 DBA 角色
【发布时间】: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


【解决方案1】:

我使用 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

you could find the file here

【讨论】:

    【解决方案2】:

    用户名:SYS 作为 SYSDBA

    为我工作

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    猜你喜欢
    • 1970-01-01
    • 2021-04-24
    • 2018-09-26
    • 1970-01-01
    • 2018-09-24
    • 2019-03-17
    • 2017-07-10
    • 2017-10-26
    • 2021-10-14
    相关资源
    最近更新 更多