oracle 11g 授予 dbms_lock 不持久

Hig*_*eat 1 oracle oracle-11g permissions jdbc

我使用oewizardswingbench创建一个订单录入像的Oracle 11g架构。当我运行向导时,我收到以下错误:

ORA-01031: Cannot grant execute on dbms_lock to soe: Insufficient privilege
ORA-01031: Cannot GRANT SELECT ON SYS.V_$PARAMETER to SOE: Insufficient privilege
Run Code Online (Sandbox Code Playgroud)

现在我使用SYSTEM用户作为 DBA 从 oewizard 登录帐户。现在我的第一个问题:

  1. SYSTEM用户是否SYS_DBA从一开始就拥有特权

我从sqlplus(GRANT DBA to SYSTEM; Grant Succeeded)向 SYSTEM 显式授予 DBA 特权,但是在通过 SYSTEM(同一用户)通过 JDBC(oewizard 的后端)进行连接时,我仍然遇到相同的错误。所以我的下一个问题是:

  1. 当从 sqlplus(以 SYSDBA 身份)登录时,即使在我们退出 sqlplus 之后,分配给给定用户的授权是否仍然存在?
  2. 如果是这样,将 GRANT 分配给给定用户以使其持续存在的最佳方法是什么?
  3. 有没有办法通过 JDBC 以 SYSDBA 身份登录,因为当我尝试它时,它不允许我

渴望听到你的消息

ato*_*pas 5

来自 Oracle 文档-

创建 Oracle 数据库时,用户 SYSTEM 也会自动创建并被授予 DBA 角色。

SQL> conn system
Password:


SQL> select * from session_roles;

ROLE
------------------------------
CONNECT
RESOURCE
DBA

SQL> show user;
USER is "SYSTEM"

SQL> grant execute on dbms_lock to jay;
grant execute on dbms_lock to jay
                 *
ERROR at line 1:
ORA-01031: insufficient privileges
Run Code Online (Sandbox Code Playgroud)

发生错误是因为 SYSTEM 用户没有 ' EXECUTE' 权限且GRANT选项打开DBMS_LOCK

SQL>conn / as sysdba

SQL> select * from user_tab_privs where grantee='SYSTEM' and table_NAME='DBMS_LOCK';

no rows selected
Run Code Online (Sandbox Code Playgroud)

此外,DBA 角色EXECUTEDBMS_LOCK包没有“ ”对象特权。

SQL>  select * from role_tab_privs where role='DBA' and table_name='DBMS_LOCK';

no rows selected
Run Code Online (Sandbox Code Playgroud)

为了授予执行权限,您需要SYSDBA连接到SYS模式、所有者DBMS_LOCK或授予“ EXECUTE”权限以及GRANT执行授予的用户的选项。

[oracle@myserver ~]$ sqlplus system as sysdba

SQL*Plus: Release 11.2.0.4.0 Production on Tue May 2 14:45:27 2017

Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password: 

Connected to:
Oracle Database 11g Enterprise Edition Release 11.2.0.4.0 - 64bit Production
With the Partitioning, Automatic Storage Management, OLAP, Data Mining
and Real Application Testing options

SQL> show user;
USER is "SYS"

SQL> grant execute on dbms_lock to jay;

Grant succeeded.
Run Code Online (Sandbox Code Playgroud)

当从 sqlplus(以 SYSDBA 身份)登录时,即使在我们退出 sqlplus 之后,分配给给定用户的授权是否仍然存在?

是的,他们坚持。

我们有没有办法通过 JDBC 以 SYSDBA 身份登录,因为当我尝试它时,它不允许我。

这是一个对我来说很好用的示例连接字符串。

Connection conn=DriverManager.getConnection("jdbc:oracle:thin:@host:port/SID","sys as sysdba","password");