SQL Server数据库安全概述

本文涉及的产品
云数据库 RDS SQL Server,基础系列 2核4GB
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
简介: SQL数据库开发

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server数据库有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server数据库里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。

从让人眼花缭乱的客户端使用连接,通过到处分布的网络,尤其是互联网,关系数据库在各种应用程序里广泛使用。这使数据对任何人,在任何地方都可访问。数据库可以保存人类知识的很大部分,包括高度敏感的个人信息和让国际商务工作的关键数据。

对于想要偷取数据或通过篡改数据来伤害数据的拥有者的人来说,这些功能使数据库成为有吸引力的目标。确保你的数据安全是SQL Server数据库配置和使用它来保存数据的程序的重要部分。这个系列会探寻SQL Server 2012安全的基本,这样的话你可以保护你的数据和服务器资源,按你需要的安全等级来保护数据,免受这些威胁对你数据的影响。大部分信息对SQL Server数据库的早期版本也适用,回到SQL Server 2005也可以,因为那是微软在产品里彻底检查安全的时候。但我也会谈论只在SQL Server 2012和后续版本里才有的功能。

在保密你的服务器和数据,防备当前复杂的攻击,SQL Server数据库有你需要的一切。但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念。这篇文章提供了基础,因此你可以对SQL Server数据库里的安全功能充分利用,不用在面对特定威胁,不能保护你数据的功能上浪费时间。

威胁

在理解如何配置和使用SQL Server数据库来保护你的数据,识别特定数据集和它的服务器的威胁是重要的第一步。你创建的用来管理你的小学足球队的设备清单很可能不需要严格的安全措施。很可能你会想提供最小的访问控制,这样的话,足球队成员不能随机修改他拥有哪个足球盒的记录。即使这些数据被盗或篡改也不会是世界末日。

另一方面,如果数据库有关于足球队孩子的个人信息,例如家庭地址和联系电话,很可能你想加强安全保护(或许法律上也要求你这么做)。可能你会通过隔离访问来保护数据的隐私,这样的话,几乎任何可以访问数据库来修改设备数据,但只有一些人可以访问个人数据。如果数据包括家长的信用卡号,你会需要极其小心的保护那个数据。

你的数据很容易受到很多威胁,下列清单是常见的几个。在网络上有很多资源可以针对你的特定情况帮你分析。这个清单只想帮助你开始考虑这些威胁,如何使用SQL Server数据库的功能来应对它们,或者至少减少暴露数据给他们。

  • 数据窃取:数据窃取包括各种对你数据的未授权访问,无论通过黑入你网络的外界人员,还是在重要人物上非法扫描的内部人员。它会涉及到读取到禁止信息的兴奋,或者被通过销售窃取的信用卡号的利益所驱动。
  • 数据破坏:获的你数据访问权限的可以修改它,它会带来一系列的问题,包括关闭你的所有业务让你在公众面前尴尬(当你所有的客户记录被删除时就会发生)。
  • 数据篡改:在关系数据库里存储数据的一个最大好处是数据库本身可以帮助保护数据的完整性。数据完整性包括每个订单有关联的客户,在日期列存储的日期代表日历上的日期,百分比字段只包含0和100之间的值等这些约束。当你考虑安全的时候,数据完整性不会是第一个想到的,但却是你的数据保护的重要部分。
  • 非法存储:在过去,在商业过程期间,你收集的数据只是你个人的事。但选择在美国,遍及欧盟和可以控制你存储的各种个人信息,你如何存储它,你如何保护它的其他国家里的都有对应的法律存在。违法的处罚是严格的——包括罚款和对你公司的公共形象损失费。

这个系列文章谈到的SQL Server 2012的功能可以帮你缓解这些各类威胁和其他方面。你必须理解对你数据的威胁,才可以知道如何保护它们。不要在不能防止你特定数据威胁的措施上浪费时间。你永远不能考虑到所有的假设情况,但最为最坏的情况你要保证你的数据库服务器对它的面向客户是完全不可用的。安全总是个妥协,对时间的风险和实现保障的必要金钱之间的平衡。

安全设计理念

早在2012年,比尔盖茨发布了他臭名昭著的计算机可信备忘录,即微软在产品里如何考虑和实现安全的,可以证明是个转折点。根据微软官方网站,可信计算机政策启动了。“基于良好的商业实践,专注创建和带来安全,隐私和可靠的计算体验。我们的目标是更安全、更可信的互联网”。

话句话说,微软在十多年前就变得非常关注安全。关于这个修改的第一个版本是SQL Server 2005,微软开始在产品考虑充分的安全。自那以后,SQL Server数据库的每个版本都会保留新的安全架构,同时加强它,增加新的功能来同时提高安全来应对新出现的威胁。

如微软在SQL Server 2005时期里所描述的,通过定义产品安全的四大支柱来影响SQL Server可信计算发展。

  • 安全设计(Secure by design):微软进行广泛的威胁分析和代码设计与交互的安全审计,来确定攻击者可以立足获得服务器和数据的地方。这样让微软设计的SQL Server数据库可以保护你在服务器上存储的数据的保密性,完整性和可用性。
  • 默认安全(Secure by default):SQL Server数据库创造性的默认安装并激活关键的核心数据库组件。这就是说不是核心的数据库的功能不会安装,或者安装之后不会启用。没有安装的功能不安装就不会作为攻击目标。你必须清醒意识安装或启用的非核心功能。这会阻止你可能不知道却安装功能的很多攻击,你以为从未用过它们。
  • 部署安全(Secure in deploymen):微软提供工具,支持安装SQL Server数据库的安全并保持它的安全。SQL服务器配置工具帮助你配置服务器安全。最重要的是,SQL Server数据库的更新已经是微软在线更新的一部分,因此很容易获得安全的更新和补丁。
  • 互动安全(Secure through communication):微软已经建立了完善的基础设施来手机它产品中的漏洞。但这些信息如果只留在微软内部的话是没有任何用处的。因此公司致力于新漏洞的互动,积极打补丁来修正它们,定期发布更新到它的在线帮助系统来体现新的安全信息。

“它是安全的”的理念已经影响了整个产品。尽管SQL Server数据库一打开就是相当安全的,当你创建数据库和安装服务时,你必须做出明智的安全选择来保持SQL Server数据库的安全。作出并保证生产数据库服务器的安全需要行动和警惕。

记住有时候保护数据的最佳方法是直接不把它不放到数据库里——例如,只保存你必须绝对坚持有效的信用卡信息(这样的人并不多)。如果你没有这样的需求,你应该处理信用卡事务,保存结果,而不是信用卡信息本身。你不会承受你没有数据上的安全风险。

安全的2个阶段

SQL Server数据库的安全模型,像Windows一样,是个2个阶段的过程,允许用户和其它登录的访问服务器里受保护的资源。

  • 身份验证(Authentication):一个用户登录成功,是有效的,可以访问服务器。身份验证回答问题,“你是谁?“需要用户去证明它,通常需要用户提供用户名和对应的密码,但其它形式的证据变得更加流行。
  • 授权(Authorization):用户可以和SQL Server对象互动——例如数据库,表和存储过程——哪个用户有权限。授权回答问题,”你可以做什么?“。

用户可以登录到SQL Server,但除非它们有权限做什么,例如访问数据库,它就做不了什么。因此你不仅需要为你的用户提供授权凭证,你还要授权它们访问数据,在每个它们需要使用的数据库里为它们授权一次,定义账号。

当你考虑它的时候,在每个数据库里需要一个用户账号更有意义。不然的话,什么可以阻止用户登录到SQL Server并可以访问想访问任何数据库。这个概念有不同的含义来实现不同的场景,但这是安全的基本状态。

在这个系列的接下来文章会谈到验证和授权,你会学到在SQL Server里如何实现各种安全功能来应付你对数据已经识别的威胁。

SQL Server安全术语

当你与SQL Server数据库和其它产品打交道时,你会碰到各种特定的专业术语。这里有一些最常见的术语,还有在数据库安全上下文里它们的含义。

  • 验证(Authentication):如上面提到的,验证是积极识别一个人的过程,通过需要证明它是可以登录的人。它回答问题:你是谁?

  • 授权(Authorization):一旦系统验证你为一个有效用户,授权(如上所述)决定用户在服务器或数据库拥有的权限。它回答问题,这里现在你能做什么?

  • 组(Group):在Windows里,组是已登录后与它关联的主体。任何授权到组都会授权到组里相关联的登录。

  • 模拟(Impersonation):所有的Windows进程,包括各种SQL Server进程,在特定的安全上下文里运行,通常是主体引起进程启动。当进程临时在不同的安全上下文时会发生模拟。这是非常强大的切必需的能力,但会引起潜在的滥用。

  • 登录(Login):登录是拥有服务器实例里的对象一些访问级别的主体。通常,登录常用来与用户交互。但是SQL Server数据库登录是一个用来从外面访问服务器的账号。有时候登录包括访问服务器级别的对象,例如配置信息,但不会授予数据库里的任何权限。
  • 许可(Permission):许可是访问保护资源的权利,例如从表读取数据或在服务器级别创建新的数据库。一个学科通常意味着其他许可,取决于对象许可的范围。
  • 主体(Principal):主体是可以接收访问SQL Server数据库里保护资源的任何用户或代码组件。
  • 权限(Privilege):权限是主体拥有的广泛权利和许可。这个词有时候和许可交替使用,通常意味着特定、狭义的权利。权利意味着一组广泛的许可。
  • 角色(Role):SQL Server数据库角色类似于Windows用户组,但只限于SQL Server数据库实例范围。对于一个组,你可以分配登录和用户到角色,这就是这个角色拥有登录和用户的所有许可。

  • 用户(User):用户是在特定数据库里拥有对象的一些访问级别的主体。用户通常会映射到登录。简单来说,登录可以访问SQL Server数据库实例,用户可以访问数据。

在这个系列的文章里你会看到大部分这些术语的使用。

SQL Server安全管理和实现

正如SQL Server数据库里大多数操纵和管理任务,通常安全功能几乎都有很多管理和实现方法,包括使用SSMS的图形界面,编写和执行T-SQL代码,使用在命令行编写PowerShell与SQL Server数据库进行交互。使用PowerShell已经不是本系列文章的讨论范围,但在这个系列文章里,你会看到另外2个技术的很多例子。

使用SSMS的安全功能,通常你可以在对象浏览器里右击合适的对象,选择【属性】,然后在对话框里使用合适的页来做你想要的修改。例如,在AdventureWorksLT2012示例数据库上设置安全,在对象浏览器里右击数据库名,选择【属性】,然后选择【权限】页,如插图1.1所示。

71.jpg

插图1.2:用来修改AdventureWorksLT2012数据库安全的权限页

同时在数据库和服务器级别,对象浏览器包括了安全节点,让你管理和实现其他各种安全功能。插图1.2显示了对AdventureWorksLT2012数据库和服务器实例级别的这个节点。这2个高亮的节点包括各种子节点,给你在选择范围内访问合适的安全对象。



72.jpg

插图1.2:在对象浏览器里,在服务器和数据库级别的安全对象

你会在SSMS和它各个窗体里找到各种隐藏的安全功能,因此你可以好好点开这些安全性节点。

在SQL Server 2005彻底安检里另外一个改变是可以允许更颗粒度的方式分配安全。在接下来的文章里你就会学到,你会对各种主体分配各种许可来实现“最小特权”的重要安全原则——这个想法是每个主体只能有它们需要的许可:不多也不少。随着这个改变,微软增强了T-SQL,在语言上有强大的支持,可以直接操纵安全对象。

代码1.1展示了你可以使用T-SQL创建安全对象的简单例子。代码首先创建链接到现存系统登录的服务器级别的登录。然后在AdventureWorksLT2012数据库里,代码创建了个用户映射到登录,分配了默认架构给用户。最后的一点代码向你展示了你如何在数据库里删除用户和创建另一个用户映射到同样的登录。很作秀,当然,但是它展示了在代码里你能做什么。或者你也可以在SSMS的图形界面里实现,如果你喜欢的话。


73.png

代码1.1:创建服务器登录和数据库用户的示例代码

如果你想运行这个代码,首先你要做些改动。除非你的计算机名称和我的一样,且有一个woodytu的用户存在,你需要在代码里修改名称。这个代码在AdventureWorksLT2012数据库创建数据库用户,并使用它的Production架构,因此你要么需要安装这个数据库,要么修改代码使用另一个数据库和它里面存在的架构。但我还是建议你安装AdventureWorks数据库,因为接下来的文章会频繁用到它。

小结

这个系列的第一篇文章给你概括介绍了SQL Server 2012里的基本安全概念。你学到了一些常见的数据威胁,探寻了SQL Server数据库背后的设计理念。你学到了安全的2个阶段——身份验证和授权,学习了在整个系列文章看到的一些安全术语,目睹了你可以使用SSMS图形界面和T-SQL代码来管理和实现安全。


相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情: https://www.aliyun.com/product/rds/sqlserver
相关文章
|
2月前
|
SQL 开发框架 .NET
ASP.NET连接SQL数据库:详细步骤与最佳实践指南ali01n.xinmi1009fan.com
随着Web开发技术的不断进步,ASP.NET已成为一种非常流行的Web应用程序开发框架。在ASP.NET项目中,我们经常需要与数据库进行交互,特别是SQL数据库。本文将详细介绍如何在ASP.NET项目中连接SQL数据库,并提供最佳实践指南以确保开发过程的稳定性和效率。一、准备工作在开始之前,请确保您
199 3
|
17天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第8天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统准备、配置安装源、安装 SQL Server 软件包、运行安装程序、初始化数据库以及配置远程连接。通过这些步骤,您可以顺利地在 CentOS 系统上部署和使用 SQL Server 2019。
|
18天前
|
SQL 存储 Linux
从配置源到数据库初始化一步步教你在CentOS 7.9上安装SQL Server 2019
【11月更文挑战第7天】本文介绍了在 CentOS 7.9 上安装 SQL Server 2019 的详细步骤,包括系统要求检查与准备、配置安装源、安装 SQL Server 2019、配置 SQL Server 以及数据库初始化(可选)。通过这些步骤,你可以成功安装并初步配置 SQL Server 2019,进行简单的数据库操作。
|
28天前
|
SQL 数据采集 监控
局域网监控电脑屏幕软件:PL/SQL 实现的数据库关联监控
在当今网络环境中,基于PL/SQL的局域网监控系统对于企业和机构的信息安全至关重要。该系统包括屏幕数据采集、数据处理与分析、数据库关联与存储三个核心模块,能够提供全面而准确的监控信息,帮助管理者有效监督局域网内的电脑使用情况。
18 2
|
2月前
|
存储 数据挖掘 数据库
数据库数据恢复—SQLserver数据库ndf文件大小变为0KB的数据恢复案例
一个运行在存储上的SQLServer数据库,有1000多个文件,大小几十TB。数据库每10天生成一个NDF文件,每个NDF几百GB大小。数据库包含两个LDF文件。 存储损坏,数据库不可用。管理员试图恢复数据库,发现有数个ndf文件大小变为0KB。 虽然NDF文件大小变为0KB,但是NDF文件在磁盘上还可能存在。可以尝试通过扫描&拼接数据库碎片来恢复NDF文件,然后修复数据库。
|
2月前
|
SQL 关系型数据库 MySQL
Go语言项目高效对接SQL数据库:实践技巧与方法
在Go语言项目中,与SQL数据库进行对接是一项基础且重要的任务
75 11
|
2月前
|
SQL 监控 数据库
慢SQL对数据库写入性能的影响及优化技巧
在数据库管理系统中,慢SQL(即执行缓慢的SQL语句)不仅会影响查询性能,还可能对数据库的写入性能产生显著的不利影响
|
2月前
|
SQL 数据库 数据库管理
数据库SQL函数应用技巧与方法
在数据库管理中,SQL函数是处理和分析数据的强大工具
|
2月前
|
SQL 存储 数据可视化
SQL 数据库大揭秘:连接数字世界的魔法桥梁
在数字化时代,数据如繁星般璀璨,而 SQL 数据库则像强大的引力场,有序汇聚、整理和分析这些数据。SQL 数据库是一个巨大的数字宝库,装满各行各业的“宝藏”。本文将带你探索 SQL 数据库在电商、金融、医疗和教育等领域的应用。例如,在电商中,它能精准推荐商品;在金融中,它是安全卫士,防范欺诈;在医疗中,它是健康管家,管理病历;在教育中,则是智慧导师,个性化教学。此外,还将介绍如何利用板栗看板等工具实现数据可视化,提升决策效率。
|
2月前
|
SQL 数据库
SQL数据库基础语法入门
[link](http://www.vvo.net.cn/post/082935.html)