В сегодняшней статье мы рассмотрим, как вы можете внедрить белый список для ваших SQL-серверов внутри предприятия для управления доступом и повышения безопасности. Белый список – это список одобренных сущностей, которым предоставляются особые привилегии, в данном случае, доступ к SQL-серверу.
Зачем вам нужен белый список для вашего SQL-сервера? Рассмотрим ситуацию, когда у вас есть политика компании, которая запрещает использование общего логина для подключения к SQL-серверу. Однако ваше приложение использует один SQL-логин, и каждый разработчик в компании знает пароль. Несмотря на наличие письменной политики, существует риск того, что один из разработчиков может подключиться к SQL-серверу для исправления ошибки или даже манипулирования данными, чтобы обойти логику приложения.
Для решения этой проблемы мы можем создать белый список, который определяет, какие логины разрешены для подключения к SQL-серверу с определенных IP-адресов. Таким образом, мы можем ограничить доступ только для авторизованных сущностей.
Давайте рассмотрим пример, как внедрить белый список для ваших SQL-серверов внутри предприятия:
USE master;
GO
IF OBJECT_ID('dbo.WhiteList') IS NOT NULL
DROP TABLE dbo.WhiteList;
GO
CREATE TABLE dbo.WhiteList (
Id INT IDENTITY(1,1) PRIMARY KEY,
LoginName VARCHAR(255),
HostName VARCHAR(255),
HostIpAddress VARCHAR(15)
);
GO
INSERT dbo.WhiteList(LoginName, HostName, HostIpAddress)
SELECT 'WebSiteLogin', 'webserver1', '192.168.100.55';
GO
CREATE TRIGGER WhiteListTrigger ON ALL SERVER FOR LOGON AS
BEGIN
DECLARE @LoginName VARCHAR(255) = ORIGINAL_LOGIN(),
@HostName VARCHAR(255) = HOST_NAME(),
@HostIpAddress VARCHAR(15);
SELECT @HostIpAddress = client_net_address
FROM sys.dm_exec_connections
WHERE session_id = @@SPID;
IF (
SELECT COUNT(*)
FROM dbo.WhiteList
WHERE (
(LoginName = @LoginName)
OR (LoginName = '*')
)
AND (
(HostName = @HostName)
OR (HostName = '*')
)
AND (
(HostIpAddress = @HostIpAddress)
OR (HostIpAddress = '*')
)
) = 0
ROLLBACK;
END;
GO
В приведенном выше коде мы сначала создаем таблицу с названием “WhiteList”, чтобы хранить одобренные логины, имена хостов и IP-адреса. Затем мы вставляем запись в таблицу, чтобы разрешить доступ для определенного логина с определенного хоста и IP-адреса.
Триггер на вход, “WhiteListTrigger”, сравнивает имя входа пользователя, имя хоста и IP-адрес с записями в таблице “WhiteList”. Если есть совпадение, доступ разрешен. В противном случае соединение прерывается с помощью отката.
Чтобы протестировать эту реализацию, вы можете попытаться войти, используя “WebSiteLogin” с IP-адресом, отличным от разрешенного (192.168.100.55). Вы сразу получите сообщение об ошибке входа, указывающее, что доступ запрещен.
Кроме того, код позволяет использовать символ астериска (*) для ввода шаблонов. Это означает, что любой логин с любого IP-адреса может подключиться, если указано имя хоста, или разрешено подключение с логином sa с любого хоста или IP-адреса.
В случае, если вы случайно заблокировали себя или всех пользователей SQL-сервера, есть быстрый способ восстановить доступ. Вы можете подключиться к SQL-серверу с помощью выделенного административного подключения, либо через Management Studio, либо через командную строку SQLCMD, используя логин с разрешением SysAdmin. После подключения вы можете отключить триггер входа, чтобы восстановить доступ.
Внедрение белого списка для SQL-серверов внутри предприятия с использованием триггера входа обеспечивает дополнительный уровень безопасности, контролируя доступ на основе одобренных логинов, имен хостов и IP-адресов. Это позволяет вам соблюдать политику безопасности вашей компании и снизить риск несанкционированного доступа.
Для получения дополнительной информации о триггерах входа вы можете обратиться к официальной документации.