- 创建新用户'user_demo',密码为'654321'
CREATE USER 'user_demo'@'localhost' IDENTIFIED BY '654321';
- 基于'sh_product'表创建视图'v_basic_info',展示'id'和'name'字段。安全控制由定义视图的用户权限决定。
CREATE VIEW v_basic_info AS SELECT id, name FROM sh_product;
- 同样基于'sh_product'表创建视图'v_secure_info',但指定'test_user'作为访问控制用户。
CREATE VIEW v_secure_info AS SELECT id, name FROM sh_product;
GRANT SELECT ON v_secure_info TO user_demo;
- 创建第三个视图'v_invoker_info',其安全性由调用者权限决定。
CREATE SQL SECURITY INVOKER VIEW v_invoker_info AS SELECT id, name FROM sh_product;
- 赋予'user_demo'对所有三个视图的SELECT权限。
GRANT SELECT ON v_basic_info TO 'user_demo';
GRANT SELECT ON v_secure_info TO 'user_demo';
GRANT SELECT ON v_invoker_info TO 'user_demo';
- 使用'user_demo'查询各视图并记录结果。
- 给'user_demo'授权访问'sh_product'表。
GRANT SELECT ON exp04.sh_product TO 'user_demo'@'localhost';
- 再次使用'user_demo'查询各视图并分析结果差异。
- 修改'v_secure_info'权限设置为root用户。
- 通过'v_basic_info'插入新数据项,并解释结果。
INSERT INTO v_basic_info VALUES (15, 'HB Pencil');
- 通过'v_secure_info'更新数据项,并说明原因。
UPDATE v_secure_info SET id=13 WHERE id=15;
- 通过'v_secure_info'删除数据项,并讨论影响。
DELETE FROM v_secure_info WHERE id=1;
- 移除视图'v_secure_info'。
DROP VIEW v_secure_info;
- 构建新的视图'v_filtered',仅显示ID小于30的产品信息。
CREATE VIEW v_filtered AS SELECT id, name FROM sh_product WHERE id < 30;
- 利用级联检查创建视图'v_cascade',限制ID值必须小于30。
CREATE VIEW v_cascade AS SELECT id, name FROM v_filtered WHERE id < 30 WITH CHECK OPTION;
- 创建另一个视图'v_local', 应用本地检查选项,确保ID大于20。
CREATE VIEW v_local AS SELECT id, name FROM v_filtered WHERE id > 20 WITH LOCAL CHECK OPTION;
- 尝试向'v_cascade'添加不同ID的数据,并观察行为。
- 向'v_local'插入数据,注意其规则应用方式。
- 授予'user_demo'转授权限的能力。
GRANT ALL PRIVILEGES ON *.* TO 'user_demo' WITH GRANT OPTION;
- 撤销'user_demo'的所有权限。
REVOKE ALL, GRANT OPTION FROM 'user_demo';
- 最后,删除测试用户'user_demo'。
DROP USER 'user_demo';