实验9.2 权限授予和撤销
【实验目的】
①掌握使用SQL进行权限的授予和撤销的方法。
②掌握使用图形界面工具进行权限的授予和撤销的方法。
【实验内容】
①使用SQL语句授予用户SQLUser1对数据库sales创建视图和表的权限,同时具有授予其他用户的权限,并进行验证。
②使用SQL语句授予用户SQLUser1对数据库sales的agents表的查询、插入、更新权限,并进行验证。
③使用SQL语句授予用户SQLUser2对数据库sales的customers表的列cid、cname的查询权限,并进行验证。
④使用SQL语句授予用户SQLUser2对数据库sales的products表中库存城市为Dallas的产品的编号、名称和单价进行查询的权限,并进行验证。
⑤使用图形界面工具授予用户SQLUser2对数据库sales中表的查询、更新和插入权限,并进行验证。
⑥使用SQL撤销用户账号SQLUser1数据库所有操作权限。
⑦使用SQL撤销用户账号SQLUser2数据库查询表中列的权限。
【实验步骤】
(1)使用SQL语句授予用户创建视图和表的权限
授予用户SQLUser1在数据库sales中创建视图和表的权限,同时授予其他用户的权限,并进行验证。
①用SQLUser1登录账户登录到MySQL,在“Schemas”选项卡中,看到没有任何数据库权限存在,如图9.12所示,表示用户SQLUser1没有对任何已有数据库的操作权限。

图9.12 查看用户权限
②以root身份重新登录到MySQL,单击左上角按钮
,新建查询窗口。
③在查询窗口中输入如下SQL语句:
GRANT CREATE VIEW,CREATE ON sales.*
TO 'SQLUser1'@'localhost'
WITH GRANT OPTION;
④单击工具栏中的
图标,执行上面的SQL语句,如图9.13所示。

图9.13 授予用户权限
⑤验证SQLUser1具有创建表的权限。用SQLUser1登录账户登录到MySQL,依次展开节点“Schemas”→“sales”→“Tables”,右击“Create Table”,能够正常创建表,表示用户SQLUser1已经具备创建表的权限,如图9.14所示。

图9.14 授予用户SQLUser1权限
⑥验证SQLUser1能将创建视图和表的权限再授予其他用户。用SQLUser1登录账户登录到MySQL后,在新建查询窗口中输入如下SQL语句。语句执行成功,如图9.15所示。
GRANT CREATE VIEW,CREATE ON sales.*
TO 'SQLUser2'@'localhost';

图9.15 SQLUser1授予用户SQLUser2创建视图和表的权限
⑦验证SQLUser2具有创建表的权限。用SQLUser2登录账户登录到MySQL,依次展开节点“Schemas”→“sales”→“Tables”,右击“Create Table”,能够正常创建表,表示用户SQLUser2已经具备创建表的权限。
(2)使用SQL语句授予用户查询、插入和更新权限
授予用户SQLUser1对数据库sales的agents表的查询、插入、更新权限。
①用SQLUser1登录账户登录到MySQL,依次单击“Schemas”→“sales”→“Tables”,发现用户SQLUser1对agents表不具有查询、插入和更新权限,如图9.16所示。

图9.16 用户SQLUser1对agents表查询、插入和更新失败
②以root身份重新登录到MySQL,单击左上角按钮
,新建查询窗口。
③在查询窗口中输入如下SQL语句:
GRANT SELECT,INSERT,UPDATE ON sales.agents
TO 'SQLUser1'@'localhost'
④单击工具栏中的
图标,执行上面的SQL语句,如图9.17所示。

图9.17 授予用户SQLUser1对agents表的权限
⑤验证。用SQLUser1登录账户登录到MySQL,依次单击“Schemas”→“sales” →“Tables”,对agents表进行查询、插入和更新操作,如果能够正常执行,表示用户SQLUser1已经具备对agents表的查询、插入、更新权限,验证查询权限如图9.18所示,插入和更新权限的验证类似。

图9.18 验证用户SQLUser1的查询权限
(3)使用SQL语句授予用户对表中列的查询权限
授予用户SQLUser2对数据库sales的customers表的列cid、cname的查询权限。
①用SQLUser2登录账户登录到MySQL,在“Schemas”选项卡中,看到没有任何数据库权限存在,如图9.19所示,表示登录账号SQLUser2不具备对customers表的任何权限。

图9.19 SQLUser2不具备对customers表的任何权限
②以root身份重新登录到MySQL,单击左上角按钮
,新建查询窗口。
③在查询窗口中输入如下SQL语句:
GRANT SELECT(cid,cname) ON sales.customers
TO 'SQLUser2'@'localhost'
④单击工具栏中的
图标,执行上面的SQL语句,如图9.20所示。

图9.20 SQL授予用户SQLUser2查询列的权限
⑤验证。以SQLUser2登录账户登录到MySQL。在“Schemas”选项卡中展开“Schemas”→“sales”→“Tables”,发现已经存在customers表。在查询窗口中输入如下SQL语句,如果执行结果如图9.21所示,则表示用户SQLUser2不具备对数据库sales的customers表的列city、discnt的查询权限。
SELECT city,discnt FROM sales.customers;

图9.21 验证结果1
⑥在查询窗口中输入如下SQL语句,如果执行结果如图9.22所示,则表示用户SQLUser2已经具备对数据库sales的customers表的列cid、cname的查询权限。
SELECT cid,cname FROM sales.customers;

图9.22 验证结果2
(4)使用SQL语句授予用户视图查询权限
授予用户SQLUser2对数据库sales的products表中库存城市为Dallas的产品的编号、名称和单价进行查询的权限,并进行验证。
①用SQLUser2登录账户登录到MySQL,在“Schemas”选项卡中看不到products表, 表示登录账号SQLUser2不具备对products表的任何权限。
②以root身份重新登录到MySQL,单击左上角按钮
,新建查询窗口中输入如下SQL语句:(https://www.daowen.com)
CREATE VIEW pview AS SELECT pid,pname,price
FROM products WHERE city='Dallas';
③单击工具栏中的
图标,执行上面的SQL语句,创建一个视图,视图的数据即是库存城市为“Dallas”的产品的编号、名称和单价,查询pview视图结果如图9.23所示。

图9.23 查询pview视图
④对该视图分配权限,新建查询窗口中输入如下SQL语句并执行:
GRANT SELECT ON pview TO 'SQLUser2'@'localhost'
⑤验证。以SQLUser2登录账户登录到MySQL。展开“Schemas”→“sales”→ “Tables could not be fetched”,没有显示products表,说明对products表没有权限,再展开“Schemas”→“sales”→“Views could not be fetched”,显示pview,对该视图进行查询,显示相应结果,如图9.24所示。

图9.24 权限分配后查询pview视图
(5)使用图形界面工具授予用户查询、更新和插入权限
授予用户SQLUser2对数据库sales中表的查询、更新和插入权限,并进行验证。
①用SQLUser2登录账户登录到MySQL,在“Schemas”选项卡中看不到orders表,如图9.25所示,表示登录账号SQLUser2不具备对orders表的任何权限。以root身份重新登录到MySQL。

图9.25 SQLUser2不具备对orders表的任何权限
②单击“Administration”选项卡“MANAGEMENT”栏中的“Users and Privileges”,在“Users and Privileges”页的“User Accounts”部分,单击SQLUser2,再选择“Schema Privileges”,然后单击“Add Entry”按钮,如图9.26所示。

图9.26 “Users and Privileges”页
③显示“New Schema Privilege Definition”对话框,选择“Selected schema”,在下拉列表中选择“sales”,然后单击“OK”按钮,如图9.27所示。

图9.27 “New Schema Privilege Definition”对话框
④在“Users and Privileges”页,勾选“SELECT”“INSERT”和“UPDATE”,然后单击“Apply”按钮,如图9.28所示。

图9.28 授予用户SQLUser2用户SELECT、INSERT、UPDATE权限
⑤验证。以SQLUser2登录账户登录到MySQL。再展开“Schemas”→“sales”→ “Tables”,对sales数据库下的orders表、agents等表进行查询、更新和插入操作,均能成功执行,即表示用户SQLUser2已经具备对数据库sales中表的查询、更新和插入权限。
(6)使用SQL撤销所有操作权限
撤销登录账号SQLUser1的数据库所有操作权限。
①以root管理员身份登录到MySQL。
②在图标菜单中单击第一个图标
,新建一个查询窗口。
③在查询窗口中输入如下SQL语句:
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'SQLUser1'@'localhost'
④单击工具栏中的
图标,执行上面的SQL语句,如图9.29所示。

图9.29 撤销用户SQLUser1的所有权限
(7)使用SQL撤销数据库的查询权限
撤销登录账号SQLUser2的查询表中列的权限。
①在图标菜单中单击第一个图标
,新建一个查询窗口。
②在查询窗口中输入如下SQL语句:
REVOKE SELECT(cid,cname) ON sales.customers
FROM 'SQLUser2'@'localhost'
③单击工具栏中的
图标,执行上面的SQL语句,如图9.30所示。

图9.30 撤销用户SQLUser2的查询表中列的权限
④验证。再次执行查询cid,cname的操作,发现无法执行,即用户SQLUser2没有权限,证明权限删除成功,如图9.31所示。

图9.31 验证结果