第一篇 SQL Server安全概述

本篇文章是SQL Server安全系列的第一篇,详细内容请参考原文



面对当今复杂的攻击SQL Server有你需要的一切来保护你的服务器和数据。但在你能有效地使用这些安全功能之前,你需要了解你所面临的威胁和一些基本的安全概念。本系列的第一篇将讲解基础知识,可以充分利用SQL Server中的安全功能而不是浪费时间在不能保护你的数据被威胁的功能上。
Relational databases are used in an amazing variety of applications with connections from a dizzying array of clients over widely distributed networks,特别是互联网,使得数据几乎向任何人,任何地方开放。数据库可以包含相当大部分的人类知识,包括高度敏感的个人信息和关键数据。
数据库的这些特性使得有人想要窃取数据或通过篡改以损害它的主人。确保你的数据是安全的是一个关键部分来配置SQL Server和开发应用程序存储数据。这一系列将探索SQL Server 2012安全基础,那样你可以保护你的数据和服务器资源,getting as granular as you need to be to protect against the unique security threats that can affect your data.大部分的功能适用于早期版本的SQL Server,但我也会讨论只适用于SQL Server 2012和以后版本的功能。
威胁
识别威胁到一个特定的数据集和它的服务器是了解如何配置和使用SQL Server来保护你的数据的重要的第一步。你创建的数据库管理你的小学足球队的设备清单可能不需要大量的安全措施。你很可能想提供至少很小的访问控制,这样一个团队成员不可以随机更改记录。但它可能不是世界末日,如果有人侵入修改数据。
在另一方面,如果数据库有的球队成员的个人数据,如家庭住址和电话号码,你就可能要加强保护(可能是法律要求这样做)。你可以通过隔离访问的方式保护隐私数据,几乎所有能访问数据库的人都可以更改设备数据,但只有少数人可以访问个人数据。如果数据包括了信用卡号码,你需要更极端的保护措施。
你的数据可能会受到一些威胁,下面的列表是比较常见的。在网络上有足够的资源可以帮助你分析特定情况的风险。这个清单的目的是帮助你开始思考威胁和如何使用SQL Server的功能来对付他们或至少减少你的数据暴露给他们。
->数据被盗:数据被盗涵盖了各种类型的未经授权的访问你的数据,无论是由一个外部黑客入侵你的网络或内部扫描对名人污垢。它可能涉及阅读禁止的信息或是出于潜在的销售被盗信用卡号码的刺激。
->数据破坏:黑客获得访问你的数据可以改变它,可以引起一系列的问题,从公共尴尬到关闭你的整个操作(这可能发生当所有客户记录被删除)。
->数据腐败:在关系数据库中存储数据的最大好处之一,数据库本身可以帮助保护数据的完整性。数据的完整性,包括要求每个订单都有一个关联的客户,一个日期存储在日期字段是一个真实的日历上的日期,一百分比字段只包含值0和100之间。数据完整性很可能不是你认为与安全相关的第一件事,但它是保护你的数据的重要组成部分。
->非法储存:在过去,你在业务过程中收集的数据是你自己的业务。但是现在,美国、整个欧洲联盟和其他国家都存在着大量的联邦法律控制你可以存储、你如何存储、如何保护个人数据。对违规行为的处罚比较严厉,包括金钱上的处罚以及会贵公司的公众形象。
这系列覆盖SQL Server 2012的特点,有助于减轻这些威胁和许多其他。你必须了解你的数据的威胁,知道如何保护他们。不要浪费时间在不保护你的具体数据的特定威胁的措施上。你永远不可能覆盖所有假设的情况,在最坏的情况,你会让你的数据库服务器的目标用户完全无法使用。安全问题始终是一种妥协,平衡风险和必要的时间和金钱来实现和维护保障。
安全设计理念
2002年初比尔盖茨发出了他臭名昭著的可信计算备忘录,这是微软如何思考和实现其产品的安全性的转折点。据微软网站称,由此产生的可信计算倡议,“基于健全的业务实践,专注创造和提供安全、私人和可靠的计算经验。我们的目标是一个更安全、更可信的互联网。”
换句话说,十多年前对于安全微软变得非常严肃。这种变化后发布的第一个版本是SQL Server 2005,在微软彻底保障整个产品。此后,每个版本的SQL Server保留新的安全基础设施,逐步提高和增加新的功能,以提高安全性和解决新出现的威胁。
作为微软形容它在SQL Server 2005的日子,可信赖计算影响SQL服务器的发展通过定义产品的安全设计四大支柱:
安全的设计:微软广泛进行威胁分析和设计、编码和交互的安全审核确定的点,攻击者可以进入到服务器和数据。结果是,微软SQL Server设计保护机密性,完整性,以及数据的可用性你有店。
默认安全:开箱,SQL Server安装和激活的关键核心组件的默认数据库。这意味着,不关键的核心数据库功能的功能是没有安装或安装,但没有激活。没有安装的功能不易受攻击。你必须有意识地和故意地安装或激活非核心功能。这可以防止许多攻击的功能,你可能不知道被安装,因为你从来没有使用过他们。
………………
安全的两个阶段
类似于Windows系统,SQL Server的安全模式是一个两阶段的过程,允许用户登录访问服务器内受保护的资源。
验证:用户登录、验证、并获得访问服务器。验证回答了这个问题,“你是谁?”并要求用户证明它,通常通过用户名、密码,但其他形式的证明变得更受欢迎。
授权:用户只能操作SQL Server对象,如数据库表和存储过程--限于那些她有权限的。授权回答这个问题,“你可以做什么?”
用户可以登录到SQL Server,但除非他们被允许做某事,如访问数据库,否则他们不能做任何操作。所以你不仅需要为你的用户提供验证凭证,你还需要授权他们访问数据,通过在需要的数据库下定义用户。
当你考虑一下,在每个数据库中都需要一个用户帐户是有意义的。否则,什么会阻止用户登录到SQL Server然后使用任何他们想要的数据库?不同的场景会有不同的概念,但这是安全的基本状态。
在这一系列的后续章节会包括验证和授权,你将学习如何实施/执行SQL Sserver的各种安全功能,以防止你的数据的受到威胁。
SQL Server安全术语
当你在SQL Server和其他产品的安全工作,你会遇到各种各样的专业术语。下面是一些比较常见的术语和它们在数据库安全方面的含义。
验证:如上所述,验证是一个识别用户的进程,通过要求她来证明她是与登录匹配的用户。它回答了这个问题,你是谁?
授权:一旦系统对用户进行验证,授权决定了用户在服务器或数据库的权限。它回答了这个问题,你在这里能做什么?
组:在Windows中,组是一个主体(有登录名与其关联)。任何授予组的权限会授予给相关的登录。
模拟:所有的Windows进程,包括各种SQL Server进程,运行在一个特定的安全上下文(通常是引起进程启动的主体)。模拟发生在当一个进程暂时需要在不同的安全上下文。这是一个非常强大和必要的功能,但有可能滥用。
登录:登录是一个主体,在一个服务器实例中具有某种访问对象的权限。在常见的用法,登录通常与用户交替使用。但一个SQL Server登录是从外部访问服务的帐户。登录有时包括访问服务器对象的权限,如配置信息,但通常不授予数据库中的任何权限。
权限:权限是访问受保护的资源的权利,例如从表中读取数据,或者在服务器级别创建新的数据库。一个权限通常意味着其他权限,这取决于主体权限的范围。
主体:主体是任何用户或可以接收访问SQL Server受保护资源的权限组件。
特权:特权是主体拥有的一组广泛的权利/权限。这个词有时被允许和权限(往往意味着一个特定的,狭隘的权利)互换使用,特权意味着一组更广泛的权限。
角色:SQL Server角色类似于Windows组,但仅限于SQL Server实例的范围。你可以指定登录名和用户的角色,角色拥有的权限会继承给登录名和用户。
用户:用户是特定数据库中一个具有访问对象权利的主体。用户通常映射到登录名。简单来说,登录名访问SQL Server实例,用户访问数据。
管理和实施SQL Server安全
如同SQL Server中大多数配置和管理,有多种方式管理和实施安全功能,包括使用Management Studio的图形界面,编写和执行T-SQL代码,PowerShell。使用PowerShell已经超出本系列的范围,但在本系列你会看到大量使用另外两项技术的例子。
使用Management Studio,在对象资源管理器中,右键单击一个对象并选择属性,然后在对话框中使用合适的选项做出你想要的改变。例如,设置AdventureWorksLT2012示例数据库的权限,请右键单击数据库名称,选择“属性”,然后选择“权限”选项卡,如图1.1所示。
图1.1 修改AdventureWorks2012数据库的安全权限页面
在数据库和服务器实例级别,对象资源管理器均包括一个安全节点,该节点可以管理和实施其他类型的安全功能。图1.2显示了AdventureWorksLT2012数据库和服务器实例级别的安全节点。每一个高亮显示的节点包含了不同的子节点,不同的选择对应访问不同的安全对象范围。


图1.2 资源管理器中服务器和数据库的安全对象
你会发现Management Studio窗体下隐藏有各种安全功能,因此在你操作它们之前,有必要做一些探索。
SQL Server 2005安全检修引入一个变化,允许的权限被赋予更多粒度的方式。为了实施最小特权,你可以将多种权限分配给主体,每个主体有且仅有他们需要的权限:权限不多也不少。随着这种变化,微软加强T-SQL直接操纵安全对象。
1.1中的代码显示你可以使用T-SQL来创建安全对象的例子。代码首先创建一个服务器级登录连接到一个现有的Windows登录。然后,在AdventureWorks2012数据库,创建了一个用户映射到登录,以及向用户分配一个默认的架构。最后显示了在数据库中如何删除用户,并创建另一个用户映射到相同的登录名。当然也可以在图形界面操作。

--Add a Windows login to SQL Server
CREATE LOGIN [Marathon\JoeStairway] FROM WINDOWS;
GO
USE AdventureWorks2012;
GO
--Name the user the same name as login
CREATE USER [Marathon\JoeStairway] FOR LOGIN [Marathon\JoeStairway]
    WITH DEFAULT_SCHEMA = Production;
GO
--Or, rename the user in the database
DROP USER [Marathon\JoeStairway];
GO
CREATE USER Jane FOR LOGIN [Marathon\JoeStairway];
GO
--Query metadata to show that user was created
SELECT * FROM sys.database_principals WHERE name = ‘Marathon\JoeStairway‘;
SELECT * FROM sys.database_principals WHERE name = ‘Jane‘;

代码1.1 创建服务器登录名和数据库用户
如果你想试着运行这段代码,你可能首先需要做些调整。除非你的机器名是Marathon并且存在JoeStairway用户名,你需要在代码中更改这些名称。该代码在AdventureWorks2012创建数据库用户并且使用Production架构,所以你需要有这个数据库或更改代码使用另一个数据库和已有架构。但你可能需要AdventureWorks示例数据库,因为这一系列会频繁地使用到它们。
总结
这一篇讲述了SQL Server 2012基本的安全概念。你已经了解到的一些数据常见的威胁,并探讨了SQL Server安全背后的设计理念。你学会了安全的两个阶段——验证和授权,学到了一些安全术语,你可以通过图形界面和T-SQL语句来管理和实施安全。
下一篇,你会学到更多关于验证如何工作和验证选项。

时间: 2024-10-27 03:08:18

第一篇 SQL Server安全概述的相关文章

第一篇 SQL Server代理概述

本系列文章来源于sqlservercentral,详细内容请参考原文. SQL Server代理是SQL Server的作业调度和告警服务,如果使用得当,它可以大大简化DBA的工作量.SQL Server代理的核心是运行批量作业的能力.“批量”可以简单的理解成“一系列的动作”,经常是TSQL脚本.它们可以以作业的形式在特定的调度运行,这个调度你可以选择在只有少量用户访问系统的时间点/段.换而言之,可以使用SQL Server代理排定批量作业.批量作业可以是平常的T-SQL任务,也可以是运行于多个

第三篇——第二部分——第一文 SQL Server镜像简介

原文:第三篇--第二部分--第一文 SQL Server镜像简介 原文出处:http://blog.csdn.net/dba_huangzj/article/details/26951563 镜像是什么?说白了就是个镜子(没用过镜子?没镜子你总要小便吧?开个玩笑.. ),这里镜子的含义主要有两个:1.一模一样,下面会详细介绍,包括库名.数据文件和日志文件的存放路径都要一样.2.看得到,却"用不了",镜像库在没有做任何处理时是不可访问的.下面进入专业一点的解释: 数据库镜像(SQL Se

第五篇 SQL Server代理理解代理错误日志

本篇文章是SQL Server代理系列的第五篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.在第四篇中我们看到,SQL Server代理可以通过数据库邮件发送通知.如果有什么不正确的,你必须查看数据库邮件日志.在这一篇,你将学习如何理解和查看所有相关的SQL Server代理错误日志.你将回顾最常见的错误信息,掌握哪些信息需要你采取行动,哪些信息只是单纯的信息而已.一旦你理解错误日志,在处理SQL Serv

第九篇 SQL Server代理了解作业和安全

本篇文章是SQL Server代理系列的第九篇,详细内容请参考原文 在这系列的前几篇,学习了如何在SQL Server代理作业步骤启动外部程序.你可以使用过时的ActiveX系统,运行批处理命令脚本,甚至自己的程序.你最好的选择是使用PowerShell的子系统运行PowerShell脚本.PowerShell脚本将允许你处理几乎所有方面的Windows和SQL Server问题.在这一篇,你会深入到SQL Server代理安全.安全是个令人困惑的话题,它值得一些明确的考虑.这系列有两个不同方面

第六篇 SQL Server代理深入作业步骤工作流

本篇文章是SQL Server代理系列的第六篇,详细内容请参考原文. 正如这一系列的前几篇所述,SQL Server代理作业是由一系列的作业步骤组成,每个步骤由一个独立的类型去执行.每个作业步骤在技术上是独立的,但是你可以创建工作流贯穿作业中的各个步骤.在这篇文章中,你将学习如何在作业步骤中使用工作流来改变要执行的操作,单一作业有多个条件可以处理.你也会接触作业步骤安全和作业子系统的更多细节.SQL Server代理步骤如第二篇所述,SQL Server代理作业包含一个或多个作业步骤.每一个作业

MSSQL之一 数据库系统简介 与SQL Server 2008概述

前   言 SQL的全称是结构化查询语言(Structured Query Language),它是关系数据库中最常用的语言.SQL不仅可以管理数据库中的数据,而且可以管理关系数据库本身.为了避免各数据库产品之间的SQL语法不兼容,因此由ANSI(American National Standard Institute,美国国家标准局)制定SQL-92标准,目前,大部分DBMS产品都支持该标准. 本课程的目标是使学生掌握结构化查询语言(SQL),具有查询和管理数据库的能力. 本书主要的读者对象

第八篇 SQL Server代理使用外部程序

本篇文章是SQL Server代理系列的第八篇,详细内容请参考原文 在这系列的前几篇,学习了如何用SQL Server代理作业活动监视器监控作业活动和查看作业历史记录.在实时监控和管理SQL Server代理作业上,作业活动监视器是一个很好的工具.第八篇,你会看到SQL Server代理的另一个功能——the ability to shell out to the operating system and run programs outside of the SQL Server enviro

第十篇 SQL Server代理使用代理帐户

本篇文章是SQL Server代理系列的第十篇,详细内容请参考原文 在这系列的前几篇,你查看了msdb库下用于授权访问SQL Server代理的安全角色.这些角色包括SQLAgentUserRole.SQLAgentReaderRole和SQLAgentOperatorRole.每个角色授予用户一定的权限来使用SQL Server代理,而不必是sysadmin服务器角色的成员.为完全管理控制SQL Server代理,你仍然需要sysadmin角色的成员.此外,你回顾了SQL Server代理服务

第七篇 SQL Server代理作业活动监视器

本篇文章是SQL Server代理系列的第七篇,详细内容请参考原文 在这系列的前几篇,你创建并配置SQL Server代理作业.每个作业有一个或多个步骤,可能包含大量的工作流.在这篇文章中,将查看作业活动监视器.作业活动监视器是系统管理工具来运行工作,查看作业历史记录,并启用/禁用作业.本文同样会回顾一些作业活动监视器调用的存储过程,你可以直接调用过程做你自己的自定义任务监控.SQL Server代理作业活动监视器SQL Server代理作业活动监视器的主要机制是监视作业运行,以及查看代理已运行