度量快速开发平台-专业、快速的软件定制快开平台

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
热搜: 部件 流程 SQL
查看: 1260|回复: 3
打印 上一主题 下一主题

[分享] 如何只授予用户查看存储过程定义的权限

[复制链接]

348

主题

3572

帖子

9382

积分

论坛元老

Rank: 8Rank: 8

积分
9382
跳转到指定楼层
楼主
发表于 2020-6-5 01:33:33 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 万望 于 2016-1-5 01:33 编辑

如何授予某个用户只能查看某些存储过程的定义权限,而不能让用户去修改、执行存储过程。看似简单的问题,却因为从没有碰到这样的需求。

关于ORACLE账号的权限问题,一般分为两种权限:

系统权限: 允许用户执行特定的数据库动作,如创建表、创建索引、创建存储过程等

对象权限: 允许用户操纵一些特定的对象,如读取视图,可更新某些列、执行存储过程等

像这种查看存储过程定义的权限为对象权限,但是我们还是首先来看看关于存储过程的系统权限吧:

  • PRIVILEGE NAME                                       PROPERTY
  • --------- ---------------------------------------- ----------
  •      -140 CREATE PROCEDURE                                  0
  •      -141 CREATE ANY PROCEDURE                              0
  •      -142 ALTER ANY PROCEDURE                               0
  •      -143 DROP ANY PROCEDURE                                0
  •      -144 EXECUTE ANY PROCEDURE                             0
  •      -241 DEBUG ANY PROCEDURE                               0

如上所示,关于存储过程的系统权限一般有六种: CREATE PROCEDURE、CREATE ANY PROCEDURE、 ALTER ANY PROCEDURE、DROP ANY PROCEDURE、 EXECUTE ANY PROCEDURE、DEBUG ANY PROCEDURE. 那么关于存储过程的对象权限又有那些呢? 如下例子所示,在用户ESCMUSER下创建存储过程PROC_TEST

  • CREATE OR REPLACE PROCEDURE ESCMUSER.PROC_TEST
  • AS
  • BEGIN  
  •   DBMS_OUTPUT.PUT_LINE('It is only test');
  • END;

使用system用户创建用户TEMP,如下所示

  • SQL> create user temp identified by temp;
  • User created.
  • SQL> grant connect,resource to temp;
  • Grant succeeded.

在用户ESCMUSER下将存储过程PROC_TEST的所有权限授予给用户TEMP。 那么我们发现存储过程的对象权限只有EXECUTE、DEBUG权限

  • SQL> COL GRANTEE FOR A12;
  • SQL> COL TABLE_NAME FOR A30;
  • SQL> COL GRANTOR FOR A12;
  • SQL> COL PRIVILEGE FOR A8;
  • SQL> SELECT * FROM USER_TAB_PRIVS_MADE WHERE GRANTEE='TEMP';
  • GRANTEE      TABLE_NAME              GRANTOR      PRIVILEGE               GRA HIE
  • ---------- --------------------- ------------ --------------------------- --- ---
  • TEMP         PROC_TEST                ESCMUSER     DEBUG                   NO  NO
  • TEMP         PROC_TEST                ESCMUSER     EXECUTE                 NO  NO
  • SQL>  

将存储过程PORC_TEST的权限从TEMP用户收回,然后授予用户TEMP关于存储过程PROC_TEST的DEBUG权限


  • SQL>REVOKE ALL ON PROC_TEST FROM TEMP;
  • SQL>GRANT DEBUG ON PROC_TEST TO TEMP;

那么TEMP用户此时执行存储过程报权限不足


  • SQL> SET SERVEROUT ON;
  • SQL> EXEC escmuser.proc_test;
  • begin escmuser.proc_test; end;
  • ORA-06550: line 2, column 16:
  • PLS-00904: insufficient privilege to access object ESCMUSER.PROC_TEST
  • ORA-06550: line 2, column 7:
  • PL/SQL: Statement ignored

此时,如果修改存储过程PROC_TEST就会ORA-01031权限不足问题。但是你可以在PL/SQL Developer工具或使用下面视图查看存储过程的定义。如下所示。

SELECT * FROM ALL_SOURCE WHERE NAME='PROC_TEST'

所以,只需要授予存储过程的DEBUG权限给某个用户,就可以实现只授予用户查看存储过程定义的权限,而限制用户修改、执行存储过程。从而达到只授权用户查看存储过程定义的权限。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复

使用道具 举报

348

主题

3572

帖子

9382

积分

论坛元老

Rank: 8Rank: 8

积分
9382
沙发
 楼主| 发表于 2020-6-5 01:34:46 | 只看该作者
若現在就覺得失望無力,未來那麽遠妳該怎麽扛...
————————————————————————致自己
回复 支持 反对

使用道具 举报

542

主题

5916

帖子

1万

积分

作者

Rank: 7Rank: 7Rank: 7

积分
13589
板凳
发表于 2020-6-5 13:59:45 | 只看该作者
限制修改可以理解,为什么要限制执行呢?
回复 支持 反对

使用道具 举报

198

主题

1313

帖子

3784

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3784
地板
发表于 2020-6-5 15:15:27 | 只看该作者
各种稀奇古怪的权限都用哈。有些确实要限制修改和执行,就相当于给你看看而已。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|重庆度量科技  本站关键词:快速开发平台

GMT+8, 2024-12-27 13:21 , Processed in 0.135238 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表