数据库管理系统的维护与管理

掌握DBMS提供的数据库用户和权限管理机制;理解存储过程概念,掌握存储过程与触发器的使用;掌握数据库备份与恢复方法。

实验环境:

openEuler操作系统上的openGauss数据库

实验内容

1.数据库安全性

(1)数据库账户的添加、删除

添加用户Tom,登录密码为137570

1
create user Tom password '137570';


发现密码至少需要8个字符

修改密码为137570911

1
create user Tom password '137570911';


又发现需要至少需要3种字符

最终修改密码为casual_user@137570

1
create user Tom password 'casual_user@137570';

再创建以下三个用户
用户Jerry 密码Jerry@911
用户XiaoMing 密码XiaoMing&762505
用户LiHua 密码LiHua@12581

1
2
3
create user Jerry password 'Jerry@911';
create user XiaoMing password 'XiaoMing&762505';
create user LIHua password 'LiHua@12581'

删除用户XiaoMing

1
drop user XiaoMing cascade;

(2)对账户进行授予权限、收回权限

student表所有权限赋予用户Tom

1
grant all privileges on student to Tom;

student表的s_id,s_name,s_major的查询、更新权限赋予用户Jerry

1
2
3
grant select (s_id,s_name,s_major),
update (s_id,s_name,s_major)
on student to Jerry;

student表数据的查询权限赋予用户LiHua

1
grant select on student to LiHua;

收回用户LiHuastudent表的所有权限

1
revoke all privileges from LiHua;

收回用户jerrystudent表中对s_ids_name的更新权限

1
revoke update (s_id,s_name) on student from Jerry;

2.触发器,存储过程的使用

(1)创建存储过程并执行

创建更新借书表borrow_book中的还书时间r_time的存储过程,名为update_return_book;

1
2
3
4
5
6
7
8
9
create procedure update_return_date
(in stu_id varchar(10) , in book_id varchar(10) , in return_date date)
as
begin
update borrow_book
set r_time = return_date
where stu_id = s_id and book_id = b_id;
end;
/

原先borrow_book表中数据如下:

调用刚才创建的过程

1
call update_return_date ('003837','34224','2022-11-9');

再次查看该表的数据发现已经发送改变

(2)创建触发器并测试效果

创建触发器函数,功能是在还书更细还书时间的时候将相应的图书库存+1

1
2
3
4
5
6
7
8
9
10
create or replace function update_booknum()
returns trigger
as
$$
declare
begin
update book set b_num=b_num+1 where b_id=old.b_id;
return new;
end;
$$ language plpgsql;

创建触发器,在还书更新还书时间后调用上述触发器函数

1
2
3
4
create trigger return_book
after update of r_time on borrow_book
for each row
execute procedure update_booknum();

原先图书表book数据如下

更新还书时间r_time

1
2
update borrow_book set r_time = '2022-11-12'
where b_id = '34224' and s_id = '043858';

再次查看book表可以看到相应的图书库存已经发生变化

3.数据库备份与恢复

(1)对所创建的数据库进行备份

创建备份目录并且启动数据库

1
mkdir -p /home/omm/physical/backup

对数据库进行物理备份

1
gs_basebackup -D /home/omm/physical/backup -p 26000

查看备份好的文件

(2)利用备份进行数据库恢复

/gaussdb/data/db1原文件如下

模拟数据被破坏

恢复数据库文件

1
cp -r /home/omm/physical/backup/.  /gaussdb/data/db1


数据已经恢复

实验总结

openGauss创建存储过程也有所不同,openGauss中没有delimiter命令,主要创建过程如上所示。
在创建触发器时,没有注意到openGaussMySQL之间的不同,尝试几次后没有成功,查阅资料得知openGauss需要触发器函数,在定义触发器的时候调用触发器函数才能成功调用
在创建用户时设置密码需要至少三种字符且至少需要8位