如何实现只授予用户查看存储过程定义的权限

来源:本网整理

数据库安全管理中,只需要授给用户查询的权限:grant select on 文档名 to 用户

有个网友问我,如何授予某个用户只能查看某些存储过程的定义权限,而不能让用户去修改、执行存储过程。看似简单的问题,却因为从没有碰到这样的需求。花了点时间才梳理、总结清楚。

如题,我在自己的机器上建立了2个用户,其中在A用户中,我创建了一些存储过程,现在我使用B用户登录Or

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

SELECT *  FROM

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

GRANT CREATE,MODIFY,SELECT,EXECUTE ON dbo.procname

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

可以的,oracle中存储过程有拥有者和使用者,一般来讲拥有者比使用者有着更高的权限。SQL>

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

1:按照现在的公开招聘规则,大部分面对的都是年轻人。2:如果是45周岁的话,主要招聘的,要么是管理层次的人才,要么是技术领域的人才。3:对于45周岁以上的人来说,想要找份好的工作:一方面可能需要熟人的推荐,这种方式可能妥当一些。另一方面就得有过硬的本事、技能,以及丰富的经验,这才可能找得到好工作。否则一般可能就是一些简单活儿,或体力活了。

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

养狗也是要对脾气,你的性格决定你养什么狗,还要你有爱心,有耐心。最近带回来一只三个月的拉布拉多,这狗日的折腾s我了,不过比二哈好多了,看看这狗东西的所作所为吧…我家的大卫,帅吧!听说他爹是参赛的狗??三个多月大,最近刚换了两个超级大的饭盆。吃饭的时候耳朵也在盆里,每次都是湿的。吃饭的时候耳朵用皮筋扎起来,这样就不湿了。大卫喜欢水,天生的游泳健将,不过在家里只能在他的洗澡盆里了。大卫的领地,我不让他进卧室,他不让我收拾他的窝。睡觉的姿势很销魂吧!这个家挺舒服的…主人不在就翻天啦!打…衣服咬坏好几件…打…狗屎满地…打…不过,大卫很聪明,厕所买回来两天就会用了音响也未能逃过一劫,打…你奶奶的,这个…

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

男人的发型要向后梳,才是最帅气的发型,男人的发型一定要把整个额头出来,因为额头为天庭,为离宫,离宫为火,火主欣欣向荣朝气蓬勃的意思,同时也是一个人智慧显现的地方,额头打开主人比较有自信,相对人际关系较好,进一步增强自己各方面的运势!男人发型最忌讳挡住额头,除非年龄偏小青春活力的时期,某些影视歌舞特殊行业的人需酷感、潮一些另类一些或偏中性女人味一些才会留浏海挡住额头,暂时做一下没问题,长久挡住额头的发型肯定不好!否则年龄超过25岁以上的男士一定要把额头露出来,纵观天下政商、百业大成功的人士发型都是往后露出额头,或一九分、二八分、三七分、甚至大背头,古人云“天庭饱满地阁方圆,必是大富大贵之人”,发

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权限给某个用户,就可以实现只授予用户查看存储过程定义的权限,而限制用户修改、执行存储过程。从而达到只授权用户查看存储过程定义的权限。不过这样实现,总让我感觉有点怪怪的。

以上就是小编为大家整理的如何实现只授予用户查看存储过程定义的权限,希望可以对大家的学习能有所帮助。

扩展阅读,根据您访问的内容系统为您准备了以下内容,希望对您有帮助。

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

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

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

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

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

SQL> SELECT * FROM SYSTEM_PRIVILEGE_MAP WHERE NAME LIKE '%PROCEDURE%';

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

以dba身份执行语句:

select table_name from dba_tables where owner=\\'SYSTEM\\';

这样可以知道system用户下的所有表,不过应该很多.

你想让scott查看哪个表,就这样

grant select on system.tablename to scott;

想让scott可以修改数据,则:

grant update on system.tablename to scott;

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

以dba身份执行语句:

select table_name from dba_tables where owner=\\'SYSTEM\\';

这样可以知道system用户下的所有表,不过应该很多.

你想让scott查看哪个表,就这样

grant select on system.tablename to scott;

想让scott可以修改数据,则:

grant update on system.tablename to scott;

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

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

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

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

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

SQL> SELECT * FROM SYSTEM_PRIVILEGE_MAP WHERE NAME LIKE '%PROCEDURE%';

oracle怎么只给存储过程授权执行权限不给看的权限

存储过程的相关权限一共只有两个,一个是excute权限,还有一个是debug权限。

按照你的说法就是只给excute的权限,不给debug权限,因为没试过这样能不能查看,所以你要自己试验下才行。更多追问追答追问不行,试过了,用grant语句只给execute权限,最后B确实是有了execute权限,但是相应的也有了view、edit权限。但是这样不行,不能让他看到存储过程的数据处理逻辑,更不能编辑了。追答这样试试,把存储过程放到一个包里,包里再加两个过程,有效就可以,可是没有实际作用。

然后就给他这一个存储过程的执行权限,但是不给这个包的debug权限,这样可能能实现你的想法。

仅仅为推测,有这种可能而已。追问试过了,不行,关键是存储过程的执行权限必须要有,这个不管怎么处理都绕不过去。而只要有了执行权限,就有了编辑权限。不过还是谢谢你

  • 本文相关:
  • 实例讲解临时处理去重 80w 数据时夯死现象
  • 对比Oracle临时表和SQL Server临时表的不同点
  • 详解Oracle数据库各类控制语句的使用
  • oracle存储过程常用的技巧(详)
  • Oracle文本函数简介
  • Oracle数据创建虚拟列和复合触发器的方法
  • 解决Windows 7下安装Oracle 11g相关问题的方法
  • oracle误drop/update操作后的数据恢复测试
  • Oracle数据库优化策略总结篇
  • 简析Oracle数据库常见问题及解决方案
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved