《数据库系统概论》课程学习(4)——第四章 数据库安全性

1、问题的提出

  • 数据库的特点是数据可以共享
  • 数据共享必然带来数据库的安全性问题
  • 数据库系统中的数据共享不能是无条件的共享    

例: 军事秘密、国家机密、新产品实验数据、市场需求分析、市场营销策略、销售计划、客户档案、医疗档案、银行储蓄数据等。

2、数据库的安全性:是指保护数据库以防止不合法的使用所造成的数据泄露、更改或破坏。

3、数据库安全性和计算机系统、网络系统安全性是紧密联系、相互支持的。

4、三类安全性问题

  • 技术安全性
  • 管理安全性
  • 政策法律安全性

5、技术安全性案例

  • 编写合法程序绕过DBMS及其授权机制
  • 直接或编写程序执行非授权操作
  • 通过多次合法查询数据库从中推导出一些保密数据

问题:在技术上你能想到什么样的数据库安全保障措施吗?

数据库系统安全性控制

统计数据库的安全性

统计数据库:即只允许用户查询聚集类型的信息(如合计、均值等),不允许查询单个记录信息。

统计数据库的特殊安全性:能从合法的查询中推导出不合法信息。

为此,可做如下的规定:    

① 任何查询至少要涉及N个以上的记录;    

② 任意两个查询的相交数据项不能超过M个;    

③ 任何用户的查询次数不能超过H次。          

……

SQL Server身份验证方式的确认和设置

在SQL Server中创建登录名数据库用户要求SQL Server必须工作在 “SQL Server和Windows混合身份验证”模式。

确认和设置方法如下:

1、启动SQL Server;

2、在服务器名称上右键选择“属性”,打开“服务器属性”对话框。在“选择页”里选择“安全性”,在“服务器身份验证”里选择“SQL Server和Windows身份验证模式”,单击“确定”完成。

切记:若改变了身份验证方式,必须重启SQL Server服务才能生效

SQL Server登录名和数据库用户

登录名与数据库用户的创建:

1、启动SQL Server;

2、选择“安全性→登录名”,右击“登录名”,选择“新建登录名”,打开“登录名-新建”对话框。在“常规”选项卡中,输入登录名,选择“SQL Server身份验证”,输入密码和确认密码,去掉“强制实施密码策略”、“强制密码过期”、“用户在下次登录时必须更改密码”前的对勾,选择默认数据库;

3、选择“用户映射”选项卡,选择数据库(可多选)。此时,所创建的登录名即做为所选数据库的用户;

4、选择“状态”选项卡,“设置”里“是否允许连接到数据库引擎”选择“授予”,“登录”里选择“启用”,单击“确定”完成。

创建、删除登录名和数据库用户

1、创建登录名lxd

create login lxd with password = 'lxdlxd'

2、创建数据库用户

    use mydb
    create user lxd

将lxd设置为mydb数据库的用户。该用户几乎没有任何权限。

3、删除数据库用户:

drop user lxd

4、删除登录名:

drop login lxd

5、查看当前数据库用户信息:

exec sp_helpuser

6、查看用户lxd信息:

exec sp_helpuser 'lxd'

表级权限的授权与回收

授权示例

1、把查询Student表权限授给用户lxd。

    grant select 
    on student 
    to lxd

2、把对course表的插入与删除权限授给用户lxd。

    grant insert, update
    on course
    to lxd

3、把对student表的sno, sname属性的查询权限授给用户lxd。

    grant select 
    on student(sno, sname) 
    to lxd

4、把对sc表grade属性的修改权限授给用户lxd。

    grant update
    on sc(grade)
    to lxd

5、把对Student表操作的所有权限授给用户lxd。

    grant all 
    on student 
    to lxd

不推荐使用all

6、把对course表查询权限授给数据库的所有用户。

    grant select
    on course
    to public

7、把对student表查询权限授给用户lxd,同时授予授权的权限。

    grant select 
    on student 
    to lxd
    with grant option

注意:lxd用户只能将其权限范围内的权力授予其他用户。

8、查看用户lxd的权限信息:

exec sp_helprotect null,'lxd'

9、查看student表的授权信息:

exec sp_helprotect 'student'

回收

1、回收用户lxd查询Student表的权限。

    revoke select 
    on student 
    from lxd

2、回收用户lxd对course表cno, cname修改的权限。

    revoke update
    on course(cno, cname)
    from lxd

3、回收所有用户对sc表的查询权限。

    revoke select 
    on sc 
    from public

4、回收用户lxd查询student表和其授权的权限。

    revoke grant option for select
    on student
    from lxd

问题:若用户lxd已经将其权限和授权的权限授给了其他用户呢?

revoke grant option for select
on student
from lxd
cascade

数据库角色

数据库角色的使用

1、创建数据库角色

create role r1

2、授予角色权限内容

    grant select
    on student
    to r1
    grant update
    on course(cname,credit)
    to r1

3、建立用户与角色的对应关系

exec sp_addrolemember 'r1', ' U1'
……
exec sp_addrolemember 'r1', 'Un'

4、从角色中回收权限

    revoke select
    on student
    from r1

5、删除角色中的用户

exec sp_droprolemember 'r1', 'U1'

6、删除角色

drop role r1

7、查看角色成员信息

exec sp_helprolemember r1

8、查看有哪些角色

exec sp_helprole

9、查看角色权限内容

exec sp_helprotect null, 'r1'

数据库固定角色

即SQL Server所定义的一些角色,该角色权限内容不能被修改。

1、查看有哪些固定角色

exec sp_helpdbfixedrole

2、查看固定角色db_datareader的描述信息

exec sp_helpdbfixedrole  db_datareader

3、查看固定角色db_datareader权限内容

exec sp_dbfixedrolepermission  db_datareader

4、向固定角色db_datareader添加和删除用户

    exec sp_addrolemember 'db_datareader', 'lxd'
    exec sp_droprolemember 'db_datareader', 'lxd'

SQL Sever数据库固定角色

固定角色

权    限

db_owner

数据库的所有者。可执行任何数据库管理工作。

db_accessadmin

数据库访问权限管理者。可添加或删除用户、组或登录名

db_securityadmin

管理角色成员、对象所有权、语句执行权、数据库访问权限。

db_ddladmin

数据库DDL管理员,可执行数据库定义语言。

db_backupoperator

执行数据库备份。

db_datareader

可对数据库中任何表执行select操作。

db_datawriter

可对数据中任何表执行更新操作,但不可查询。

db_denydatawriter

不能对任何表进行更新操作。

db_denydatareader

不能查询数据库中任何表的内容。

完成下列要求

要求:lxd用户是讲授DB课程的教师,他具有查看选修了DB课程的学生学号、姓名、所在系和成绩信息,同时对该成绩具有修改的权限。

create role DBTeacher
create view DB_Course(sno, sname, sdept, grade)
as
select student.sno, sname, sdept, grade
from student, course, sc
where student.sno=sc.sno and course.cno=sc.cno and cname='DB'
grant select
on DB_Course
to DBTeacher
grant update
on DB_Course(grade)
to DBTeacher
exec sp_addrolemember 'DBTeacher', 'lxd'

审计

审计:即把用户对数据库的操作自动记录下来。DBA可利用这些信息进行安全分析与跟踪。

1、在SQL Server上选择“工具”菜单下的“SQL Server Profiler”功能;

2、选择“新建跟踪”,打开跟踪属性对话框;    

  • ① 输入跟踪名称;    
  • ② 选择“保存到表”,然后选择数据库,并输入存在跟踪信息的表名;    
  • ③ 在“事件选择”标签页中可以选择跟踪事件的详细设置。

3、点击“运行”。完成!

4、当不需要跟踪时,选择“暂停”或“停止”即可;

5、可以打开所建的跟踪表查看跟踪信息。

6、审计(跟踪)也可以使用触发器来实现。

注意:审计(跟踪)会降低系统效率。

发布了593 篇原创文章 · 获赞 34 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_34573534/article/details/104958442