1. 强密码策略
首先,为了避免MSSQL被暴力破解,我们需要强制实行强密码策略。强密码策略可以强制用户创建复杂、难以猜测的密码,从而增加密码被破解的难度。
强密码策略包括以下要点:
1.1 密码长度
密码长度应大于等于 8 位数,最好不少于 14 位数。密码中最好包含大小写字母、数字和特殊字符。同时,不应使用容易被猜测的密码,例如生日、电话号码等个人信息。
ALTER LOGIN [username] WITH PASSWORD=N'NewPassword1!'
1.2 密码过期原则
密码应定期过期,例如每个月或每季度重置密码。此外,不能连续使用过去几次密码,以防止密码被重复使用。
ALTER LOGIN [username] WITH PASSWORD=N'NewPassword1!'
GO
ALTER LOGIN [username] WITH PASSWORD=N'NewPassword2!'
GO
ALTER LOGIN [username] WITH PASSWORD=N'NewPassword3!'
1.3 密码策略强制
为了保证密码策略的有效性,可以在 SQL Server 上强制实行密码策略。可以在 SQL Server Management Studio 中打开“Security”,选择 “Logins”,右键单击要进行配置的登录名,选择“Properties”,选择“General”,勾选“Enforce password policy”。
2. 限制登录尝试
通过限制登录尝试次数和时间间隔来防止暴力破解。为此,可以采用以下方法:
2.1 登录锁定
登录锁定是一种安全功能,当用户尝试若干次未成功登录 SQL Server 后,登录锁定可以防止用户再次尝试登录 SQL Server。
2.2 错误日志
可以配置 SQL Server 错误日志,以跟踪和监控来自存储过程、触发器和用户定义函数的错误。可以在 SQL Server Management Studio 中选择“Management” →“SQL Server Logs”,以查看错误日志。
USE [tempdb]
GO
CREATE TABLE dbo.logins_failed
(
login_name sysname NOT NULL,
login_time datetime NOT NULL DEFAULT getdate()
)
GO
CREATE PROCEDURE dbo.usp_LogFailedLogin
@login_name sysname
AS
BEGIN
INSERT dbo.logins_failed(login_name) VALUES(@login_name)
END
GO
CREATE TRIGGER tr_LogFailedLogins
ON ALL SERVER WITH EXECUTE AS 'dbo.usp_LogFailedLogin'
FOR LOGON -- 、LOGOFF 等;
AS
BEGIN
DECLARE @host_name nvarchar(128),
@login_name sysname
SELECT @host_name = HOST_NAME(),
@login_name = ORIGINAL_LOGIN()
-- 是否在 syslogins(本服务器上的凭据)
-- 中找到用户名,如果映射到数据库级别,则返回 NULL
IF @login_name IS NULL
SET @login_name = CAST(eventdata() AS xml).value('(/EVENT_INSTANCE/LoginName)[1]',
'sysname')
IF @login_name IS NOT NULL
BEGIN
EXEC tempdb.dbo.usp_LogFailedLogin @login_name
END
END
GO
ENABLE TRIGGER tr_LogFailedLogins ON ALL SERVER
SELECT TOP 5
login_name,
COUNT(*) AS failure_count,
MAX(login_time) AS last_failure_time
FROM dbo.logins_failed
GROUP BY
login_name
HAVING COUNT(*) > 2 AND MAX(login_time) > DATEADD(N, -30, GETDATE())
ORDER BY last_failure_time DESC
3. 加密通信
加密通信可以确保在网络上传输的数据不被窃取。以下是一些可以用于加密通信的策略:
3.1 SSL 加密
SSL 是一种安全协议,建立在通信端口上的安全套接字层(Secure Sockets Layer)。可以使用 SSL 加密通信,以确保数据在网络上传输时不被窃取。
3.2 绑定数据库服务器
可以通过设置服务器绑定规则和访问协议来绑定数据库服务器。可以在 SQL Server Management Studio 中选择“SQL Server Configuration Manager”,以设置服务器绑定规则和访问协议。
3.3 检查证书
可以检查服务器证书是否有效,并确认证书中的所有信息是否正确。可以在 SQL Server Management Studio 中选择“Security”→“Certificates”以查看证书信息。
SELECT * FROM sys.certificates
结论
通过强密码策略、限制登录尝试和加密通信,可以确保 SQL Server 数据库不被暴力破解。强密码策略可以确保用户使用难以猜测的密码;登录锁定、错误日志可以跟踪和监控登录尝试和错误;SSL 加密、服务器绑定和证书检查可以确保数据在网络上传输时不被窃取。