SQL Server 安全篇——SQL Server 安全模型(1)——安全性主体层级

本文属于SQL Server安全专题系列



前言:

 随着数据安全性的越来越重要,很有必要介绍一下数据库的安全方面的内容。本文兼容SQL Server 2016,但是由于安全这个范围太大,不可能完全说清楚,所以以重点介绍常用功能,同时兼顾新特性。系列中以SQL Server 演示库AdventureWorks2016CTP3为演示,下载地址:AdventureWorks sample databases

 首先,安全性是系统层面甚至企业层面,并不是某一个角色如DBA、IT管理员的责任,但是作为SQL Server DBA,本人还是以DBA的角度去看待这个问题。

 其次,安全并非独立的“功能”或者“工作”,需要搭配性能、稳定等方面,特别是稳定性,一个不稳定的系统,再安全也没用,极端来说,你想想我给你最高权限,登录服务器就报错、蓝屏,你能获取什么信息吗?

 作为DBA,首先需要了解的是SQL Server的安全模型或者安全机制,否则你根本无从下手。

安全模型分为3篇:

  1. 安全性主体层级(本文)
  2. 实例级别安全性
  3. 数据库级别安全性

如有兴趣研究真正的权限方面的细节,可以下载研读:SQL Server 2017及SQLDB权限结构图

正文:

 安全,粗略分为两类:主动安全(active security)和被动安全,其实没有明确的分界线,反正就是以预防为主。主动安全主要通过权限来限制用户访问数据和结构来实现的。
对于SQL Server 安全模型,有三个实体:principals(主体)、securable(安全对象)、permissions(权限),其定义如下:
SQL Server安全模型定义
实体 定义
Principal 一个安全性主体就是一个实体,比如一个用户
Securable 安全对象是数据、项目、元数据
Permission 权限是作用在安全主体上,授予或拒绝安全实体对安全对象是否有访问权限。

安全性主体层级:

 层级用于组织安全性主体,使得管理员可以对用户组授权。特别适合大型组织并且有AD域的环境,简化管理、授权方面的工作量。比如专门针对DBA组创建WindowsAD组,并以组的身份在SQL Server中进行授权和管理。这样如果有DBA离职,只需要在AD中去掉这个成员,而不需要在可能几百台SQL Server中逐个删除。
 这个安全层级从数据流的角度来看,从域层面开始,然后到本地服务器层面,再到SQL Server实例层面,最后到数据库层面:

SQL Server 安全篇——SQL Server 安全模型(1)——安全性主体层级_第1张图片

 上图显示了一个在SQL Server实例中创建的登录名,可以映射到一个本地Windows用户或组,也可以映射到一个域用户或域组。通常在企业环境中,优先使用域用户或域组。理由前面已经说过了。
 同时,上图也演示了本地服务器账号或者域账号和组是如何映射到数据库层面的用户(without login),这部分是针对包含数据库(从SQL 2012开始出现)。
 在实例中创建的SQL Server登录名,可以映射到本地服务器、域用户和组中,在实例里面也可以创建混合模式验证的SQL Server登录,简单来说,前者是我们常用的Windows身份验证(SQL On Linux还出现了AD集成身份验证),后者就是SQL Server身份验证,跟Windows用户无关。
 所有的这些登录名都可以添加到实例级别的固定服务器角色(fixed server roles)和用户自定义服务器角色(User-defined server roles)中。通过这种方式,就可以向主体授予实例级别(instance-level)对象(比如链接服务器和端点)的一组通用权限。同时,也可以把登录名映射到数据库用户,此时就可以授权到数据库级别(database-level)。
 数据库用户位于安全性主体曾经的数据库层中(上图最下层)。可以直接授权到数据库的架构和对象中。也可以把数据库用户添加到数据库角色。数据库角色类似服务器角色,它们的区别在于数据库角色仅在数据库层面而服务器角色是实例层面。数据库层的安全对象包含:架构、表、视图和存储过程等。

小结:

 本文以一个图做演示,演示了SQL Server 安全模型中的安全性主体层级,以全局的观点简介了各级关系,为后续文章做铺垫。接下来,下一文介绍实例级别的安全性。


你可能感兴趣的:(数据库管理,安全,SQL,Server,Security)