【实训01】基于视图的访问控制 【实训02】基于角色的访问控制
ps:过程可以跟着题目一步步做,以下是答案,没有过程。
【实训01】基于视图的访问控制
第1关:基于视图的简单查询
任务描述
掌握视图的定义与使用方法;
相关知识
为了完成本关任务,你需要掌握:1.如何在sqlserver中创建视图,2.如何使用视图查询。
1.连接数据库和初始化数据库
切换目录至/data/workspace/myshixun
cd /data/workspace/myshixun
给init.sh添加运行权限,并运行初始化数据库。脚本将会创建company数据库,并依次创建员工表,客户表,销售主表,销售明细表,产品名称表。
chmod +755 init.sh
./init.sh
2.连接数据库
使用sqlcmd连接 SQLServer :
sqlcmd -S localhost -U sa -P '<123123Aa!@>'
sqlcmd 是连接数据库必要的语句, localhost 代表从本地连接,sa 是用户名, '<123123Aa!@>' 是密码。
3.创建销售订单相关视图
为了创建销售订单相关视图,需要了解销售明细表结构,如下
create table 销售明细表(
订单编号 int NOT NULL,
产品编号 char(5) NOT NULL,
销售数量 int NOT NULL,
单价 numeric(7,2) NOT NULL,
订单日期 datetime NULL
)
创建一个视图V_ItemCount,方便查询销售订单相关
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>' #连接sqlserver
>USE company
>GO
>CREATE VIEW V_ItemCount
>AS
>SELECT 订单编号, 产品编号, 销售数量 as 订货数量 FROM 销售明细表;
>GO
编程要求
使用上面创建的视图V_ItemCount查询销售订单中产品编号为P0001的订货数量,
将总的订单数量写入/data/workspace/myshixun/result中
点击评测。
注意:例如存在5个订单,数量分别为1,2,3,4,5。需要向/data/workspace/myshixun/result中写入15
测试说明
平台会对结果进行测试:
如果正确会输出correct
开始你的任务吧,祝你成功!
(粘贴用鼠标右键)依次输入以下
cd /data/workspace/myshixun
vi /data/workspace/myshixun/result
进入界面之后按 i,进入insert模式
第一行输入 12
按esc键退出,输入 :wq
第2关:可见列控制
任务描述
创建新用户并赋予新用户User1查询产品名称表权限。
创建视图V_Item查询产品名称表,并将视图权限赋予User1
创建成本小于1000的产品视图VIEW_CP_PRICE1000,并将视图权限赋予User1
使用User1用户登录,并使用视图VIEW_CP_PRICE1000查询价格在1000以下产品的产品编号、名称和成本
相关知识
为了完成本关任务,你需要掌握:1.如何在sqlserver中创建视图,2.如何使用视图查询,3.创建新数据库用户,4.为数据库用户赋予表、视图等权限。
1.连接数据库和初始化数据库
切换目录至/data/workspace/myshixun
cd /data/workspace/myshixun
给init.sh添加运行权限,并运行初始化数据库。脚本将会创建company数据库,并依次创建员工表,客户表,销售主表,销售明细表,产品名称表。
chmod +755 init.sh
./init.sh
2.连接数据库
使用sqlcmd连接 SQLServer :
sqlcmd -S localhost -U sa -P '<123123Aa!@>'
sqlcmd 是连接数据库必要的语句, localhost 代表从本地连接,sa 是用户名, '<123123Aa!@>' 是密码。
3.创建销售订单相关视图
为了创建产品名称相关视图,需要了解产品名称表结构,如下
create table 产品名称表(
产品编号 char(5) NOT NULL primary key,
产品名称 varchar(20) NOT NULL,
成本 int NOT NULL
)
创建一个视图V_Item,查询所有产品的信息(显示列:产品编号、产品名称、成本)
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>' #连接sqlserver
>USE company
>GO
>CREATE VIEW V_Item
>AS
>SELECT * FROM 产品名称表;
>GO
4.新用户User1并授予产品名称表权限
创建新用户User1,密码为User1_pass,并赋予产品名称表权限
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>' #连接sqlserver
> use company
> go
> create login User1 with password = 'User1_pass';
> go
> create user User1 for login User1 with default_schema=dbo;
> go
> GRANT SELECT ON 产品名称表 TO User1
> go
将视图V_Item的产品编号, 产品名称权限赋予User1
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>' #连接sqlserver
> use company
> go
> GRANT SELECT ON V_Item(产品编号, 产品名称) TO User1;
> go
使用sa权限登录数据库,查看company数据库中的表如下
使用User1权限登录数据库,查看company数据库中的表如下
对比发现,User1只能查看被授权的产品名称表。
使用sa权限登录数据库,使用视图V_Item查看所有数据如下
使用User1权限登录数据库,使用视图V_Item查看所有数据如下,因为视图未授予成本列查看权限,所以查看失败
编程要求
1.创建成本小于1000的产品视图VIEW_CP_PRICE1000,授予用户User1查看产品视图VIEW_CP_PRICE1000的权限
2.使用User1登录并基于VIEW_CP_PRICE1000视图,查询价格在1000以下产品的产品编号、名称和成本
将查询到的产品编号写入/data/workspace/myshixun/result2中
点击评测。
注意:例如存在3个产品编号,分别为P0001,P0001,P0002。需要向/data/workspace/myshixun/result2中写入P0001,P0001,P0002
测试说明
平台会对结果进行测试:
如果正确会输出correct
开始你的任务吧,祝你成功!
cd /data/workspace/myshixun
vi /data/workspace/myshixun/result2
步骤和第一题类似,进入insert界面之后,输入
P0005,P0007,P0011,P0012
按esc键退出,输入 :wq
第3关:加密视图与更新视图
任务描述
利用T-SQL语句,要求加密并保证对该视图的更新都要符合成本小于1000这个条件。对于视图VIEW_CP_PRICE2000进行以下数据更新
插入一条产品记录('100082','数码相机',500)。
将产品编号为’100082’的成本改为1500。
删除产品编号为’100082’的产品。
相关知识
为了完成本关任务,你需要掌握:1.如何在sqlserver中创建视图,2.如何使用视图查询,3.T-SQL语句查询。
1.连接数据库和初始化数据库
切换目录至/data/workspace/myshixun
cd /data/workspace/myshixun
给init.sh添加运行权限,并运行初始化数据库。脚本将会创建company数据库,并依次创建员工表,客户表,销售主表,销售明细表,产品名称表。
chmod +755 init.sh
./init.sh
2.连接数据库
使用sqlcmd连接 SQLServer :
sqlcmd -S localhost -U sa -P '<123123Aa!@>'
sqlcmd 是连接数据库必要的语句, localhost 代表从本地连接,sa 是用户名, '<123123Aa!@>' 是密码。
3.创建视图VIEW_CP_PRICE1000
为了创建产品名称相关视图,需要了解产品名称表结构,如下
create table 产品名称表(
产品编号 char(5) NOT NULL primary key,
产品名称 varchar(20) NOT NULL,
成本 int NOT NULL
)
利用T-SQL语句创建VIEW_CP_PRICE1000,加密并保证对该视图的更新都要符合成本小于1000这个条件。
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>' #连接sqlserver
>USE company
>GO
>CREATE VIEW VIEW_CP_PRICE1000
>WITH ENCRYPTION AS
>SELECT * FROM 产品名称表 WHERE 成本 < 1000
>GO
编程要求
利用视图VIEW_CP_PRICE1000完成如下操作
1.插入一条产品记录('100082','数码相机',500)。
2.将产品编号为’100082’的成本改为1500。
3.删除产品编号为’100082’的产品。
完成上述操作后,数据库中数码相机的价格为多少?将价格(如果商品被删除无法查询则填入0)写入/data/workspace/myshixun/result3中
点击评测。
注意:例如数码相机价格为1500。需要向/data/workspace/myshixun/result3中写入1500
测试说明
平台会对结果进行测试:
如果正确会输出correct
开始你的任务吧,祝你成功!
cd /data/workspace/myshixun
vi /data/workspace/myshixun/result3
步骤和第一题类似,进入insert界面之后,输入
1500
按esc键退出,输入 :wq
【实训02】基于角色的访问控制
第1关:基于角色的访问控制
任务描述
- 了解基于角色的访问控制
- 创建多个角色赋予不同的权限
- 测试不同权限间的区别
相关知识
为了完成本关任务,你需要掌握:1.如何在sqlserver中创建用户,2.如何给不同用户赋予不同权限。
1.连接数据库和初始化数据库
切换目录至/data/workspace/myshixun
cd /data/workspace/myshixun
给init.sh添加运行权限,并运行初始化实验需要的数据库。
chmod +755 init.sh
./init.sh
2.权限管理
以sa登录,创建一个数据库,数据库名为DB1,在该数据库中创建一个学生表(学号,姓名,性别,年龄,所在系)。
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>'
#创建DB1数据库
> create database DB1
> go
> use DB1
> go
#创建students表
> create table students (
> sid int primary key not null,
> sname varchar(16),
> ssex varchar(8),
> sage int,
> smajor varchar(16)
>)
>go
#插入一条数据
>insert students(sid, sname, ssex, sage, smajor) values (1, 'student1', 'girl', 18,'computer')
> go
以sa登录,创建一个登录(Login),登录名为Login1,密码为login_pass1。以Login1登录,观察可访问的数据库情况。
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>'
> create login Login1 with password = 'login_pass1'
> go
$ sqlcmd -S localhost -U Login1 -P 'login_pass1'
退出 SA 并以 Login1 登录
> use DB1
> go
当使用Login1登录时无法查看DB1数据库
3. 以sa登录,在DB1数据库中创建数据库用户weng,使用户weng能用登录名Login1登录,并成为DB1的数据库用户,再次以Login1登录,观察可访问的数据库情况
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>'
> use DB1
> go
> create user weng for login Login1
> go
#赋予权限
> grant select, insert, update on students to weng
> grant alter on schema::dbo to weng
> grant create table to weng
> go
当使用Login1登录时可以查看DB1数据库
以sa登录,用收权语句收回weng用户创建表的权力,查询学生表的权力,向学生表中添加、修改、删除记录的权力
$ sqlcmd -S localhost -U sa -P '<123123Aa!@>'
> use DB1
> go
> revoke select, insert, update on students to weng
> revoke create table to weng
> go
编程要求
创建一个登录,登录名user2,密码user_pass2,并赋予user2访问DB2数据库权限
获取DB2数据库中students表的所有内容
完成上述操作后,将得到的所有数据年龄相加写入/data/workspace/myshixun/result中
点击评测。
注意:例如得到两条数据年龄分别为24,25。则需要向/data/workspace/myshixun/result中写入49
测试说明
平台会对结果进行测试:
如果正确会输出correct
开始你的任务吧,祝你成功!
cd /data/workspace/myshixun
vi /data/workspace/myshixun/result
步骤和第一题类似,进入insert界面之后,输入
62
按esc键退出,输入 :wq