Skip to content

SQLServer 数据安全

数据安全概述

数据安全威胁

  • 数据泄露:未经授权访问或披露敏感数据
  • 数据篡改:恶意修改数据,导致数据完整性受损
  • 数据丢失:由于硬件故障、自然灾害或人为错误导致数据丢失
  • 勒索软件攻击:加密数据库文件,要求支付赎金才能恢复
  • 内部威胁:授权用户滥用权限访问或泄露数据
  • SQL注入:攻击者通过恶意SQL代码获取数据库访问权限
  • 特权提升:攻击者获取超出其权限范围的数据库访问权限

数据安全策略

  • 实施分层安全防御体系
  • 采用最小权限原则
  • 加密敏感数据,无论是静态数据还是传输中的数据
  • 定期备份数据并测试恢复过程
  • 实施严格的访问控制和身份验证
  • 监控和审计数据库活动
  • 定期进行安全评估和漏洞扫描
  • 制定事件响应计划

合规要求

  • GDPR:要求保护欧盟公民的个人数据,实施数据保护措施
  • HIPAA:要求保护医疗保健数据,实施数据加密和访问控制
  • PCI DSS:要求保护信用卡数据,实施数据加密和访问控制
  • SOX:要求保护财务数据,实施审计和内部控制
  • ISO 27001:要求实施信息安全管理体系
  • CCPA/CPRA:要求保护加州居民的个人数据,提供数据访问和删除权利

数据加密

透明数据加密 (TDE)

概述

  • TDE 加密数据库文件(数据文件和日志文件)
  • 对应用程序透明,无需修改应用代码
  • 保护静态数据,防止物理文件被盗取
  • 加密和解密在数据库引擎层自动处理

配置 TDE

  1. 创建数据库主密钥

    sql
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';
  2. 创建证书

    sql
    USE master;
    CREATE CERTIFICATE TDECertificate WITH SUBJECT = 'TDE Certificate';
  3. 创建数据库加密密钥

    sql
    USE YourDatabase;
    CREATE DATABASE ENCRYPTION KEY
    WITH ALGORITHM = AES_256
    ENCRYPTION BY SERVER CERTIFICATE TDECertificate;
  4. 启用 TDE

    sql
    USE YourDatabase;
    ALTER DATABASE YourDatabase SET ENCRYPTION ON;
  5. 验证 TDE 状态

    sql
    SELECT 
        name, 
        is_encrypted,
        encryption_state, 
        encryption_state_desc = 
            CASE encryption_state
                WHEN 0 THEN '未加密'
                WHEN 1 THEN '已加密'
                WHEN 2 THEN '正在加密'
                WHEN 3 THEN '正在解密'
                WHEN 4 THEN '密钥更改中'
                WHEN 5 THEN '正在创建证书'
            END
    FROM sys.dm_database_encryption_keys;

列级加密

概述

  • 对特定列的数据进行加密
  • 适用于保护敏感数据,如信用卡号、社会安全号等
  • 提供更精细的加密控制
  • 支持多种加密算法和密钥类型

实现列级加密

使用对称密钥加密
  1. 创建数据库主密钥

    sql
    USE YourDatabase;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';
  2. 创建证书

    sql
    USE YourDatabase;
    CREATE CERTIFICATE ColumnEncryptionCert WITH SUBJECT = 'Column Encryption Certificate';
  3. 创建对称密钥

    sql
    USE YourDatabase;
    CREATE SYMMETRIC KEY ColumnEncryptionKey
    WITH ALGORITHM = AES_256
    ENCRYPTION BY CERTIFICATE ColumnEncryptionCert;
  4. 创建测试表

    sql
    USE YourDatabase;
    CREATE TABLE Customers (
        CustomerID INT PRIMARY KEY,
        CustomerName NVARCHAR(100),
        CreditCardNumber VARBINARY(128)
    );
  5. 加密列数据

    sql
    USE YourDatabase;
    OPEN SYMMETRIC KEY ColumnEncryptionKey DECRYPTION BY CERTIFICATE ColumnEncryptionCert;
    
    INSERT INTO Customers (CustomerID, CustomerName, CreditCardNumber)
    VALUES (1, 'John Doe', EncryptByKey(Key_Guid('ColumnEncryptionKey'), '1234-5678-9012-3456'));
    
    CLOSE SYMMETRIC KEY ColumnEncryptionKey;
  6. 解密列数据

    sql
    USE YourDatabase;
    OPEN SYMMETRIC KEY ColumnEncryptionKey DECRYPTION BY CERTIFICATE ColumnEncryptionCert;
    
    SELECT 
        CustomerID,
        CustomerName,
        CreditCardNumber AS EncryptedCC,
        CONVERT(NVARCHAR(50), DecryptByKey(CreditCardNumber)) AS DecryptedCC
    FROM Customers;
    
    CLOSE SYMMETRIC KEY ColumnEncryptionKey;
使用 Always Encrypted

Always Encrypted 是 SQL Server 2016 引入的功能,提供应用程序层加密,保护数据在传输和存储过程中的安全。

  1. 在 SSMS 中配置 Always Encrypted

    • 右键点击表,选择 "加密列"
    • 选择要加密的列和加密类型
    • 配置密钥存储位置(Windows 证书存储或 Azure Key Vault)
    • 完成加密设置
  2. 应用程序连接字符串配置

    Server=YourServer;Database=YourDatabase;Column Encryption Setting=Enabled;

临时表加密

概述

  • 临时表存储在 tempdb 数据库中
  • 如果 tempdb 未加密,敏感数据可能会泄露
  • TDE 加密的数据库中的临时表会自动加密

配置 tempdb 加密

  • 为 tempdb 启用 TDE:
    sql
    -- 创建主密钥和证书(如果尚未创建)
    USE master;
    CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';
    CREATE CERTIFICATE TDECertificate WITH SUBJECT = 'TDE Certificate';
    
    -- tempdb 会自动继承实例级别的 TDE 配置

备份加密

概述

  • 加密数据库备份,防止未授权恢复
  • 支持多种加密算法
  • 需要证书或非对称密钥

配置备份加密

  1. 创建备份证书

    sql
    USE master;
    CREATE CERTIFICATE BackupCertificate WITH SUBJECT = 'Backup Encryption Certificate';
  2. 备份证书和私钥

    sql
    BACKUP CERTIFICATE BackupCertificate TO FILE = 'D:\Certificates\BackupCertificate.cer'
    WITH PRIVATE KEY (FILE = 'D:\Certificates\BackupCertificate.pvk', 
                      ENCRYPTION BY PASSWORD = 'StrongPassword123!');
  3. 执行加密备份

    sql
    BACKUP DATABASE YourDatabase
    TO DISK = 'D:\Backups\YourDatabase_Encrypted.bak'
    WITH ENCRYPTION (ALGORITHM = AES_256, 
                     SERVER CERTIFICATE = BackupCertificate),
         COMPRESSION, 
         STATS = 10;
  4. 验证备份加密

    sql
    RESTORE HEADERONLY FROM DISK = 'D:\Backups\YourDatabase_Encrypted.bak';
    -- 查看 Encrypted 列,1 表示已加密

密钥管理

服务主密钥 (SMK)

概述

  • SMK 是 SQL Server 实例级别的密钥
  • 加密数据库主密钥、证书和链接服务器密码
  • 自动生成并加密,默认使用 Windows DPAPI 加密

备份 SMK

sql
USE master;
BACKUP SERVICE MASTER KEY TO FILE = 'D:\Keys\ServiceMasterKey.bak'
WITH ENCRYPTION BY PASSWORD = 'StrongPassword123!';

恢复 SMK

sql
USE master;
RESTORE SERVICE MASTER KEY FROM FILE = 'D:\Keys\ServiceMasterKey.bak'
DECRYPTION BY PASSWORD = 'StrongPassword123!';

数据库主密钥 (DMK)

概述

  • DMK 是数据库级别的密钥
  • 加密证书、非对称密钥和对称密钥
  • 需要密码保护或由 SMK 加密

创建 DMK

sql
USE YourDatabase;
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'StrongPassword123!';

由 SMK 加密 DMK

sql
USE YourDatabase;
ALTER MASTER KEY ADD ENCRYPTION BY SERVICE MASTER KEY;

备份 DMK

sql
USE YourDatabase;
BACKUP MASTER KEY TO FILE = 'D:\Keys\DatabaseMasterKey.bak'
WITH ENCRYPTION BY PASSWORD = 'StrongPassword123!';

证书

概述

  • 用于加密数据库加密密钥、对称密钥和备份
  • 可以由 DMK 或密码加密
  • 支持多种加密算法

创建证书

sql
USE YourDatabase;
CREATE CERTIFICATE MyCertificate 
WITH SUBJECT = 'My Database Certificate',
     EXPIRY_DATE = '2025-12-31';

备份证书

sql
USE YourDatabase;
BACKUP CERTIFICATE MyCertificate TO FILE = 'D:\Certificates\MyCertificate.cer'
WITH PRIVATE KEY (FILE = 'D:\Certificates\MyCertificate.pvk', 
                  ENCRYPTION BY PASSWORD = 'StrongPassword123!');

非对称密钥

概述

  • 用于加密对称密钥和少量数据
  • 基于公钥/私钥对
  • 加密解密速度较慢,适合加密小量数据

创建非对称密钥

sql
USE YourDatabase;
CREATE ASYMMETRIC KEY MyAsymmetricKey 
WITH ALGORITHM = RSA_2048,
     ENCRYPTION BY PASSWORD = 'StrongPassword123!';

对称密钥

概述

  • 用于加密大量数据
  • 使用相同的密钥进行加密和解密
  • 加密解密速度快,适合加密大量数据

创建对称密钥

sql
USE YourDatabase;
CREATE SYMMETRIC KEY MySymmetricKey 
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE MyCertificate;

密钥轮换

概述

  • 定期更换密钥,减少密钥泄露的风险
  • 支持平滑轮换,不影响数据库可用性
  • 需要备份旧密钥,防止数据丢失

对称密钥轮换示例

sql
USE YourDatabase;

-- 打开旧密钥
OPEN SYMMETRIC KEY OldSymmetricKey DECRYPTION BY CERTIFICATE MyCertificate;

-- 创建新密钥
CREATE SYMMETRIC KEY NewSymmetricKey 
WITH ALGORITHM = AES_256
ENCRYPTION BY CERTIFICATE MyCertificate;

-- 打开新密钥
OPEN SYMMETRIC KEY NewSymmetricKey DECRYPTION BY CERTIFICATE MyCertificate;

-- 轮换表中的加密数据
UPDATE YourTable
SET EncryptedColumn = EncryptByKey(Key_Guid('NewSymmetricKey'), 
                                   DecryptByKey(EncryptedColumn));

-- 关闭密钥
CLOSE SYMMETRIC KEY OldSymmetricKey;
CLOSE SYMMETRIC KEY NewSymmetricKey;

-- 删除旧密钥
DROP SYMMETRIC KEY OldSymmetricKey;

证书轮换示例

sql
USE master;

-- 创建新证书
CREATE CERTIFICATE NewTDECertificate WITH SUBJECT = 'New TDE Certificate';

-- 备份新证书
BACKUP CERTIFICATE NewTDECertificate TO FILE = 'D:\Certificates\NewTDECertificate.cer'
WITH PRIVATE KEY (FILE = 'D:\Certificates\NewTDECertificate.pvk', 
                  ENCRYPTION BY PASSWORD = 'StrongPassword123!');

-- 轮换 TDE 证书
USE YourDatabase;
ALTER DATABASE ENCRYPTION KEY 
ENCRYPTION BY SERVER CERTIFICATE NewTDECertificate;

敏感数据保护

敏感数据识别

使用 SQL Server 数据发现和分类

  1. 在 SSMS 中右键点击数据库,选择 "任务" → "数据发现和分类" → "分类数据"
  2. 系统会自动建议敏感数据列
  3. 手动调整分类结果
  4. 导出分类报告

使用 T-SQL 识别敏感数据

sql
-- 识别可能包含信用卡号的列
SELECT 
    t.name AS TableName,
    c.name AS ColumnName,
    ty.name AS DataType,
    c.max_length AS MaxLength
FROM sys.tables t
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id
WHERE c.name LIKE '%credit%' OR c.name LIKE '%cc%' OR c.name LIKE '%card%'
   OR t.name LIKE '%credit%' OR t.name LIKE '%cc%' OR t.name LIKE '%card%';

数据分类

分类级别

  • 公开:可公开访问的数据
  • 内部:仅供内部使用的数据
  • 机密:需要严格访问控制的数据
  • 高度机密:最敏感的数据,需要最高级别的保护

手动分类示例

sql
-- 添加数据分类扩展属性
USE YourDatabase;
ADD SENSITIVITY CLASSIFICATION TO 
    dbo.Customers.CreditCardNumber
WITH (LABEL = 'Financial Data', INFORMATION_TYPE = 'Credit Card Number', SENSITIVITY_RANK = HIGH);

数据脱敏

概述

  • 对敏感数据进行掩码处理,保护数据隐私
  • 支持多种掩码函数
  • 可以根据用户权限动态显示或隐藏敏感数据

配置动态数据掩码

  1. 创建测试表

    sql
    USE YourDatabase;
    CREATE TABLE Employees (
        EmployeeID INT PRIMARY KEY,
        FirstName NVARCHAR(50),
        LastName NVARCHAR(50),
        Email NVARCHAR(100),
        Phone NVARCHAR(20),
        Salary DECIMAL(10, 2)
    );
  2. 插入测试数据

    sql
    USE YourDatabase;
    INSERT INTO Employees VALUES 
    (1, 'John', 'Doe', 'john.doe@example.com', '555-123-4567', 50000.00),
    (2, 'Jane', 'Smith', 'jane.smith@example.com', '555-987-6543', 60000.00);
  3. 配置数据掩码

    sql
    USE YourDatabase;
    ALTER TABLE Employees
    ALTER COLUMN Email ADD MASKED WITH (FUNCTION = 'email()');
    
    ALTER TABLE Employees
    ALTER COLUMN Phone ADD MASKED WITH (FUNCTION = 'partial(0, "XXX-XXX-", 4)');
    
    ALTER TABLE Employees
    ALTER COLUMN Salary ADD MASKED WITH (FUNCTION = 'default()');
  4. 创建测试用户并授予权限

    sql
    USE master;
    CREATE LOGIN MaskedUser WITH PASSWORD = 'StrongPassword123!';
    
    USE YourDatabase;
    CREATE USER MaskedUser FOR LOGIN MaskedUser;
    GRANT SELECT ON Employees TO MaskedUser;
  5. 测试数据掩码效果

    sql
    -- 以特权用户身份查询
    SELECT * FROM Employees;
    -- 查看完整数据
    
    -- 以 MaskedUser 身份查询
    EXECUTE AS USER = 'MaskedUser';
    SELECT * FROM Employees;
    -- 查看掩码数据
    REVERT;

数据泄露防护

概述

  • 防止敏感数据未经授权流出组织
  • 结合数据分类和访问控制
  • 监控数据访问和传输

实现数据泄露防护

  1. 实施严格的访问控制

    • 使用最小权限原则
    • 实施基于角色的访问控制 (RBAC)
    • 定期审查用户权限
  2. 监控数据访问

    • 启用 SQL Server 审计
    • 配置扩展事件跟踪敏感数据访问
    • 使用 Azure SQL 高级威胁防护
  3. 限制数据传输

    • 限制数据库镜像和复制
    • 控制备份访问
    • 监控和限制数据导出操作

备份安全

备份加密

  • 如前所述,使用 AES-256 等强加密算法加密备份
  • 定期轮换备份加密证书
  • 确保备份加密密钥的安全存储

备份存储安全

本地存储

  • 将备份存储在专用的备份服务器上
  • 实施物理访问控制
  • 使用磁盘加密(如 BitLocker)保护备份存储

云存储

  • 使用 Azure Blob 存储或 AWS S3 存储备份
  • 实施严格的访问控制策略
  • 使用加密存储桶
  • 配置生命周期策略,自动删除过期备份

离线存储

  • 定期将备份复制到离线存储介质
  • 存储在安全的物理位置
  • 实施严格的访问控制

备份访问控制

  • 限制备份文件的文件系统权限
  • 仅允许授权用户访问备份存储
  • 实施备份操作的审计
  • 定期审查备份访问日志

备份验证

验证备份完整性

sql
RESTORE VERIFYONLY FROM DISK = 'D:\Backups\YourDatabase.bak';

定期测试恢复

  • 定期执行测试恢复,确保备份可用于恢复
  • 记录恢复时间,优化恢复过程
  • 测试不同的恢复场景

使用 CHECKSUM

sql
BACKUP DATABASE YourDatabase TO DISK = 'D:\Backups\YourDatabase.bak' WITH CHECKSUM;
RESTORE DATABASE YourDatabase_Test FROM DISK = 'D:\Backups\YourDatabase.bak' WITH CHECKSUM, RECOVERY, NOREWIND, NOUNLOAD;

审计与合规

SQL Server 审计

概述

  • 用于监控和记录数据库活动
  • 支持服务器级别和数据库级别的审计
  • 可以将审计日志存储在文件、Windows 事件日志或 Azure Blob 存储中

配置服务器审计

  1. 创建服务器审计

    sql
    CREATE SERVER AUDIT DataSecurityAudit
    TO FILE (FILEPATH = 'D:\Audits\', MAXSIZE = 100 MB, MAX_ROLLOVER_FILES = 10)
    WITH (ON_FAILURE = CONTINUE);
  2. 启用服务器审计

    sql
    ALTER SERVER AUDIT DataSecurityAudit WITH (STATE = ON);
  3. 创建服务器审计规范

    sql
    CREATE SERVER AUDIT SPECIFICATION DataSecurityServerSpec
    FOR SERVER AUDIT DataSecurityAudit
    ADD (FAILED_LOGIN_GROUP),
    ADD (SUCCESSFUL_LOGIN_GROUP),
    ADD (SERVER_PRINCIPAL_CHANGE_GROUP);
  4. 启用服务器审计规范

    sql
    ALTER SERVER AUDIT SPECIFICATION DataSecurityServerSpec WITH (STATE = ON);
  5. 创建数据库审计规范

    sql
    USE YourDatabase;
    CREATE DATABASE AUDIT SPECIFICATION DataSecurityDatabaseSpec
    FOR SERVER AUDIT DataSecurityAudit
    ADD (SELECT ON dbo.Customers BY PUBLIC),
    ADD (UPDATE ON dbo.Customers BY PUBLIC),
    ADD (DELETE ON dbo.Customers BY PUBLIC);
  6. 启用数据库审计规范

    sql
    USE YourDatabase;
    ALTER DATABASE AUDIT SPECIFICATION DataSecurityDatabaseSpec WITH (STATE = ON);
  7. 查看审计日志

    sql
    SELECT 
        event_time,
        action_id,
        session_id,
        server_principal_name,
        database_principal_name,
        object_name,
        statement
    FROM sys.fn_get_audit_file('D:\Audits\DataSecurityAudit*', NULL, NULL);

扩展事件

概述

  • 轻量级的事件监控系统
  • 用于捕获数据库活动和性能数据
  • 比 SQL Server 审计具有更低的性能开销

配置扩展事件监控敏感数据访问

  1. 创建扩展事件会话

    sql
    CREATE EVENT SESSION [SensitiveDataAccess]
    ON SERVER
    ADD EVENT sqlserver.sql_statement_completed(
        ACTION(
            sqlserver.client_app_name,
            sqlserver.client_hostname,
            sqlserver.database_name,
            sqlserver.server_principal_name,
            sqlserver.sql_text
        )
        WHERE (
            sqlserver.database_name = 'YourDatabase' AND
            sqlserver.sql_text LIKE '%CreditCardNumber%' OR
            sqlserver.sql_text LIKE '%SSN%'
        )
    )
    ADD TARGET package0.event_file(SET filename=N'D:\XEvents\SensitiveDataAccess.xel')
    WITH (
        MAX_MEMORY=4096 KB,
        EVENT_RETENTION_MODE=ALLOW_SINGLE_EVENT_LOSS,
        MAX_DISPATCH_LATENCY=30 SECONDS,
        MAX_EVENT_SIZE=0 KB,
        MEMORY_PARTITION_MODE=NONE,
        TRACK_CAUSALITY=OFF,
        STARTUP_STATE=OFF
    );
  2. 启动扩展事件会话

    sql
    ALTER EVENT SESSION [SensitiveDataAccess] ON SERVER STATE=START;
  3. 查看扩展事件数据

    sql
    SELECT 
        event_data.value('(event/@name)[1]', 'nvarchar(50)') AS event_name,
        event_data.value('(event/@timestamp)[1]', 'datetime2') AS event_time,
        event_data.value('(event/action[@name="server_principal_name"]/value)[1]', 'nvarchar(100)') AS user_name,
        event_data.value('(event/action[@name="client_hostname"]/value)[1]', 'nvarchar(100)') AS client_hostname,
        event_data.value('(event/action[@name="sql_text"]/value)[1]', 'nvarchar(max)') AS sql_text
    FROM sys.fn_xe_file_target_read_file('D:\XEvents\SensitiveDataAccess*.xel', NULL, NULL, NULL);

合规报告

生成数据分类报告

  1. 在 SSMS 中右键点击数据库,选择 "任务" → "数据发现和分类" → "生成报告"
  2. 选择报告格式(PDF 或 Excel)
  3. 保存并提交报告

生成审计报告

  • 定期分析审计日志
  • 生成合规报告,包括:
    • 数据访问活动
    • 权限变更
    • 安全事件
    • 备份和恢复操作

安全配置

安全配置基线

建立基线

  • 定义安全配置基线,包括:
    • 禁用不必要的功能
    • 启用必要的安全功能
    • 配置密码策略
    • 配置审计设置

使用 SQL Server 安全最佳实践

  • 参考 Microsoft SQL Server 安全最佳实践
  • 使用 SQL Server 基准配置工具 (SCAP)
  • 定期审查和更新安全基线

禁用不必要的功能

禁用 xp_cmdshell

sql
USE master;
EXEC sp_configure 'show advanced options', 1;
RECONFIGURE;
EXEC sp_configure 'xp_cmdshell', 0;
RECONFIGURE;

禁用 OLE Automation Procedures

sql
USE master;
EXEC sp_configure 'Ole Automation Procedures', 0;
RECONFIGURE;

禁用 CLR Integration

sql
USE master;
EXEC sp_configure 'clr enabled', 0;
RECONFIGURE;

禁用 Database Mail XPs

sql
USE master;
EXEC sp_configure 'Database Mail XPs', 0;
RECONFIGURE;

安全补丁管理

最佳实践

  • 及时安装 SQL Server 安全补丁
  • 测试补丁在非生产环境中的效果
  • 制定补丁部署计划
  • 定期审查补丁状态

使用 SQL Server Update Center

  • 定期检查 Microsoft SQL Server Update Center
  • 下载最新的安全补丁和累积更新
  • 部署补丁到生产环境

定期安全扫描

使用 Microsoft Baseline Security Analyzer (MBSA)

  • 下载并安装 MBSA
  • 运行 MBSA 扫描 SQL Server 实例
  • 分析扫描结果,修复安全漏洞

使用 SQL Server 漏洞评估

  1. 在 SSMS 中右键点击数据库,选择 "任务" → "漏洞评估" → "扫描漏洞"
  2. 查看扫描结果
  3. 修复检测到的漏洞
  4. 定期重新扫描

数据安全最佳实践

多层防护

  • 实施深度防御策略,包括:
    • 网络层安全(防火墙、VPN)
    • 数据库层安全(加密、访问控制)
    • 应用层安全(输入验证、参数化查询)
    • 物理层安全(访问控制、监控)

定期评估

  • 定期进行安全评估和渗透测试
  • 审查安全配置和访问控制
  • 监控和分析安全事件
  • 及时响应安全漏洞

员工培训

  • 提供数据安全培训,包括:
    • 识别敏感数据
    • 安全处理数据
    • 报告安全事件
    • 遵守合规要求

事件响应计划

  • 制定数据安全事件响应计划,包括:
    • 事件检测和报告
    • 事件调查和分析
    • 事件响应和恢复
    • 事件报告和沟通
    • 事后分析和改进

版本差异

SQL Server 2008/2008 R2

  • 支持透明数据加密 (TDE),但功能有限
  • 支持基本的列级加密
  • 不支持 Always Encrypted
  • 不支持数据发现和分类
  • 审计功能有限

SQL Server 2012

  • 增强了 TDE 功能
  • 增强了审计功能
  • 引入了列存储索引加密
  • 不支持 Always Encrypted
  • 不支持数据发现和分类

SQL Server 2014

  • 改进了 TDE 性能
  • 增强了审计功能
  • 引入了内存优化表加密
  • 不支持 Always Encrypted
  • 不支持数据发现和分类

SQL Server 2016

  • 引入 Always Encrypted
  • 引入动态数据掩码
  • 引入行级安全性
  • 增强了 TDE 功能
  • 引入了数据发现和分类
  • 增强了审计功能

SQL Server 2017

  • 增强了 Always Encrypted 功能
  • 引入了 Linux 平台支持
  • 增强了动态数据掩码功能
  • 增强了数据发现和分类功能
  • 引入了图形数据库加密

SQL Server 2019

  • 引入 Always Encrypted with Secure Enclaves
  • 增强了动态数据掩码功能
  • 引入了大数据群集安全功能
  • 增强了数据发现和分类功能
  • 引入了 Ledger 功能(预览)

SQL Server 2022

  • 增强了 Ledger 功能,提供不可篡改的交易记录
  • 增强了 Always Encrypted with Secure Enclaves
  • 增强了数据发现和分类功能
  • 引入了 Azure Synapse Link 安全功能
  • 增强了 Microsoft Purview 集成
  • 引入了机器学习服务安全增强

常见问题 (FAQ)

什么是透明数据加密 (TDE)?

透明数据加密 (TDE) 是 SQL Server 提供的一种加密技术,用于加密数据库文件(数据文件和日志文件)。TDE 对应用程序透明,无需修改应用代码,它在数据库引擎层自动处理加密和解密。TDE 主要用于保护静态数据,防止物理文件被盗取。

如何加密 SQL Server 数据库备份?

加密 SQL Server 数据库备份的步骤:1) 创建备份证书;2) 备份证书和私钥;3) 使用该证书执行加密备份,指定加密算法(如 AES-256);4) 验证备份是否已加密。加密备份可以防止未授权恢复,保护备份数据的安全性。

如何保护敏感数据?

保护敏感数据的方法:1) 加密敏感数据,使用 TDE 或列级加密;2) 实施访问控制,使用最小权限原则;3) 对敏感数据进行分类和标记;4) 使用数据脱敏(动态数据掩码);5) 监控和审计敏感数据访问;6) 定期进行安全评估和漏洞扫描。

如何实现密钥轮换?

实现密钥轮换的步骤:1) 生成新密钥;2) 使用旧密钥解密数据,然后用新密钥加密;3) 更新加密密钥依赖关系;4) 安全存储旧密钥;5) 删除旧密钥。密钥轮换应定期进行,减少密钥泄露的风险,确保数据安全。

如何满足合规要求?

满足合规要求的方法:1) 识别和分类敏感数据;2) 实施适当的加密和访问控制;3) 启用审计和监控;4) 定期进行安全评估和漏洞扫描;5) 制定事件响应计划;6) 生成合规报告;7) 提供员工培训。不同的合规标准可能有特定要求,需要根据具体标准进行调整。

Always Encrypted 和列级加密有什么区别?

Always Encrypted 是 SQL Server 2016 引入的功能,提供应用程序层加密,加密和解密在客户端应用程序中执行,数据库引擎无法访问明文数据。列级加密是数据库级别的加密,加密和解密在数据库引擎中执行,数据库管理员可以访问明文数据。Always Encrypted 提供更高的安全性,但可能影响性能。

如何检测 SQL Server 中的敏感数据?

检测 SQL Server 中敏感数据的方法:1) 使用 SQL Server 数据发现和分类功能自动识别敏感数据;2) 使用 T-SQL 查询搜索包含敏感数据的列(如信用卡号、社会安全号);3) 手动审查数据库架构和数据;4) 使用第三方数据发现工具。

如何配置动态数据掩码?

配置动态数据掩码的步骤:1) 识别需要掩码的敏感列;2) 选择适当的掩码函数(如 email()、partial()、default());3) 使用 ALTER TABLE 语句为列添加掩码;4) 测试掩码效果,使用不同权限的用户查询数据。动态数据掩码可以根据用户权限动态显示或隐藏敏感数据。

如何备份和恢复 SQL Server 密钥?

备份和恢复 SQL Server 密钥的步骤:1) 备份服务主密钥 (SMK) 到安全位置;2) 备份数据库主密钥 (DMK) 到安全位置;3) 备份证书和私钥到安全位置;4) 当需要恢复时,使用相应的 RESTORE 命令从备份中恢复密钥。密钥备份应存储在安全的位置,防止未授权访问。

如何监控 SQL Server 数据访问?

监控 SQL Server 数据访问的方法:1) 启用 SQL Server 审计,记录数据访问活动;2) 配置扩展事件,跟踪敏感数据访问;3) 使用 SQL Server Profiler 捕获数据访问事件;4) 配置 Azure SQL 高级威胁防护(对于 Azure SQL 数据库);5) 定期审查审计日志和事件数据。监控数据访问可以帮助检测和响应数据安全事件。