技术开发 频道

SQL Server 2012数据库服务器安全管理

  【IT168 专稿】在数据库系统的日常运维中,安全性是最为重要,也是最具有挑战性的一个方面。任何一个DBA都希望服务器足够的安全,在不增加成本的情况下保证数据万无一失。但事实上是,只要用户能够访问数据,就会有安全漏洞,因此大家应该对安全性重新认识,安全性并不是保证系统完全不受攻击,而是把风险减少,并对风险采取必要的应对措施。本文将介绍SQL Server 2012就加强数据库服务器的安全做了哪些努力?例如SQL Server身份验证模式、登录、数据库角色、服务器角色、应用程序角色、安全审核、数据加密、数据库认证等。其中有一些功能在早期SQL Server中就已经存在。但SQL Server 2012又进一步做了增强,例如增加了用户自定义服务器角色功能,早期DBA在服务器角色方面只能依赖系统自带的9个固定服务器角色,要么是加入某个角色,要么是退出某个角色,但不能根据实际需要创建一个完全适合自己的服务器角色,使得管理不够灵活。但在SQL Server 2012中利用自定义服务器角色可以解决此问题。好了,下面咱们就来介绍一下SQL Server2012中与服务器安全相关的几个技术。

  SQL Server身份验证

  SQL Server一直提供两种对用户进行身份验证的模式,Widows模式和混合模式。默认模式是Windows身份验证模式,其使用的是操作系统的身份验证机制对需要访问服务器的 凭据进行身份验证,从而提供了很高的安全级别。而基于SQL Server和Windows身份验证模式的混合验证模式,允许基于Windows和基于SQL Server的身份验证。混合模式创建的登录名没有在Windows中创建,这可以实现不属于企业内的用户通过身份验证,并获得访问数据库中安全对象的权限。当使用SQL Server登录时,SQL Server将用户名和密码信息存储在Master数据库中。在决定身份验证方式时,需要确定用户将如何连接到数据库。如果SQL Server和数据库用户属于同一个活动目录森林,则推荐使用Windows身份验证以简化创建和管理登录名的过程。反之,则需要考虑使用基于SQL的登录名来实现用户的身份验证。

  在SQL Server服务器安装的过程中可以进行身份验证模式的选择,在安装成功后,还可以通过SSMS进行更改,如下图所示:

SQL Server 2012数据库服务器安全管理

  在此界面中,用户可以查看当前的身份验证模式以及进行更改。当然也可以通过存储过程来进行更改,如把身份验证模式改为混合验证可以使用的命令是:

SQL Server 2012数据库服务器安全管理

  如果需要把身份验证模式改为Windows,只需要将上述命令中的DWORD的值改为1,即可,如下图所示:

SQL Server 2012数据库服务器安全管理

  另外建议,在生产环境中尽量不要使用Sa用户,特别是多人具有管理权限时更要多加注意。因为多人使用Sa帐号登录,则不能使用审核功能与特定的操作员进行关联,一旦出现操作上的问题,则无法问责。

  登录

  正因为SQL Server存在两种不同机制的身份验证方式,所以同时提供了两种登录名。Windows登录名与存储在AD或者本地SAM数据库中的用户相关联。SQL登录名则依赖于SQL Server存储和管理帐户信息。

  Windows登录名受限于AD域或者是本地的密码策略限制,可以通过此策略设置复杂性要求、无效登录、过期时间等。当用户在以SQL Server时,活动目录或操作系统已经确认了用户的身份。当使用SQL Server登录的时候,SQL Server就要负责确认用户的身份。SQL Server将登录名和密码哈希值都在master数据库中。但从SQL Server 2008开始,不会再为BUILTIN\Administrators组创建登录名,以免使得服务器上具有本地管理权限的任何人都可以登录SQL 服务器。但在安装的过程中,会有一个界面提示添加管理员。

  下面我们看几个关于登录的几个小示例:

  ---创建WINDOWS登录

  create login [dufei\dufei] from windows with default_database=master

  注意,计算机名\用户名,必须使用 [ ]括起来。而不能使用双引号。

  -- 创建 SQL Server 登录,密码同时满足策略要求。

  create login df

  with password='DUfei2008',default_database=master

  -- 创建 SQL Server 登录用户,要求必须满足策略的一些要求。

  create login df with password='DUfei2008' must_change,

  default_database=master,check_expiration=on,check_policy=on

  其中,must_change参数表示下次登录时必须更改密码;check_expiration表示过期设置, policy表示密码复杂度是否够复杂。

  数据库角色

  SQL Server的数据库角色分为两大类,固定数据库角色和用户自定义数据库角色,固定数据库角色只能把权限委托给用户,唯一能发一改变的就是成员资格。而用户自定义的数据库角色对管理权限和数据库中的资源的访问提供了更多的控制。在使用基于角色的安全模型中,可以经常 发现内置的安全主体提供了过多的访问权限,或者是没有提供足够的权限。在这种情况下用户就可以创建用户自定义的角色,以控制一组用户对安全对象的访问。从概念上讲,数据库角色和Windows角色很相似。用户可以创建一个数据库角色来标识一组需要访问共同资源的用户,或者也可以用角色来标识授予库中的一个安全对象的权限。不管角色的用途是什么,其功能应有角色名称明确指出,也就是说角色名一定要有意义。

  创建一个自定义数据库角色也非常简单,方法是在某个指定的数据库中,找到安全性选项卡,展开其中的角色,在数据库角色中点击新建,如下图所示:

  然后,就出现下图所示的个界面,系统会提示为此角色提供一个名称,同时为该角色指定一个所有者。

数据库角色

  在此界面中还可以为该角色选择现有的架构,并添加用户作为这一角色的成员。在安全对象和 扩展属性选项卡中,还可以分别用来指派权限或者是设置额外属性。

  服务器角色

  SQL Server服务器角色是指根据SQL Server的管理任务,以及这些任务相对的重要性等级来把具有SQL Server管理职能的用户划分为不同的用户组,每一组所具有的管理SQL Server的权限都是系统内置的,即不能对其进行添加、修改和删除,只能向其中加入用户或者其他角色。

数据库角色
▲固定服务器角色

  SQL Server2012 提供了九种常用的固定SQL Server服务器角色,其中Bulkadmin用户可以运行类似BULK INSERT 语句; 系统管理员(sysadmin)拥有SQL Server所有的权限许可;服务器管理员(serveradmin)管理SQL Server服务器端的设置;磁盘管理员(diskadmin)管理磁盘文件;进程管理员(processadmin)管理SQL Server系统进程;安全管理员(securityadmin)管理和审核SQL Server系统登录;安装管理员(setupadmin)增加、删除连接服务器,建立数据库复制以及管理扩展存储过程;数据库创建者(dbcreator)创建数据库,并对数据库进行修改。 最后还有一个就是Public角色,在服务器上创建的每个登录名都是 public 服务器角色的成员,它只拥有的权限是VIEW ANY DATABASE。public角色有两大特点:

  第一,初始状态时没有权限;第二,所有的数据库用户都是它的成员,因此不能将用户、组或角色指派为public角色的成员,也不能删除public角色的成员。public角色作用可以通过对public设置权限从而为所有数据库设置相同的权限,不要为服务器 public 角色授予服务器权限。

  SQL Server 早期版本虽然提供了九种固定服务器角色。 但用户无法更改授予固定服务器角色的权限。 从 SQL Server 2012 开始,用户可以创建用户定义的服务器角色,并将服务器级权限添加到用户定义的服务器角色。用户定义的服务器角色与固定服务器角色类似:唯一差异在于它们是由SQL Server管理员创建和管理的。用户定义的角色允许管理员们创建和分配服务器范围权限给用户定义角色。

  创建用户自定义服务器角色也非常简单,通过SSMS,找到安全性选项卡,从中找到服务器角色,右键即可出现“新服务器角色”选择,如下图所示:

数据库角色

数据库角色

 

  在创建自定义服务器权限的过程中,可以向此服务器角色授予或拒绝针对该安全对象的权限。 在“权限: 显式”框中,选中相应的复选框以针对选定的安全对象授予、授予再授予或拒绝此服务器角色的权限。 如果某个权限无法针对所有选定的安全对象进行授予或拒绝,则该权限将表示为部分选择。点击“成员”打开成员页面,根据需要给定义的服务器角色添加成员。如下图所示:

数据库角色

  最后,点击“成员身份”页,选中一个复选框,以使当前用户定义的服务器角色成为所选服务器角色的成员。

数据库角色

  就这么几步,一个简单的服务器角色就创建成功了,但也不是任何用户都有权限创建自定义服务器角色,在创建之前,要求具有 CREATE SERVER ROLE 权限,或者具有 sysadmin 固定服务器角色的成员身份。还需要针对登录名的 server_principal 的 IMPERSONATE 权限、针对用作 server_principal 的服务器角色的 ALTER 权限或用作 server_principal 的 Windows 组的成员身份。 使用 AUTHORIZATION 选项分配服务器角色所有权时,还需要具有下列权限,若要将服务器角色的所有权分配给另一个登录名,则需要对该登录名具有 IMPERSONATE 权限。若要将服务器角色的所有权分配给另一个服务器角色,则需要具有被分配服务器角色的成员身份或对该服务器角色具有 ALTER 权限。 当然,也可以使用T-SQL命令创建、修改和删除服务器角色,下面给出一个小小的示例结束本篇文章。

  示例:用户可以使用“CREATE SERVER ROLE, ALTER SERVER ROLE 和 DROP SERVER ROLE ”Transact-SQL语句来创建,修改和删除用户定义服务器角色,如下例所示:

  CREATE SERVER ROLE [ITETSQL] --创建用户自定义服务器角色

  GRANT CREATE ANY DATABASE TO [ITETSQL] --授予相应权限

  ALTER SERVER ROLE [ITETSQL] ; ADD MEMBER [Domain\df] --编辑此服务器角色,为其增加成员

  ALTER SERVER ROLE [processadmin] ;ADD MEMBER [ITETSQL] --编辑此服务器角色的成员身份选项。

  DROP SERVER ROLE [ITETSQL] –当然,如果此服务器角色用不到了,也可以将它删除。

  好了,限于片幅!关于SQL Server安全性管理中的身份验证、数据库角色、服务器角色等功能我们就介绍这么多,至于应用程序角色、权限、架构、加密、认证、审核等技术在此不再展开介绍。咱们后会有期!

0
相关文章