SQL中使用 GRANT 和 REVOKE 语句向用户授予或收回对数据的操作权限。GRANT 语句向用户 授予 权限, REVOKE 语句 收回 已经授予用户的权限
语句的一般格式:
GRANT <权限>[,<权限>]... ON <对象类型> <对象名>[,<对象类型> <对象名>]… TO <用户>[,<用户>]... [WITH GRANT OPTION];
WITH GRANT OPTION 子句 : 若 指定了,获得权限的用户可以再把权限授予给其他用户。
若没有指定,获得权限的用户 只能使用该权限,不能传播。
【例1】把teacher表权限授权给lc0019999 用户
GRANT SELECT ON teacher TO lc0019999
【例2】把teacher表全部权限 授予用户lc001, lc002
【注】T-SQL 不支持同时授予用户多个操作权限 也不支持同时对两个表赋权
GRANT ALL PRIVILEGES ON teacher TO lc001,lc002;--成功
【例3】把teacher表的 插入权限授权给lc0019999 用户,并允许他再将此权限授予其他用户
GRANT INSERT ON teacher TO lc0019999 WITH GRANT OPTION;
语句的一般格式为:
REVOKE <权限>[,<权限>]... ON <对象类型> <对象名>[,<对象类型><对象名>]… FROM <用户>[,<用户>]...[CASCADE | RESTRICT];
【例1】把用户lc0019999的 teacher插入权限收回
REVOKE INSERT ON teacher FROM lc0019999 CASCADE;
【注】将用户teacher INSERT权限收回同时, 级联CASCADE 回收了其授予其他用户INSERT权限,否则系统将拒绝执行指令
--1,授权表查询权限 --GRANT SELECT ON object::tabel1 To su1 GRANT SELECT ON tabel1 To su1 --2,取消授权表查询权限,有REVOKE(撤回)和DENY(拒绝)两种。二者引发的权限报错信息一致。一般撤销授权应使用REVOKE;拒绝用户某种操作使用DENY; --DENY:拒绝后,权限表中该权限ProtectType为Deny(不允许使用该权限);DENY 优先于所有权限,但 DENY 不适用于 sysadmin角色 --REVOKE:撤回后,权限表中该权限直接消失;可撤回ProtectType为Deny的权限; DENY SELECT ON tabel1 To su1 --拒绝(不允许)su1使用SELECT权限 REVOKE SELECT ON tabel1 To su1 --撤销(删除)su1的SELECT授权,不论授予还是拒绝 --3,授权存储过程运行权限(不需要对存储过程中涉及表授权) --GRANT EXECUTE ON object::sp1 TO su1 GRANT EXECUTE ON sp1 TO su1 --4,取消授权存储过程 REVOKE EXECUTE ON sp1 TO su1 --5,查看用户su1的权限 EXEC sys.sp_helprotect NULL,su1 --6,授予所有对象SELECT权限 GRANT SELECT To su1 --7,以指定用户上下文运行(切换用户并以该用户权限运行) EXEC AS USER='su2' GO --8,允许/不允许用户定义表(修改表的结构) GRANT VIEW DEFINITION ON table1 to su1 DENY VIEW DEFINITION ON table1 to su1 --9,允许/不允许用户定义存储过程/视图 GRANT VIEW DEFINITION ON sp1 to su1 DENY VIEW DEFINITION ON sp1 to su1 GRANT VIEW DEFINITION ON view1 to su1 DENY VIEW DEFINITION ON view1 to su1
参考内容来源:https://blog.csdn.net/weixin_46009153/article/details/115767430