暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 向公众继承特权特权

askTom 2018-07-05
192

问题描述

我正在对我的数据库进行查询,针对受赠人是公开的dba_tab_privs。我注意到,对于我的数据库中的每个用户,PUBLIC都对该用户具有 “继承特权”。这应该是允许的吗?这到底是如何工作的,因为我想限制公众可以访问的对象数量?

专家解答

为了解释一下,让我给你一个场景... 我黑进你的数据库 :-)

首先,我这样做:

SQL> conn scott/tiger
Connected.

SQL>
SQL> drop table t purge;

Table dropped.

SQL> create table t ( x int );

Table created.

SQL> grant select on t to public;

Grant succeeded.

SQL> create or replace
  2  procedure MY_PROC authid current_user is
  3    v int;
  4  begin
  5    select 1/count(*) into v from scott.t;
  6  end;
  7  /

Procedure created.

SQL> exec scott.my_proc
BEGIN scott.my_proc; END;

*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.MY_PROC", line 4
ORA-06512: at line 1
复制


你可以看到它失败了,因为 “count(*)” 将返回零,我会得到一个错误

我故意这样做,因为现在我打电话给你...(DBA)

"Hi Christine, Man I'm having a bad day. My proc keeps failing - I think its a privileges issue. Could you give it a run and see if it works for you?"


您使用您的DBA帐户登录,查看代码 (看起来无害) 并运行它:

SQL> conn christine/christine
Connected.

SQL> exec scott.my_proc
BEGIN scott.my_proc; END;

*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.MY_PROC", line 4
ORA-06512: at line 1
复制


你跳回电话给我

"Hey Scott...your table is empty you dufus...there is no problem here with the code".


现在我当然 * 知道 * 您会说... 所以现在我将程序修改为:

SQL> conn scott/tiger
Connected.

SQL>
SQL> create or replace
  2  procedure MY_PROC authid current_user is
  3    v int;
  4  begin
  5    execute immediate 'grant dba to scott';
  6    select 1/count(*) into v from scott.t;
  7  end;
  8  /

Procedure created.
复制


当然,作为斯科特,我尝试做什么授权并不重要-我将不被允许执行它们。但是当然... 我可以回去打电话 :-)

"Hi Christine, Scott again. I thought I'd fixed that but its still not working - can you see if it fails for you too?


而且由于您只是 * 只是看 * 代码,而您的sqlplus窗口只是 * 坐在那里 * 从几分钟前... 您这样做:

SQL> exec scott.my_proc
BEGIN scott.my_proc; END;

*
ERROR at line 1:
ORA-01476: divisor is equal to zero
ORA-06512: at "SCOTT.MY_PROC", line 5
ORA-06512: at line 1

复制


并回复...

"Hey Scott...yeah, same error"


还有那个 ....是我如何黑进你的数据库 :-)

SQL> conn scott/tiger
Connected.

SQL> select * from session_roles;

ROLE
----------------------------------
CONNECT
RESOURCE
DBA            <============= !!!!!!!!!
复制


所以回到你的问题...上面的演示是privs一直工作的方式-但是在12c中,我们为您提供了更多的工具来控制它。用户执行升级权限操作 (例如向某人授予dba) 的能力现在可以通过继承权限权限进行控制。默认情况下,它是公开的 (如您所见),因为我们保持功能与数据库的先前版本兼容。

这里有更多细节

https://docs.oracle.com/database/121/DBSEG/dr_ir.htm#DBSEG658


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论