数据库:数据库安全性

本文详细探讨了SQL Server中关于数据库权限的管理,包括GRANT、REVOKE语句的使用,以及角色(ROLE)的创建、权限授予和收回。通过多个示例,解释了如何为不同用户和角色分配查询、更新、插入等权限,以及如何通过角色集中管理权限。同时,提到了public角色的特殊性和限制,以及WITH GRANT OPTION的含义。
摘要由CSDN通过智能技术生成

【数据库实验】数据库安全性

一般格式

GRANT <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型> <对象名>]TO <用户>[,<用户>]... 
[WITH GRANT OPTION];
WITH GRANT OPTION子句: 指定:可以再授予 没有指定:不能传播

[例4.1] 把查询Student表权限授给用户U1

grant select
on table Student
to U1;

但是并不能执行
查询了一下是要这样的语句

grant select
on  Student
to U1;

on 后不加table
在这里插入图片描述
但是还是不能执行,看他说的错误用户U1不存在,扎实可能的。我这是管理员登录肯定有权限,所以去创建用户U1,创建用户
在这里插入图片描述

[例4.2] 把对Student表和Course表的全部权限授予用户U2和U3

grant all privileges
on student course
to U2 , U3;

这里并不执行
在这里插入图片描述
是因为他不能对两个表授权。
在这里插入图片描述

grant all privileges
on student
to U2 , U3;
grant all privileges
on  course
to U2 , U3;

[例4.3] 把对表SC的查询权限授予所有用户

grant all privileges
on sc
to public;

在这里插入图片描述
但是这个public好像在SQL SEVER 中不是tsql的那样全部操作授权,这个public 好像是个服务器角色。在这里插入图片描述
但是打开属性,并没有我要的结果。查了一下

在服务器上创建的每个登录名都是 public 服务器角色的成员,它只拥有的权限是VIEW ANY DATABASE。
ublic角色有两大特点:
第一,初始状态时没有权限;
第二,所有的数据库用户都是它的成员,因此不能将用户、组或角色指派为public角色的成员,也不能删除public角色的成员。
public角色作用:可以通过对public设置权限从而为所有数据库设置相同的权限。
请勿为服务器 public 角色授予服务器权限。

不懂吖。。。

[例4.4] 把查询Student表和修改学生学号的权限授给用户U4

grant select, update(SNO)
on student
to u4;

[例4.5] 把对表SC的INSERT权限授予U5用户,并允许他再将此权限授予其他用户

grant insert
on sc
to u5
with grant option;

[例4.6]从U5给U6权限

登录u5,操作

在这里插入图片描述

grant insert
on sc
to u6
with grant option;

revoke 收回权限

REVOKE <权限>[,<权限>]... 
ON <对象类型> <对象名>[,<对象类型><对象名>]FROM <用户>[,<用户>]...[CASCADE | RESTRICT];

[例4.8] 把用户U4修改学生学号的权限收回

revoke update(SNO)
on student
from U4

[例4.9] 收回所有用户对表SC的查询权限

revoke select 
on sc
from public

[例4.10] 把用户U5对SC表的INSERT权限收回

revoke insert
on sc
from U5 cascade

在这里插入图片描述
若不加cascade拒绝这条语句执行。

角色ROLE

1.角色的创建 
CREATE  ROLE  <角色名> 
2.给角色授权 
GRANT  <权限>[,<权限>]ON <对象类型>对象名 
TO <角色>[,<角色>]3.
将一个角色授予其他的角色或用户 
GRANT  <角色1>[,<角色2>]TO  <角色3>[,<用户1>][WITH ADMIN OPTION]

指定了WITH ADMIN OPTION则获得某种权限的角色或用户还可以把这种权限
授予其他角色

4.角色权限的收回 
REVOKE <权限>[,<权限>]ON <对象类型> <对象名> 
FROM <角色>[,<角色>]...

[例4.11] 通过角色来实现将一组权限授予一个用户。

首先我们创建一个用户R1

create role R1;

在这里插入图片描述

然后给权限

grant select , update,insert
on student
to R1

给u1角色

grant R1
to u1

在这里插入图片描述
但是不支持
查询之后使用

EXEC sp_addrolemember 'R1','U1'

但是我们的u1好像并没有select , update,insert权限吖,u1登录之后不能查询stuent表吖
在这里插入图片描述

grant select , update,insert
on student
to R1

但是这个确实是赋予了权限。搞不懂吖。
查了个博客SQL Server 用角色(Role)管理数据库权限
感觉就是角色好多好乱和书上讲的不一样呀感觉。SQLServer中服务器角色和数据库角色权限详解

这个说的很清楚了

但是我又试了试

在这里插入图片描述

是R1的成员但是
在这里插入图片描述
却可以查询sc表
越来越懵逼。。。。。。
收回权限

EXEC sp_droprolemember 'R1','U1'

[例4.12] 角色的权限修改

使角色R1在原来的基础上增加了Student表的DELETE 权限

grant delete
on student
to R1

在这里插入图片描述

[例4.13]使R1减少了SELECT权限

使R1减少了SELECT权限

revoke select
on student
from R1

在这里插入图片描述
删除完毕

这个角色和那个public很懵逼,感觉越弄越乱呀搞不懂呀。别的都可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值