`

PL/SQL 培训项目实践与练习(一) 整理笔记

阅读更多

题目:

控制客户端应用程序对同一组数据库的访问权限。

需求:

业务数据是存储在数据库中一个SCOTT帐户下的一个表EMP。

要求设计一种方法,客户端在登陆到数据库的时候,除了提供帐户名以及口令之外,还要提供一些其他的一些信息。系统可以根据这些信息,决定这个客户端能看到的EMP表中的特定部门工作的职员。

方式:

首先分析这个需求,简化这个需求

利用已经学习到解决如何让一个帐户只看到一个表中一部分行,而其他部分看不到。这个时候要用到视图,多个帐户和表上的授权三个内容。
之后,分析这个解决方法的不足。

然后进一步满足需求,如何让所有用户都登陆到同一个帐户上,然后还能看到SCOTT帐户下EMP表的不同行的数据。这个时候可以利用现有的其他知识,如角色的生效失效等。

接下来,进一步提高要求,要求所有客户端都登陆到同一个帐户上,而且访问同一个视图,但这个视图可以根据客户端登陆时提供的信息,决定当前会话可以查看的数据。

最后再讨论将这个例子放大到全体业务数据的方法,以及应用Oracle提供的其他功能(如VPD,Lavel Security等),进行其他改进的可能。

目的:综合利用Oracle权限管理,帐户管理,视图,临时表,过程/函数的创建等技术,解决访问控制问题。

相关知识理解笔记:

临时表:
create global temporary table table_name(
  username varchar2(10)
  ......
);
客户端访问服务器端时,服务器端会自动给每个客户端分配一个setion,用以区别不用的客户端,道理就象这个样子,临时表的用处就在此,就象它会自动设置不同的客户端的权限一样,比如:
A在主机上建立一个临时表TEMP,B可以访问到这个表,A在TEMP上插入数据a,对于这个数据a,A可以SELECT到,但是B却不能。同样,B也在这个表上插入一个数据b,对于这个数据b,B可以SELECT到,而A却不能.

PS:根据这个知识,我建立一个临时表,输入一些信息,根据这些信息的不同,我所建立的视图就不同,这样就可以完成本题关键部分。

视图
 create view view_name as select * from table_name where ...
视图是建立在表的基础上的,它只是完成表中一些数据的集体的体现.对于表的本身并不做任何修改。比如:
我有两个表:
create table talbe_person(id number,name varchar(20));
insert into table_person values(...,...);
create table table_name (name,varchar(20));
insert into table_name values(...);
现在我想查看table_person中名字符合table_name里的名字的人的相关信息,我可以以视图的方式实现:
create view view_person as select * from table_person where name in(select * from table_name);

具体操作:

现系统已经存在表EMP。(其中有empno字段)

--建立权限数据表,用来存储对每个客户端分配的不同权限
create table test_privileges (
  id       number(4),
  username varchar2(10),
  empno    number(4)
);

--建立自增序列
create sequence seq_test_id start with 1 increment by 1;

--插入数据,每一行都有一个username字段,用来区别不同的客户端..
insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'HR',7369);

insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'HR',7499);

insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'TEST03',7521);

insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'TEST05',7566);
insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'TEST05',7900);
insert into test_privileges (id,username,empno)
values (seq_test_id.nextval,'TEST05',7902);
commit;

--建立临时表,用来存储用户名,用来区别不同的客户端
create global temporary table t_test_info(
  username varchar2(10)
);

--这里是关键,建立视图。
create view v_emp as
  select * from emp
  where empno in
  (select empno
   from test_privileges s,t_test_info d
   where s.username = d.username);

--这样我每输入不同的用户名,之后
insert into t_test_info values('HR');
--所看到的内容也就不同了
select * from v_emp;
insert into t_test_info values('TEST05');
 select * from v_emp;
insert into t_test_info values('TEST03');
select * from v_emp;

分享到:
评论

相关推荐

    我的PL/SQL学习笔记(一)

    在这个“我的PL/SQL学习笔记(一)”中,我们将探讨PL/SQL的基础知识,包括其语法结构、变量声明、流程控制以及如何与Oracle数据库中的数据进行交互。 首先,PL/SQL的基本结构分为声明部分、执行部分和异常处理部分...

    oracle pl的学习笔记

    描述中提到的内容包含了游标、存储过程、触发器以及集合等PL/SQL的重要概念,并指出学习笔记中包含练习题,这有助于初学者加深理解并掌握PL/SQL编程。 从提供的部分内容来看,知识点包括以下几个方面: 1. SET ...

    oracle复习笔记之PL/SQL程序所要了解的知识点

    Oracle PL/SQL是一种在Oracle数据库中进行复杂数据处理和业务逻辑实现的编程语言。它结合了SQL查询语言的威力和面向过程编程的灵活性。在复习PL/SQL时,以下是一些核心知识点: 1. **基本语法**:PL/SQL程序通常由`...

    oracle培训18天老师笔记

    "Oracle培训18天老师笔记"很可能是对Oracle SQL和PL/SQL基础的深入学习资料,涵盖了数据库查询、数据管理以及程序设计等多个核心领域。下面将详细阐述这些知识点。 一、SQL(Structured Query Language)基础 SQL,...

    plsql学习文件

    通过这份"PLSQL笔记",初学者可以系统地了解和掌握PL/SQL的基本概念、语法和实践技巧,进一步提升在数据库管理领域的专业技能。在实际学习过程中,结合实例进行练习,将理论知识与实际操作相结合,能更有效地巩固和...

    oracle经典笔记

    《SQL语法练习(一).pdf》则聚焦于SQL,关系数据库的标准查询语言。文档可能包含了SQL的基本语法,如SELECT语句、JOIN操作、聚合函数和子查询,以及更高级的主题如视图和索引的使用,这些都是数据查询和分析的核心...

    老方块 ORACLE 教学笔记 整理.

    "老方块 ORACLE 教学笔记 整理"是一份专门针对Oracle数据库学习的资料集合,旨在帮助自学者在家轻松掌握Oracle的核心知识和技能。 Oracle数据库系统的基础是SQL(结构化查询语言),它是用于管理和操作数据库的标准...

    PLSQL学习笔记

    PL/SQL(Procedural Language/Structured Query Language)是Oracle数据库提供的一种结合了SQL语言和过程编程的语言,它扩展了SQL的功能,使得开发人员可以在数据库中编写复杂的程序逻辑。本笔记主要涵盖了以下几个...

    Oracle培训18天老师笔记

    这份"Oracle培训18天老师笔记"旨在帮助初学者快速理解并掌握Oracle的基础知识,通过大量的练习,使得学习者能够熟练运用Oracle的基本语法和命令。 1. **Oracle数据库基础** - 数据库概念:了解什么是数据库,以及...

    C/C++培训课程笔记

    虽然Oracle数据库通常与Java或PL/SQL关联,但C和C++也可以用来连接和操作数据库。通过ODBC(Open Database Connectivity)或OCI(Oracle Call Interface),开发者可以编写C/C++程序来执行SQL查询,插入、更新和...

    数据库SQL oracle的笔记,比较全面的

    在IT领域,数据库是存储、管理与检索数据的核心工具,而Oracle作为世界上最流行的商业数据库管理系统之一,其强大的功能和广泛的应用使得掌握Oracle SQL变得至关重要。本笔记将涵盖Oracle SQL的基础概念、语法结构...

    oracle初学者笔记

    9. **查询训练**:通过实际练习编写各种复杂的查询,提高对SQL的理解和熟练度,是成为一名优秀的数据库用户的关键步骤。 10. **存储过程与函数**:存储过程和函数是预编译的PL/SQL代码块,可以在需要时调用。它们...

    oracle教程笔记

    Oracle教程笔记涵盖了数据库管理系统Oracle的核心概念、安装配置、SQL语言基础、PL/SQL编程以及数据库管理等多个方面。这篇笔记旨在帮助初学者系统地理解和掌握Oracle技术。 首先,Oracle是全球最大的企业级数据库...

    Oracle学习笔记(一天就可以学会,学不会你骂我)

    Oracle学习笔记:一天掌握核心概念 Oracle数据库系统是全球广泛使用的数据库管理系统之一,以其高效、稳定和可扩展性而著称。本教程旨在帮助你快速理解Oracle的基本概念和操作,让你在一天之内能够掌握关键知识。 ...

    个人日常学习资料整理最终

    在"learn"这个子文件夹中,可能会有按照不同主题分类的子目录,比如SQL练习、PL/SQL教程、性能调优案例等。每个子目录可能包含PDF文档、笔记、PPT演示文稿、SQL脚本文件等形式的学习材料。通过系统地学习和实践这些...

    Oracle 全部学习笔记 培训结构的学习资料.

    这个“Oracle全部学习笔记培训结构的学习资料”压缩包文件包含了深入学习Oracle所需的各种材料,对于想要掌握Oracle技术的人来说是一份宝贵的资源。 1. **Oracle基础知识** - 数据库概念:了解数据库的基本概念,...

    oracle学习资料整理.docx

    6. **《Oracle DBA工作笔记:运维、数据迁移与性能调优》**:这本实践性较强的书籍提供了实际工作中遇到问题的解决方案,特别是关于数据库维护、数据迁移和性能优化的技巧。 二、视频教学 1. **数据库系统概论完整...

    Oracle自学自学笔记.docx

    Oracle自学自学笔记主要涵盖Oracle数据库的基本安装验证、常用工具、SQL语言基础以及用户管理等内容。以下是对这些知识点的详细说明: 1. **Oracle安装验证**: - 在安装完成后,Oracle提供了一系列工具供用户管理...

Global site tag (gtag.js) - Google Analytics