failed_login_attempts 3 --最多允许用户3次登录失败 password_life_time unlimited --可用天数 password_reuse_time unlimited --间隔天数
password_reuse_max unlimited --口令重新使用前必须改变的次数 password_lock_time unlimited; --锁定账户天数 4、与用户有关的视图
ALL_USERS视图:数据库所有用户的信息
USER_TS_QUOTAS:当前用户的表空间使用限额信息 DBA_TS_QUOTAS:所有用户表空间限额 DBA_SYS_PRIVS:所有用户权限信息 5、修改用户
alter user
** default role resource,connect 可以授予用户缺省角色 6、删除用户
drop user 用户名 [cascade];
**加cascade参数不经提示删除模式下实体 7、创建角色
create role rolename; 8、授权
? 授系统权限
grant system_priv | role[,…] to user | role | public [with admin option];
注:加with admin option选项允许用户将得到的系统权限或角色授予其它用户或角色,给角色授权时不能加with admin option ? 授对象权限
grant objec_priv [(column[,…])][,……] on object to user |role | public [ with grant option];
object_priv包括:alter、delete、index、insert、select、update、 execute(对存储过程)、 references(在表上定义外键约束的权限) 或 grant all on object to user | role | public [ with grant option];
注意:为了给其他用户授予实体权限,此实体必须是你自己拥有的或你已被授予了对此实体的
6
WITH GRANT OPTION权限。 9.收回权限
revoke 语句 10.系统默认角色
? DBA:所有系统权限
? RESOURCE:给开发人员使用,具有有系统权限:create cluster, create index, create procedure,
create sequence, create table, create trigger, create type。
? CONNECT:给最终用户使用,具有系统权限:create session,alter session,create cluster,create
database link,create sequence,create sysnonym,create table,create view
四、实验内容
1.验证create session的作用(注:进入Sql*plus,可以用show user命令查看用户名) 以system用户连接数据库,创建用户testuser; 以testuser登录,连接数据;
以system用户登录,给testuser 用户授予create session权限; 再试用testuser登录。
2.在创建用户时,给用户赋予了表空间的配额,测试系统权限create table与create any table的差异
以system用户连接数据库,给用户testuser授予create table权限;
以testuser用户登录,验证其能否创建自己模式的表,是否能创建scott模式的表(在表名前加scott);
以system用户登录,为用户testuser授予create any table 的权限,再次验证其是否能创建其它模式的表(注:验证时以testuser用户登录)
3.在创建用户时,不给用户赋予表空间的配额,给用户授予create table权限,测试用户能否建表
以system用户,创建另外一个用户test,在创建时不给用户赋予表空间的配额,给用户授予create table权限;
以tesst用户登录,测试用户能否创建表。
4.测试在没有被授予select any table或select对象权限的情况下,用户能否查询数据 5.测试在没有被授予insert any table或insert对象权限的情况下,用户能否插入新记录 6.测试用户在没有被授予drop any table权限的情况下,能否删除自己模式下的表,能否删除自己在scott用户下建立的表。
7.创建一个角色,给角色赋予create session、create any table、select any table、update any table、
7
drop any table权限。再将角色授予一个有表空间配额的新用户,测试用户的权限。 8.利用system/123用户登录数据库,参照下面的过程来验证用户在没有某个表的数据插入权限的情况下,利用存储过程(用户被授予了执行权限)来插入数据。 a.创建存储过程
create or replace procedure
insertstudent(sno number,sname varchar2,sex varchar2,birthday date,dno varchar2) as begin
insert into system.student values(sno,sname,sex,birthday,dno); end; b.创建用户 create user testuser identified by testuser default tablespace users temporary tablespace temp quota unlimited on users quota 10M on temp; c. 给用户赋权
grant create session to testuser; grant select on student to testuser; grant execute on insertstudent to testuser;
d.利用testuser/testuser帐户登录SQL*Plus,做插入数据操作
insert into system.student values(23400,'lishi','男','10-12月-1979','d01'); 结果失败。
但执行下面的PL/SQL程序:
begin
system.insertstudent(23400,'lishi','男','10-12月-1979','d01'); end;
结果插入数据成功。
8
实验四 PL/SQL程序设计
一、实验目的
1. 掌握PL/SQL程序设计方法。
2. 能利用PL/SQL 程序来解决具体的操作问题 一、实验环境
一台计算机,安装了WINDOWS 2000 SERVER和Oracle 9i。Oracle帐户(system/123, sys/123, scott/tiger) 二、预备知识
1.PL/SQL
PL/SQL(Procedure Language/SQL)语言是Oracle对SQL语言的过化扩充,是一种完整的编程语言;将过程化语言的数据处理能力与SQL语言的访问数据库的能力有机地结合在一起;PL/SQL是一种“后台技术”,它不是用来编写面向用户界面的程序,主要用在编写服务器端程序,如编写存储过程、触发器、包过程等。
PL/SQL程序的基本单元是语句块,所有的PL/SQL程序都是由语句块构成的,语句块之间可以相互嵌套,每个语句块完成特定的功能。
一个完整的PL/SQL语句块由三个部分组成。
PL/SQL块可以分两类,一类称为匿名块,另一类称为命名块。匿名块是指动态生成,只能执行一次的块,不能由其他应用程序调用。命名块是指一次编译可多次执行的PL/SQL程序,包括函数、存储过程、包、触发器等。例如:
CREATE OR REPLACE PROCEDURE showavgsal(p_deptno NUMBER) AS
V_sal number(6,2); BEGIN
SELECT avg(sal) into v_sal from emp where deptno=p_deptno; DBMS_OUTPUT.PUT_LINE(v_sal); END showavgsal; 2.游标
当在PL/SQL块中执行查询语句(SELECT)和数据操纵语句(DML)时,系统会在内存中分配一
9
DECLARE 声明部分、定义变量、数据类型、异常、局部子程序等 BEGIN 执行部分,实现块的功能 EXCEPTION 异常处理部分,处理程序执行过程中产生的异常 END; 个缓冲区,缓冲区中包含了处理过程的必需信息,包括已经处理完的行数、指向被分析行的指针和查询情况下的活动集,即查询语句返回的数据行集。游标是指向该缓冲区的句柄或指针。系统使用游标处理多行数据。
PL/SQL中游标分为两类:显示游标和隐式游标。 显式游标的操作过程,如下: no yes 空 定义游标 打开游标 检索游标 关闭游标 显示游标用于处理返回多行数据的SELECT查询,但所有的SQL语句都有一个执行的缓冲区,隐式游标就是指向该缓冲区的指针,由系统隐含地打开、处理和关闭。隐式游标又称为SQL游标。 三、实验内容
编制PL/SQL程序,完成下面任务
1. 编写一个PL/SQL块,输出所有员工的员工名、员工号、工资和部门号。
2. 查询名为“SMITH”的员工信息,并输出其员工号、工资、部门号。如果该员工不存在,则插
入一条新记录,员工号为2007,员工名为“SMITH”,工资为1500,部门号为10。如果存在多个名为“SMITH”的员工,则输出所有名为“SMITH”的员工号、工资和部门号。
3. 给职工涨工资,少于800元的涨100元,大于等于800元的涨200元。在屏幕上输出工资总额
及涨工资的总额。
10