Oracle数据库安全管理
Oracle数据库安全管理
一、实验目的
1 掌握Oracle安全控制的实现;
2 掌握Oracle用户管理;权限管理;
3 掌握Oracle数据库角色管理;
4 了解Oracle数据库概要文件的管理;
5 了解Oracle数据库审计;
二、实验要求(具体步骤进行截屏展示并配以文字说明)
1创建一个名为Tom的用户,采用口令认证方式,口令为Tom,默认表空间为USERS,默认临时空间为TEMP。(与创建Tom类似,继续创建用户Jack,Bob);创建完三个用户后,授予相应权限使他们都能连接到数据库;
由于之前的win10oracle和imac中docker两个oracle镜像崩溃,本想再安个虚拟机再装,后来嫌太麻烦于是在林宇靖同学的VM上进行了这次实验
下面的TOM,JACK, BOB的用户名将用TOM_zyh, Jack_zyh, Bob_zyh用户名进行代替,由于该VM没有之前作也的HR表导致一些命令无法实现,但原理经过学习已经掌握大概
CREATE TABLESPACE TEMP_zyh DATAFILE ‘C:\1759116\TEMP_1.DBF’ SIZE 50M;
CREATE USER Tom_zyh IDENTIFIED BY Tom DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
CREATE USER Jack_zyh IDENTIFIED BY Jack DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
CREATE USER Bob_zyh IDENTIFIED BY Bob DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
创建用户Tom_zyh,Jack_zyh,Bob_zyh
GRANT CREATE SESSION TO Tom_zyh;
GRANT CREATE SESSION TO Jack_zyh;
GRANT CREATE SESSION TO Bob_zyh;
给Tom_zyh、Jack_zyh、Bob_zyh授权连接数据库
2 为Tom授予CREATE TABLE, CREATE VIEW系统权限,并可以进行权限传递;将HR方案中EMPLOYEES对象的SELECT, UPDATE, INSERT, DELETE权限授予TOM,并允许对象权限的传递;
GRANT CREATE TABLE,CREATE VIEW TO Tom_zyh WITH ADMIN OPTION;
授予Tom_zyh系统权限,用WITH ADMIN OPTION可以进行权限传递
GRANT SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES TO Tom_zyh WITH GRANT OPTION;
授予Tom_zyh HR方案中EMPLOYEES对象的权限,使用WITH GRANT OPTION 可以进行对象权限的传递
用于没有该原始表,依旧错误
3 查看Tom, Jack, Bob用户所具有的对象权限和系统权限的详细信息;
这里没有系统和对象权限应该跟原始表确实有关,跟王金峰同学代码运行依旧报错
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’TOM’;
没有对象权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’TOM_zyh’;
没有系统权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’JACK_zyh’;
没有对象权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’JACK_zyh’;
没有系统权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’Bob_zyh’;
没有对象权限
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’Bob_zyh’;
没有系统权限
4 以Tom用户登录系统,将CREATE TABLE, CREATE VIEW系统权限,HR方案中EMPLOYEES对象的SELECT, UPDATE, INSERT, DELETE权限授予Jack和Bob,并查看Tom, Jack, Bob用户所具有的对象权限和系统权限的详细信息;
退出系统用户,用Tom_zyh用户登录系统
GRANT CREATE TABLE,CREATE VIEW TO JACK WITH ADMIN OPTION;
GRANT SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES TO JACK WITH GRANT OPTION;
GRANT CREATE TABLE,CREATE VIEW TO BOB WITH ADMIN OPTION;
GRANT SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES TO BOB WITH GRANT OPTION;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’TOM_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’TOM_zyh’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’Jack_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’Jack_zyh’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’Bob_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’Bob_zyh’;
看到TOM_zyh授权给Jack_zyh和Bob_zyh的对象权限和系统权限
5 以SYSTEM用户登录系统,收回用户Tom的CREATE TABLE, CREATE VIEW系统权限,HR方案中EMPLOYEES对象的SELECT, UPDATE, INSERT, DELETE权限,查看Tom_zyh, Jack_zyh, Bob_zyh用户所具有的对象权限和系统权限的详细信息;讨论在收回具有权限传递的系统权限和对象权限的级联效应。
REVOKE CREATE TABLE,CREATE VIEW FROM TOM_zyh;
REVOKE SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES FROM TOM_zyh;
回收系统权限和对象权限
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’TOM_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’TOM_zyh’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’JACK_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’JACK_zyh’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’BOB_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’BOB_zyh’;
讨论在收回具有权限传递的系统权限和对象权限的级联效应。
TOM_zyh的权限被收回,由TOM_zyh授予Jack_zyh和Bob_zyh的权限同样也被收回
6 创建一个角色(名字自拟),授予该角色CREATE TABLE, CREATE VIEW系统权限,HR方案中EMPLOYEES对象的SELECT, UPDATE, INSERT, DELETE权限,并将该角色指派给Tom,查看Tom用户所具有的对象权限和系统权限的详细信息;
CREATE USER ZYH IDENTIFIED BY ZYH DEFAULT TABLESPACE USERS TEMPORARY TABLESPACE TEMP;
GRANT CREATE SESSION TO ZYH;
GRANT CREATE TABLE,CREATE VIEW TO ZYH WITH ADMIN OPTION;
GRANT SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES TO ZYH WITH GRANT OPTION;
重复之前的操作,创建用户ZYH
登录ZYH,授予TOM权限
GRANT CREATE TABLE,CREATE VIEW TO TOM_zyh WITH ADMIN OPTION;
GRANT SELECT,UPDATE,INSERT,DELETE ON HR.EMPLOYEES TO TOM_zyh WITH GRANT OPTION;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’TOM_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’TOM_zyh’;
To_zyh的权限来自ZYH
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’JACK_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’JACK_zyh’;
SELECT * FROM DBA_TAB_PRIVS WHERE GRANTEE=’Bob_zyh’;
SELECT * FROM DBA_SYS_PRIVS WHERE GRANTEE=’Bob_zyh’;
JACK_zyh和Bob_zyh的权限随着TOM的权限被收回而消失,ZYH授予TOM_zyh的权限不能进行权限传递,JACK_zyh和Bob_zyh没有获得权限
7 创建一个概要文件,DEMO。要求每个用户的最多会话数为3个,最长的连接时间为60分钟,最大空闲时间为20分钟,每个会话占用CPU的最大时间为10秒;用户使用口令登录系统的最大尝试次数为3次,登录失败后账户锁定7天。
CREATE PROFILE DEMO_zyh LIMIT
SESSIONS_PER_USER 3 CONNECT_TIME 60 IDLE_TIME 20
CPU_PER_CALL 100 FAILED_LOGIN_ATTEMPTS 3 PASSWORD_LOCK_TIME 7;
创建概要文件DEMO:create profile demo
限制:limit
最多会话数3个:sessions_per_user 3
最长的连接时间为60分钟:connect_time 60
最大空闲时间20分钟:idle_time 20
每个会话占用CPU的最大时间为10秒:cpu_per_call 100
用户使用口令登录系统的最大尝试次数为3次:failed_login_attempts 3
登陆失败后账户锁定7天:password_lock_time 7
8 将概要文件指派给用户Jack,然后以Jack账户登录系统并连续三次输入错误口令,查看账户状态。
ALTER USER JACK PROFILE DEMO_zyh;
连续输入三次错误口令后闪退
查看账号状态
SELECT ACCOUNT_STATUS FROM DBA_USERS WHERE USERNAME=’Jack_zyh’;
用户Jack_zyh被锁定LOCKED(TIMED)
本文使用 CC BY-NC-SA 3.0 中国大陆 协议许可
具体请参见 知识共享协议
本文链接:https://zyhang8.github.io/2019/10/01/oracle-exp4/