- 实验目的
1、掌握创建用户、用户权限的授权和回收权限等相关命令的使用
2、掌握视图的基本操作。
二、实验内容
在shop数据库中创建两个视图。
- 创建用户shop_view_test;
- 创建视图:sh_view_attr:用于根据商品分类的id查所有属性信息;要求:指定视图用户为DEFINER。
- 查询视图中所有的记录,以及原表中有而视图中没有的字段信息。增加截图分析结果。
- 显示的记录条数限制limit n,测试limit自句在原表中使用select语句和视图的select语句中使用的差异。
- 创建视图:sh_view_goods_attr:用于根据商品id查找所有属性信息。要求:指定给试视图分别指定控制视图安全SQL SECURITY的方式分别为:DEFINER,和INVOKE。
- 为视图:sh_view_goods_attr创建用户,并指定用户的权限为select、update和delete权限。在该权限下,执行以上三个命令,给视图表做相应的操作,并能看到效果,截图分析。
- 回收以上用户update和delete的权限。再执行update和delete操作,看是否能执行,截图分析。
三、实验步骤和过程记录
- CREATE USER `sh_view_test`@`localhost` IDENTIFIED WITH caching_sha2_password;
- GRANT Delete, Select, Update ON TABLE `shop`.`sh_view_goods_attr` TO `sh_view_test`@`localhost`;
- CREATE VIEW sh_view attr AS
- SELECT
- `a`.`sort` AS `sort1`,
- `a`.`name` AS `attr1`,
- `b`.`sort` AS `sort2`,
- `b`.`name` AS `attr2`,
- `b`.`category_id` AS `category_id`
- FROM
- (
- `sh_goods_attr` `a`
- JOIN `sh_goods_attr` `b` ON ((
- `a`.`id` = `b`.`parent_id`
- )))
- WHERE
- ( `b`.`parent_id` <> 0 )
- ORDER BY
- `a`.`sort` ASC,
- `b`.`sort` ASC;
- SELECT * FROM sh_view_attr WHERE category_id = 6;
- limit字句在原表中使用select语句
- SELECT id, name, price, price*0.8 p FROM sh_goods LIMIT 3;
- CREATE VIEW sh_view_goods_attr AS
- SELECT
- `b`.`name` AS `attr1`,
- `a`.`name` AS `attr2`,
- `c`.`attr_value` AS `attr_value`,
- `c`.`goods_id` AS `goods_id`
- FROM
- ((
- `sh_goods_attr` `a`
- JOIN `sh_goods_attr` `b` ON ((
- `a`.`parent_id` = `b`.`id`
- )))
- JOIN `sh_goods_attr_value` `c` ON ((
- `a`.`id` = `c`.`attr_id`
- )))
- WHERE
- ( `a`.`parent_id` <> 0 )
- ORDER BY
- `b`.`sort` ASC,
- `a`.`sort` ASC ;
- SELECT * FROM sh_view_goods_attr ;
为视图:sh_view_goods_attr创建用户,并指定用户的权限为select、update和delete权限。
- CREATE USER `sh_view_test` @`localhost` IDENTIFIED WITH caching_sha2_password;
- GRANT Delete, Select, Update ON TABLE `shop`.`sh_view_goods_attr` TO `sh_view_test`@`localhost`;
在用户端登录并进行select操作:
在navicat中:
在命令符窗口中:
- SELECT * FROM sh_view_goods_attr;
回收以上用户update和delete的权限。再执行update和delete操作:
问题思考与总结
本次实验遇到了很多问题。
②给用户分配权限后update和delete权限一直不能成功使用,再次分配却又报出“权限已分配”的错误,尝试多次后发现需要重新登录mysql用户才能刷新权限正常使用。
③limit n后的向量指的是第几条记录,与id值无关,实验时没想到这个点,最后每次出来的结果和预期的不一样,以为自己做错了耽误了很多时间。
④‘< >’和‘! =’一样,表示不等于的意思。