---
title: 没有存储过程执行权限却可以执行存储过程-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于没有存储过程执行权限却可以执行存储过程相关的常见问题和使用技巧，帮助您快速解决没有存储过程执行权限却可以执行存储过程的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 没有存储过程执行权限却可以执行存储过程

更新时间：2026-05-29 08:46

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题描述

Oracle 租户下，USER2 没有存过的权限但是可以执行 USER1 下的存储过程。

问题复现测试案例如下。

1. 创建用户。

   ```shell
   obclient > create user user1 identified by 123;
   Query OK, 0 rows affected (0.033 sec)

   ```

   ```shell
   obclient > create user user2 identified by 123;
   Query OK, 0 rows affected (0.030 sec)

   ```
 2. 授予用户系统权限。

   ```shell
   obclient > grant all privileges to user1;
   Query OK, 0 rows affected (0.035 sec)

   ```

   ```shell
   obclient > grant create session to user2;
   Query OK, 0 rows affected (0.036 sec)

   ```
 3. 用户 USER1 创建表和存储过程。

   ```shell
   obclient > create table loghistory
   (userid VARCHAR2(20),
   logdate DATE DEFAULT SYSDATE);

   ```

   ```shell
   obclient > CREATE OR REPLACE PROCEDURE userlogin
          IS
          BEGIN
          INSERT INTO loghistory (userid) VALUES (USER);
          commit;
          END;
          /

   ```
 4. 用户 USER1 使用 call 和 begin 执行存储过程正常执行。

   ```shell
   obclient [USER1]> select  * from loghistory;
   Empty set (0.004 sec)

   ```

   ```shell
   obclient [USER1]> call user1.userlogin();
   Query OK, 0 rows affected (0.013 sec)

   ```

   ```shell
   obclient [USER1]> begin
       user1.userlogin();
       end;
       /
   Query OK, 1 row affected (0.024 sec)

   ```
 5. USER1 查询数据。

   ```shell
   obclient [USER1]> select  * from loghistory;

   ```

   输出结果如下。

   ```shell
   +--------+---------------------+
   | USERID | LOGDATE             |
   +--------+---------------------+
   | USER1  | 2023-07-27 14:59:10 |
   | USER1  | 2023-07-27 14:59:17 |
   +--------+---------------------+
   2 rows in set (0.002 sec)

   ```
 6. 用户 USER2 使用 call 执行失败，begin 执行成功。

   ```shell
   obclient [USER2]>  call user1.userlogin();
   ORA-00942: table or view does not exist

   ```

   ```shell
   obclient [USER2]> begin
       user1.userlogin();
       end;
       /
   Query OK, 1 row affected (0.029 sec)

   ```
 7. USER1 查询数据。

   ```

   输出结果如下。

   ```shell
    +--------+---------------------+
    | USERID | LOGDATE             |
    +--------+---------------------+
    | USER1  | 2023-07-27 14:59:10 |
    | USER1  | 2023-07-27 14:59:17 |
    | USER2  | 2023-07-27 14:59:45 |
    +--------+---------------------+
    3 rows in set (0.002 sec)

   ```

## 适用版本

OceanBase 数据库 V2.x、V3.x 版本。

## 问题原因

OceanBase 数据库 BUG。存储过程中所有语句都需要进行权限检查，嵌套存储过程通过 inner call 的方式执行，和其他 SQL 语句的执行路径不同，缺少权限检查。

上一篇

[Oracle 租户下跨用户执行 PKG 中的存储过程报错](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000466058)

下一篇

[OceanBase 数据库 MySQL 模式调用存储过程时，交互客户端未返回执行结果](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000209959) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
