ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 5529|回复: 2

[每日一题] PL/SQL Challenge 每日一题:2017-4-10 12C新特性:INHERIT [ANY] PRIVILEGES

[复制链接]
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
发表于 2017-4-25 04:20 | 显示全部楼层 |阅读模式


最先答对且答案未经编辑的puber将获得纪念章一枚(答案不可编辑但可发新贴补充或纠正),其他会员如果提供有价值的分析、讨论也可获得纪念章一枚。

每两周的优胜者可获得itpub奖励的技术图书一本。

以往旧题索引:
http://www.itpub.net/forum.php?m ... eid&typeid=1808

原始出处:
http://www.plsqlchallenge.com/

作者:Steven Feuerstein

运行环境:SQLPLUS, SERVEROUTPUT已打开
注:本题给出答案时候要求给予简要说明才能得到奖品

注:本题执行环境为12c或更高

我执行了下列语句,所在的schema由connect命令所指定:

CONNECT hr/hr

CREATE TABLE qz_performance_reviews
(
   review_for    VARCHAR2 (100),
   star_rating   INTEGER
)
/

GRANT SELECT ON qz_performance_reviews TO PUBLIC
/

BEGIN
   INSERT INTO qz_performance_reviews VALUES ('HR', 5);
   INSERT INTO qz_performance_reviews VALUES ('SCOTT', 1);

   COMMIT;
END;
/

CREATE TABLE qz_todo
(
   id      NUMBER GENERATED ALWAYS AS IDENTITY,
   title   VARCHAR2 (100)
)
/

BEGIN
   INSERT INTO qz_todo (title) VALUES ('Criticize LW.');
   INSERT INTO qz_todo (title) VALUES ('Finish next FY budget.');

   COMMIT;
END;
/

CONNECT SCOTT/tiger

CREATE TABLE qz_todo
(
   id      NUMBER GENERATED ALWAYS AS IDENTITY,
   title   VARCHAR2 (100)
)
/

BEGIN
   INSERT INTO qz_todo (title) VALUES ('Write todo procedure.');
   INSERT INTO qz_todo (title) VALUES ('Debug HR''s code.');

   COMMIT;
END;
/

CREATE OR REPLACE PROCEDURE qz_show_todos
   AUTHID CURRENT_USER
IS
BEGIN
   IF SYS_CONTEXT ('userenv', 'current_user') = 'HR'
   THEN
      EXECUTE IMMEDIATE '
       begin
          update qz_performance_reviews
             set star_rating = -100
         where review_for = :username;
          commit;
       end;'
         USING SYS_CONTEXT ('userenv', 'current_user');
   END IF;
   
   FOR rec IN (  SELECT title
                   FROM qz_todo
               ORDER BY title)
   LOOP
      DBMS_OUTPUT.put_line (rec.title);
   END LOOP;
END;
/

GRANT EXECUTE ON qz_show_todos TO PUBLIC
/

哪些选项在执行之后会导致 "Performance=-100" 被显示在屏幕上?

(A)
CONNECT hr/hr

BEGIN
   SCOTT.qz_show_todos;
END;
/

SELECT 'Performance='||star_rating FROM qz_performance_reviews
/

(B)
CONNECT scott/tiger

BEGIN
   qz_show_todos;
END;
/

SELECT 'Performance='||star_rating FROM hr.qz_performance_reviews
/

(C)
CONNECT hr/hr

REVOKE INHERIT PRIVILEGES ON USER HR FROM PUBLIC
/

BEGIN
   SCOTT.qz_show_todos;
END;
/

SELECT 'Performance='||star_rating FROM qz_performance_reviews
/

(D)
CONNECT hr/hr

ALTER TABLE qz_performance_reviews ADD CONSTRAINT
   rating_range CHECK (star_rating BETWEEN 1 AND 5)
/

BEGIN
   SCOTT.qz_show_todos;
END;
/

SELECT 'Performance='||star_rating FROM qz_performance_reviews
/
论坛徽章:
4
目光如炬
日期:2015-11-01 22:00:00目光如炬
日期:2015-11-01 22:00:00秀才
日期:2017-05-17 11:34:12秀才
日期:2017-05-17 11:39:09
发表于 2017-4-25 15:27 | 显示全部楼层
AC可以

使用道具 举报

回复
论坛徽章:
480
榜眼
日期:2015-09-09 10:34:21秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12秀才
日期:2015-11-23 10:03:12状元
日期:2015-11-23 10:04:09举人
日期:2015-11-23 10:04:09
 楼主| 发表于 2017-4-26 03:27 | 显示全部楼层
答案A, 本期无人得奖。

A: qz_show_todos过程是个调用者权限的程序单元。所以当HR调用它,所有的操作在qz_performance_reviews表上都是允许的。因此,动态的修改被执行,HR被给予很糟糕的性能评价。
B: qz_show_todos过程是SCOTT所拥有的。所以CURRENT_USER 是 SCOTT,而不是HR,动态修改不会执行。因此,不会有-100的评分。
C: 通过将INHERIT PRIVILEGES从PUBLIC收回,HR现在可以确保没有任何一个SCOTT的程序单元可以利用当前用户所具有的更高(或不同的)权限来执行破坏性的操作。
这个选项会报错:
ORA-06598: insufficient INHERIT PRIVILEGES privilege
D: 现在我在qz_performance_reviews表增加了约束来避免star_rating的无效值。对于这道题中的特定的“破坏”行为,这是个好办法。但是如果你真正担心数据库中的特权用户的不恰当行为,你就应该用INHERIT PRIVILEGES 来更加严格地控制他们在数据库中的行为。

使用道具 举报

回复

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

本版积分规则

TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表