1. SQLServer安全性概述
SQLServer作为一款常用的关系型数据库管理系统,在各种企业信息化系统中占据重要地位。但同时,由于它存储了企业的核心数据,所以在安全性方面尤为重要,一旦安全性出现问题将会给企业造成巨大的损失。因此,在SQLServer的使用过程中,需要采取一系列措施,以确保其安全性。
2. 加强系统本身的安全性配置
2.1 系统默认数据库的安全机制
与许多其他数据库管理系统不同,SQL Server 的安全机制设定在系统数据库中。系统数据库包括 master、model、msdb 和 tempdb。其中,master 数据库存储了 SQL Server 实例信息,包括登录名、实例级配置、密钥和注册表数据。过多的管理员对此数据库授权,可能会导致实例安全存在风险。
针对这种情况,我们需要做的就是限制对 master 和 msdb 数据库的非管理员用户的访问。我们可以使用以下语句来实现:
DENY VIEW ANY DATABASE TO public;
GO
其中,VIEW ANY DATABASE 表示查看任意数据库,public 则表示所有用户。使用 DENY 将其限制。
2.2 强化安全性配置
在数据库系统中,存在很多的攻击手段,最常用的就是注入攻击。在 SQL Server 中,我们可以使用视图或存储过程来避免 SQL 注入攻击。视图和存储过程本质上都是对 SQL 语言的封装,使得攻击者无法直接在语句中进行恶意操作。
除此之外,我们还可以通过更改默认的服务器或数据库识别号来增加系统安全性。其中,服务器识别号被称为“SID”(Security Identifier),默认情况下是随机设置的。我们可以通过修改它来防止潜在的安全风险。操作方式是在 SQLServer Configuration Manager 中修改。
3. 数据库账户安全
3.1 密码安全性
密码安全性是最基本的安全性措施之一。要想确保密码安全性,我们需要遵循以下建议:
密码的长度应该不少于8个字符。
密码不应该使用重复、有规律的串等容易被猜测的内容。
密码中应包含字母、数字和特殊字符,以增加其复杂性。
经常更改密码。
为了保证密码复杂性,我们可以在 SQL Server 中配置密码策略。在这里,我们以 SQL Server 2016 为例进行配置:
USE master;
GO
EXEC xp_instance_regwrite N'HKEY_LOCAL_MACHINE',
N'Software\Microsoft\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQLServer',
N'PasswordPolicyEnforcement', REG_DWORD, 1;
GO
以上语句将密码策略的强制属性设置为 ON(默认是 OFF)。
3.2 账户访问的控制
在数据库中,我们经常需要授权数据库权限给用户。当然,授权并不是越多越好,在此我们需要根据不同的需求和角色来具体设置。
SQL Server 支持以下三种登录模式:
Windows 身份验证模式。这种模式下,登录的用户名是 Windows 中的用户名。
SQL 认证模式。这种模式下,登录的用户名和密码由 SQL Server 自己验证。
Azure Active Directory 身份验证模式。 这种模式下,登录的用户名是 Azure AD 中的用户名。
在具体进行账户访问控制时,我们可以针对每一个用户分配一个具体的角色,并且限制此角色对某些资源的访问。具体操作如下:
USE MyDB
-- 创建一个新的角色
CREATE ROLE [员工]
-- 授权此角色访问数据库
GRANT SELECT, INSERT, UPDATE, DELETE TO [员工]
-- 将特定用户添加到此角色中
EXEC sp_addrolemember '员工', 'Amy'
GO
4. 数据库审计
4.1 审计的概念
数据库审计是针对 SQL Server 数据库的活动的检查和监控,以便在数据库或数据库对象上发生重要事件时收集有关这些事件的信息。
通过启用数据库审计功能,我们可以收集以下信息:
成功或失败的登录尝试
成功或失败的连接尝试
授予或撤销安全权限
对表及其他数据库对象的任何更改
4.2 启用数据库审计
要启用数据库审计,需要遵循以下步骤:
创建审计。此步骤定义了审计日志文件(或 Windows 应用程序日志)、日志存储位置、最大文件大小、日志清理日期、是否启用强制完整性检查以及审计策略。以下的语句将会创建一个名为 Audit1 的审计,将审计日志文件存储在 C:\AuditLog\ 目录下。日志文件名为 Audit1_Log 和 Audit1.bak。
CREATE SERVER AUDIT Audit1 TO FILE (
FILEPATH = 'C:\AuditLog\'
,MAXSIZE = 10 MB
,MAX_FILES = 20
,RESERVE_DISK_SPACE = ON
)
WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE);
GO
创建审核规范。此步骤定义了需要审核的事件类别。以下语句创建一个名为 AuditSpec1 的审核规范,它定义了对 AdventureWorks 数据库上的 ALTER_TABLE 事件进行审核:
USE AdventureWorks;
GO
CREATE DATABASE AUDIT SPECIFICATION AuditSpec1
FOR SERVER AUDIT Audit1
ADD (ALTER_TABLE)
WITH (STATE = ON);
GO
在以上代码执行完毕后,SQL Server 将会针对 ALTER TABLE 事件在 Audit1 的审计日志文件中添加一条记录。
5. 总结
在 SQL Server 数据库系统中,安全性措施是至关重要的。为了保障数据库系统的安全运转,我们需要从系统、账户和审计等多个方面入手进行控制和管理。针对数据库环境中存在的安全管理需求,我们可以及时采取措施确保重要数据不会被泄露或受到破坏,以此来降低数据安全风险。