1.GRANT
GRANT语句的一般格式为:
GRANT <权限>
ON <对象类型 > < 对象名>
TO <用户>
[ WITH GRANT OPTION]
其语义为:将对指定操作对象的指定操作权限授予指定的用户.发出该GRANT语句的可以是数据库管理员,也可以是该数据库对象的创建者。
如果指定来WITH GRANT OPTION 子句,则获得某种权限的用户还可以把这种权限授予其他用户。但不允许循环传授,即被授权者不能把权限在授回给授权者或祖先。如图
如果没有指定WITH GRANT OPTION 子句,则获得某种权限的用户只能使用该权限,不能传播该权限。
例1:把查询Student表的权限授给用户U1
GRANT SELECT
ON TABLE Student
TO U1;
例2:对SC表操作把INSERT权限授给U5表
GRANT INSERT
ON TABLE SC
TO U5
WITH GRANT OPTION;
U5表将此权限授给U6
GRANT INSERT
ON TABLE SC
TO U6
WITH GRANT OPTION;
同样,U6还可以将此权限授U7
2.REVOKE
授予用户的权限可以由数据库管理员或其他授权者用REVOKE语句收回,REVOKE语句的一般格式为:
REVOKE <权限>
ON <对象类型> <对象名>
FROM <用户> [CASCADE | RESTRICT];
例:把用户U5对SC表的INSERT权限收回。
REVOKE INSERT
ON TABLE SC
FROM U5 CASCADE;
其语义为:将用户U5的INSERT权限收回同时,级联(CASCADE)收回了U6和U7的INSERT权限,否则系统将拒绝执行该命令。
SQL提供了非常灵活的授权机制:
1.数据库管理员拥有对数据库中所有对象的所有权限,并根据实际情况将不同的权限授予不同的用户。
2.用户对自己建的基本表和视图拥有全部操作权限,并可以使用GRANT语句授权给其他用户,其他用户拥有继续授权的许可,还有再授权给其他用户。
3.所有授予出去的权力在必要时又可以用REVOKE语句收回。
可见,用户可以“自主”地将数据的存取权限授予任何人,决定是否也将“授权”的权限授予别人,因此称这样的存取控制是自主存取控制。在现实当中,只有自己强大了你才有“自主”的权限。否则你只能被“授权”。