数据库原理实验二 数据库管理 实验报告

                                    广州大学学生实验报告
                                     实验二:数据库管理         

此篇分享仅供参考学习,图文禁复制,勿作他用!谢谢配合!

数据库原理实验之实验二:数据库管理
软件:Oracle SQL Developer

今天实验才刚开始,花几个小时做完了实验二,呼------,舒服啊!要是所有的实验都跟数据库原理实验一样做得这么舒服就好了哈哈!

在这里插入图片描述

1、用户权限管理

实验目的:

对ORACLE数据库系统的用户权限管理有感性认识。

实验内容:
理论学习:Oracle权限设置

(基础好的小伙伴可以直接略过理论学习,直接进入实操!)

一、权限分类:
系统权限:
    系统规定用户使用数据库的权限。(系统权限是对用户而言)。
实体权限:
    某种权限用户对其它用户的表或视图的存取权限(针对表或视图而言)。 
    
二、系统权限管理:
1、系统权限分类:
   DBA:拥有全部特权,是系统最高权限,只有DBA才可以创建数据库结构。
   RESOURCE:拥有Resource权限的用户只可以创建实体,不可以创建数据库结构。
   CONNECT:拥有Connect权限的用户只可以登录Oracle,不可以创建实体,不可以创建数据库结构。
   对于普通用户:授予connect, resource权限。
   对于DBA管理用户:授予connect,resource, dba权限。

2、系统权限授权命令:
  系统权限只能由DBA用户授出:sys, system(最开始只能是这两个用户)
  授权命令:grant connect, resource, dba to 用户名1 [,用户名2]...;
  普通用户通过授权可以具有与system相同的用户权限,但永远不能达到与sys用户相同的权限,system用户
  的权限也可以被回收。
例:以system用户身份连接数据库之后,执行:
create user cc identified by ccpassword ;
grant resource, connect, DBA  to cc;
查询用户拥有哪里权限:
select * from dba_role_privs;
select * from dba_sys_privs;
select * from role_sys_privs;
删除用户: drop user 用户名 cascade;  
//加上cascade则将用户连同其创建的东西全部删除
 
3、系统权限传递:
  增加WITH ADMIN OPTION选项,则得到的权限可以传递。
  grant connect, resource to CC with admin option;  //可以传递所获权限
 
4、系统权限回收:系统权限只能由DBA用户回收
  revoke dba, resource from CC;

5、删除用户
  drop user 用户名;  //用户没有建任何实体
  drop user 用户名 CASCADE;  // 将用户及其所建实体全部删除
  说明:当前正连接的用户不得删除。

三、实体权限管理
1、实体权限分类:
    select, update, insert, alter, index, delete, all   //all包括所有权限
    execute  //执行存储过程权限
    user01:
    grant select, update, insert on product to user02;
    grant all on product to user02;
    user02:
    select * from user01.product;
    // 此时user02查user_tables(连接中能显示的),不包括user01.product这个表,但如果
    查all_tables则可以查到,因为他可以访问。all_tables是某一用户所拥有的或有访问权限的表。
    user_tables是某一用户所拥有的表。
    
2. 将表的操作权限授予全体用户:
    grant all on product to public;  
    // public表示是所有的用户,这里的all权限不包括drop。
    select owner, table_name from all_tables; // 用户可以查询的表
    select table_name from user_tables;  // 用户创建的表
    select grantor, table_schema, table_name, privilege from all_tab_privs; 
    // 获权可以存取的表(被授权的)
    select grantee, owner, table_name, privilege from user_tab_privs;   
    // 授出权限的表(授出的权限)
 
3. DBA用户可以操作全体用户的任意基表(无需授权,包括删除):
DBA用户:
   create table stud02.product(id number(10), name varchar2(20));
   drop table stud02.emp;
   create table stud02.employee as select * from scott.emp;

4. 实体权限传递(with grant option):
user01:
   grant select, update on product to user02 with grant option;
   // user02得到权限,并可以传递。
 
5. 实体权限回收:
user01:
   revoke select, update on product from user02;  //传递的权限将全部丢失。
 
说明:如果取消某个用户的对象权限,那么对于这个用户使用WITH GRANT OPTION授予权限的用户来说,
同样还会取消这些用户的相同权限,也就是说取消授权时级联的。
正式操作:

1、以SYSTEM身份连接到orcl数据库,创建新的用户并授权(如果原来已有这个用户,可以忽略本步骤):

--system用户中执行下面语句:
create user cc identified by c123;
grant resource, connect, DBA  to cc;   
--然后新建连接,输入用户名和密码及一些信息后连接。

查询结果如下:(用户cc已成功连接):
在这里插入图片描述
在这里插入图片描述
2、以用户CC的身份建立连接,并在此连接下执行后面的操作;

select * from user_role_privs;
问:可以看到自己的权限,有多少种权限?
答:看到用户cc有3种权限,分别是connect、resource、DBA。

结果截图:
在这里插入图片描述
3、在CC连接中:拷贝代码运行,删去旧的同名数据表(如果是新创建的用户,此步骤可以省略):

--复制下面这段代码执行,可删去旧的同名数据表
Declare
tmp integer default 0;
Begin
select count(*) into tmp from user_tables where table_name='RB';
if(tmp>0) then
execute immediate 'drop table RB';
end if;
select count(*) into tmp from user_tables where table_name='READER';
if(tmp>0) then
execute immediate 'drop table READER';
end if;
select count(*) into tmp from user_tables where table_name='BOOK';
if(tmp>0) then
execute immediate 'drop table BOOK';
end if;
end;

(我是新创建的用户cc,所以省略此步了。)

4、在CC连接中:拷贝代码运行,建立表格及输入数据:

--执行以下语句创建表格并插入一些数据:
create table Reader
(
    RNO	varchar2(4) primary key,
    Rname	varchar2(10) not null,
    Rsex	varchar2(2),
    Rage	integer,
    Rboss	varchar2(10),
    Raddress	varchar2(30)
) ;
insert into Reader (RNO,Rname,Rage,Rsex,Rboss, Raddress) 
values('R001','张三',20,'男','李四','416');

create table Book
(
    BNO	varchar2(4),
    Bname	varchar2(50) not null,
    Bauthor	varchar2(50),
    Bpress	varchar2(50),
    Bprice	numeric(6,2), 
    primary key(BNO)
);
insert into book (BNO,Bauthor,Bname, bpress, bprice) 
values('B001','严蔚敏','数据结构','清华大学出版社',null);

create table RB
(
    RNO varchar2(4),
    BNO varchar2(4),
    RBdate date default sysdate,
    primary key(RNO,BNO),
    foreign key (RNO) references Reader(RNO),
    foreign key (BNO) references Book(BNO)
);
insert into RB (RNO,BNO) values ('R001','B001');

5、在CC连接中:确认orcl数据库中有这三个数据表,以及相应的数据。

--执行语句:
select * from all_tables where owner='CC' ;
--或者执行:
select * from DBA_tables where owner='CC';

结果均为:
在这里插入图片描述

--依次执行语句:
select * from reader;
select * from book;
select * from rb;

相应的数据表:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
6、在CC连接中:查询用户CC的权限信息(每句单独执行):

--分别执行下列代码:
select * from dba_role_privs;
select * from dba_sys_privs;
select * from role_sys_privs;

第一句结果截图:
在这里插入图片描述
第二句结果截图:(unlimited tablespace表示无限制的表空间权限)
在这里插入图片描述

第三句结果:查询得出的表格列出了很多角色及其权限。其中包括DBA、connect、resource。

7、在CC连接中:查询用户创建的表。

select table_name from user_tables;
--查询的是用户cc创建的表的表名table_name

结果:
在这里插入图片描述
8、在CC连接中:删去数据表BR,成功吗?

drop table rb;
--结果:脚本输出:Table RB 已删除
--再次执行:
select table_name from user_tables;
问:显示什么结果?
答:RB表已删除,查询结果只有用户cc创建的reader表和book表了。

结果截图:
在这里插入图片描述
9、回收用户CC的部分权限:以SYSTEM的身份连接(可以在SQL DEVELOPER的右上角切换),在此连接中执行。

Revoke dba, resource from CC;
--结果:脚本输出:Revoke 成功
--再执行:
select * from user_role_privs;
--查看用户权限,只有connect了。

结果截图:
在这里插入图片描述
10、以CC的身份连接数据库(可以在SQL DEVELOPER的右上角选择连接),执行:

create Table Aa(cola int);
问:成功吗?为什么?
答:执行失败!
原因:第9(即上一步操作)已经回收了用户cc的DBA和resource权限,用户cc已经无权限创建表格了。

结果截图:
在这里插入图片描述
11、切换为SYSTEM的连接,执行:

grant resource to CC;
--脚本输出:Grant 成功

12、切换为CC的连接,执行:

select * from user_role_privs;
问:可以看到自己的权限,有多少种权限?
答:用户cc有两种权限:conect和resource。

结果截图:
在这里插入图片描述

create Table Aa(cola int);
问:成功吗?为什么?
答:执行成功!因为system用户已经把resource权限授予用户cc了,所以用户cc有权限创建表格了。

13、切换为SYSTEM的连接,执行:

DROP USER CC;
问:成功吗?为什么?
答:断开连接后执行语句,执行失败!
原因:必须指定cascade以删除CC。

结果截图:
在这里插入图片描述
14、删除连接CC,在SYSTEM的连接中,执行:

DROP USER CC;
问:成功吗?为什么?
答:断开连接后,执行失败!原因:未指定cascade。

问:怎样才能成功删除用户CC ? 仅仅断开连接就行了吗?
答:不是仅仅断开连接就行,断开连接后,还要执行语句:drop user cc cascade;
-即在后面加上cascade才可以。

Drop User Cc Cascade;
问:为何要加Cascade ?删去后,还能以用户CC的身份连接吗?
答:因为用户cc创建了一些基本表,在不先删除基本表的前提下想要删除用户cc,
即要加cascade才能删除成功。删除后不能以用户cc的身份连接,测试会显示:
状态: 失败 -测试失败: ORA-01017: invalid username/password; logon denied,
意思是不再连接到oracle。

结果截图:
在这里插入图片描述
15、在SYSTEM的连接中,重新创建用户CC和DD:

--执行下列语句:
create user cc Identified By c123;
create user dd identified by d123; 
grant resource, connect, DBA  to cc,dd;

--查看这两个用户的权限(只有SYSTEM才有权执行下面这条语句):
select * from dba_role_privs where GRANTEE in ('CC','DD');

结果截图:(两个用户均有DBA、resource、connect权限)
在这里插入图片描述
16、以CC和DD的身份分别建立连接,使得目前系统加上原来的SYSTEM共有三个连接(为识别方便,连接名和用户名一致)
【说明】连接名为xxe的是system用户,software是导论实验创建的连接,请忽略!
我的连接结果截图:
在这里插入图片描述

--选择CC连接,执行:
Create Table from_CC(内容 char(1));
Insert into from_cc values('a');
select * from from_cc;

结果截图:
在这里插入图片描述

--选择DD连接,执行:
select owner
  • 10
    点赞
  • 37
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值