【数据库实验】数据库安全性
一般格式
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很懵逼,感觉越弄越乱呀搞不懂呀。别的都可。