SQL Server 安全篇——降低外围威胁(2)——禁用不安全功能
本文属于SQL Server安全专题系列
SQL Server默认禁用不安全的功能。如果需要启用,可以通过SSMS来实现,本文介绍手动配置外围应用配置器和使用策略管理来管理外围环境。
手动配置外围应用配置器
右键实例,选择facts如下图,然后在【方面(F)】中选择“外围应用配置器”:
可以看到下面的选项,通常我们会使用到“XPCmdShellEnabled”项,如果要用,则选择【True】:
通过策略管理管理功能
在少量几台实例上配置时,可以使用上面方式来进行,但是对于大量实例的企业环境,这种方式就变得很困难。此时策略管理(Policy-Based Management,PBM)就派上用场。
基本概念
PBM由targets(目标),facets(方面),conditions(条件)和policies(策略)组成。
- target:PBM管理的实体,如库、表或者这里的外围环境。
- facet:与一个target有关联的属性集。
- condition:一个布尔表达式,判断属性是否为true。
- policy:绑定condition到target中。
下面来进一步介绍:
Facets:
某个target如视图,都包含有一系列的属性,比如IsSchemaBound、HasIndex和HasAfterTrigger。SQL 2016总共提供了96种facets,为了降低外围威胁,应该检查一下三个facets:
- ISurfaceAreaConfigurationForAnalysisServer
- ISurfaceAreaConfigurationForReportingServices
- ISurfaceAreaFacet
Conditions:
对表达式进行布尔判断。每个facet都有很多属性可以用于创建条件,但是每个条件只能访问单一facet的属性,这些条件包含:=、!=、LIKE、NOT LIKE 、IN、NOT IN。
Targets:
策略生效的实体,几乎可以包含实例(含实例本身)的所有对象。当对target添加一个策略时,可以使用condition来限制target的数量。比如创建一个策略来强制实例中的数据库命名规范,避免使用一些如abc等或者具有保留字词、专用术语的命名。
Policies:
策略包含了一个condition并且把这个condition绑定到一个或多个targets中。同时策略也指定一个评估模式。根据你选择的模式,策略可能又包含希望对策略进行评估的计划。策略目前支持四种评估模式:
- On Demand :按需,由用户手动调用。
- On Schedule :按计划,使用代理作业定期进行评估,未启动前不影响系统性能。
- On Change: Log Only :更改时:仅记录,使用事件通知对策略进行评估。
- On Change: Prevent : 更改时:禁止,自动使用DDL触发器禁止违反策略的行为。
由于策略基于DDL事件触发,依赖于facet中的属性,不是所有的评估模式都能应用到所有的facets中。比如前面提到的三个facet:
Facet | On Demand | On Schedule | On Change:Log Only | On Change:Prevent |
ISurfaceAreaFacet | YES | YES | YES | NO |
ISurfaceAreaConfigurationForAnalysis Server | YES | NO | NO | NO |
ISurfaceAreaConfigurationForReportingServices | YES | NO | NO | NO |
针对外围环境配置创建策略
下面来实操一下,要创建策略来管理,必须创建两个对象:condition和policy,
新建条件:
条件可以先于策略创建,如下图所示打开新建条件,然后按照下图配置:
点击确定之后完成条件新建,然后新建策略。
新建策略:
创建条件之后,策略就简单很多,按下面方式打开新建对话框,然后选择刚建好的条件,然后点击确定即可,注意默认是按需评估模式,所以【启用】勾选框是没有的,要手动启用。对单一实例进行策略评估
创建好策略之后,就可以右键策略然后选择【评估】,本机结果如下图,由于本机开启了xp_cmdshell、禁用(或者未启用)了clrIntergration和RemoteDac功能,所以评估失败。
对多实例进行策略评估
PBM的其中一个重要设计目的就是批量管理实例。但是批量管理首先需要批量注册服务器,这个功能可以通过SSMS打开中央管理服务器,并把需要管理的服务器添加进去。
添加完毕之后就可以使用如图所示导入策略和评估策略。
通过上面的方式,禁用并且阻止人为启用一些不安全功能,降低数据库外围威胁。关于哪些属于不安全功能,请见接下来的一文“Securing Checklists”