如何避免MSSQL被暴力破解

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 加密、服务器绑定和证书检查可以确保数据在网络上传输时不被窃取。

数据库标签