相关推荐recommended
【SQL Server】数据库授权常用
作者:mmseoamin日期:2023-12-18

什么是数据控制?

​ SQL中使用 GRANTREVOKE 语句向用户授予或收回对数据的操作权限。GRANT 语句向用户 授予 权限, REVOKE 语句 收回 已经授予用户的权限

1.GRANT

语句的一般格式:

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;

2.REVOKE

语句的一般格式为:

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