1. MSSQL 数据库的安全性
在现代科技的发展中,数据已经成为了一个极其珍贵的资源,因此数据安全便显得尤为重要。而在数据库的安全性方面,MSSQL 相比其他数据库有较高的水平。
MSSQL支持的安全特性包括:身份认证、身份验证、授权、加密、审计和检查。 授权可以通过数据库角色和授权对象来实现。可以授予对象级别或其他级别的权限。MSSQL还支持加密,通过透明数据加密(TDE)可以对整个数据库进行加密。
此外,MSSQL也提供了诸如审计和检查等重要安全特性。通过审计,可以记录数据库的所有操作,包括读、写和修改操作以及用户登录等,保障了数据库的完整性和一致性。检查功能则可以帮助检查数据库服务器的配置,以防止潜在的安全风险。
2. MSSQL 数据库的身份认证
身份认证是保障数据库安全的第一关键。MSSQL数据可以使用windows身份认证(windows authentication)和SQL Server身份认证(SQL Server authentication)两种方式进行身份认证。
2.1 Windows 身份认证
在 Windows 身份认证中,MSSQL数据库服务器会使用 Windows 操作系统的账号和密码进行身份验证。这种方式最大的优点是可以实现 Single Sign-On,即一次登陆就可以使用多个受信任的应用程序。
通过以下代码,可以在 SQL Server 中添加 Windows 身份验证的登录方式:
--在 SQL Server 中添加一个 Windows 身份验证的登录方式
USE [master]
GO
CREATE LOGIN [Domain\Login] FROM WINDOWS WITH DEFAULT_DATABASE=[master], DEFAULT_LANGUAGE=[us_english]
GO
2.2 SQL Server 身份认证
SQL Server 身份认证是指利用 SQL Server 登录账户和密码进行身份验证的方式。这种方式更加灵活,可以在不同的平台上使用,但相比 Windows 身份认证来说,不太安全。因此在使用 SQL Server 身份认证时,需要对密码设置复杂度规则,避免设置过于简单的密码。
通过以下代码,可以在 SQL Server 中添加 SQL Server 身份认证的登录名称:
--在 SQL Server 中添加一个 SQL Server 身份验证的登录名称
USE [master]
GO
CREATE LOGIN [SQL_Login] WITH PASSWORD=N'YourPassword', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
3. MSSQL 数据库的身份验证
身份认证是确认访问者身份的过程,而身份验证是确认访问者在数据库中拥有访问权限的过程。MSSQL 数据库支持多种身份验证方式,包括 Windows 身份验证、SQL Server 身份验证、证书和 ASP.NET 身份提供程序等。
3.1 Windows 身份验证
在 Windows 身份验证中,MSSQL数据库服务器会根据Windows操作系统的账号信息,确认访问者的身份。如果用户已经使用Windows操作系统登录,MSSQL数据库服务器会自动认证,不需要再次输入密码。
使用下面的代码,可以创建一个使用Windows身份验证的数据库用户:
-- 在 MSSQL 中创建一个 Windows 身份验证的数据库用户
CREATE USER [domain\username] FOR LOGIN [domain\username]
3.2 SQL Server 身份验证
在 SQL Server 身份验证中,MSSQL 数据库服务器会根据用户提供的登录名和密码进行身份验证。用户可以通过 SQL Server Management Studio 或 T-SQL 脚本等方式进行身份验证。
使用下面的代码,可以创建一个使用 SQL Server 身份验证的数据库用户:
--在SQL Server中创建一个 SQL Server 身份验证的数据库用户
CREATE LOGIN [SQL_Login] WITH PASSWORD=N'YourPassword', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
CREATE USER [SQL_User] FOR LOGIN [SQL_Login]
4. MSSQL 数据库加密
MSSQL 数据库提供了多种加密方式,包括透明数据加密 (TDE)、动态数据加密 (DDE) 、列级加密、以及 Always Encrypted。
4.1 TDE 加密
透明数据加密 (TDE) 可以对整个数据库进行加密,从而保护数据库的机密数据。在 TDE 加密中,MSSQL 数据库管理员只需要对整个数据库添加一个加密器,而无需对每个表或列进行加密操作,这个过程对现有应用程序的影响最小。
使用下面的代码,可以对指定的 MSSQL 数据库启用 TDE 加密:
--启用 TDE 加密
USE master;
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'p@ssword123';
GO
CREATE CERTIFICATE MyServerCert WITH SUBJECT = 'My Certificate for TDE';
GO
CREATE DATABASE ENCRYPTION KEY
WITH ALGORITHM = AES_256
ENCRYPTION BY SERVER CERTIFICATE MyServerCert;
GO
ALTER DATABASE AdventureWorks2012
SET ENCRYPTION ON;
GO
4.2 Always Encrypted 加密
Always Encrypted是 MSSQL 中的另一种加密方式,它采用分段式加密,对列级数据进行加密,可以对单个列或多个列进行加密,因此可以最大限度地保护数据的隐私和完整性。
使用下面的代码可以创建一个使用 Always Encrypted 加密的数据库:
-- 在 SQL Server 中创建一个使用 Always Encrypted 加密的数据库
CREATE COLUMN MASTER KEY MyCMK WITH (
KEY_STORE_PROVIDER_NAME = 'MSSQL_CERTIFICATE_STORE',
KEY_PATH = 'CurrentUser/My/A91442DD679BE8BA0E249A638E8D424B74D8BABC');
CREATE COLUMN ENCRYPTION KEY MyCEK
WITH VALUES
(
COLUMN_MASTER_KEY = MyCMK,
ALGORITHM = 'RSA_OAEP',
ENCRYPTED_VALUE = 0x016E00000163007500630074006500670031003200004471C01A24D4CA5F2AA5A1D0B63E520F6487E7B9CF45EAF32497A08B65D258CE2DEC82236D22B7373DD2EE7DAFBB2A7A06714ED66B435BF1C94D267CA3CE2D9AEB4E3477302C9E34FBDAE9A9EF88D4EA4C5C70000
);
CREATE TABLE [dbo].[Patients]
(
[PatientID] [int] IDENTITY(1,1) NOT NULL,
[SSN] [char](11) COLLATE SQL_Latin1_General_CP1_CI_AS ENCRYPTED WITH (COLUMN_ENCRYPTION_KEY = MyCEK,
ENCRYPTION_TYPE = DETERMINISTIC,
ALGORITHM = 'AEAD_AES_256_CBC_HMAC_SHA_256') NOT NULL,
[FirstName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[LastName] [nvarchar](50) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[AdditionalInfo] [nvarchar](max) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
CONSTRAINT [PK_T_Patients] PRIMARY KEY CLUSTERED (
[PatientID] ASC
)
)
5. MSSQL 数据库审计
MSSQL 数据库的审计是指记录并审查数据库操作的过程,包括读、写、修改、备份、还原等。MSSQL 数据库的审计可以通过 SQL Server Management Studio 或 Transact-SQL 语句进行配置。
使用下面的代码,可以在 MSSQL 数据库中配置审计:
--在 SQL Server 中配置审计
--在 SQL Server 中创建服务器级别的审计
USE master;
GO
CREATE SERVER AUDIT Audit_PayPal
TO FILE
(
FILEPATH = 'D:\MSSQL\Audits\'
)
WITH
(
QUEUE_DELAY = 1000,
ON_FAILURE = CONTINUE,
AUDIT_GUID = 'D0171D9C-DB97-4162-95E7-F2A2AA220C74'
);
GO
--在 SQL Server 中创建数据库级别的审计
USE [PayPal];
GO
CREATE DATABASE AUDIT SPECIFICATION Ex_Audit_PayPal
FOR SERVER AUDIT Audit_PayPal
ADD (SELECT, INSERT, UPDATE, DELETE ON PayPal.* BY public)
WITH (STATE=ON);
GO
--启用审计
ALTER SERVER AUDIT Audit_PayPal
WITH (STATE = ON);
GO
总结
MSSQL 数据库提供了多种安全性能和加密功能,包括身份认证、授权、加密、审计、检查等等。作为一款广泛使用的商业数据库,MSSQL 数据库的安全性能优秀,可以保障数据库中的机密数据。