Отредактировано 2 Несколько недель назад от ExtremeHow Редакционная команда
Microsoft SQL ServerБезопасностьКонфигурацияБаза данныхWindowsЛинуксИТУправление пользователямиАутентификацияСервер
Перевод обновлен 2 Несколько недель назад
Microsoft SQL Server — это популярная система управления базами данных, которая позволяет хранить, извлекать и обрабатывать данные. Однако, как и в любой системе, которая управляет конфиденциальными данными, безопасность имеет чрезвычайно важное значение. Цель настройки безопасности — защитить данные от несанкционированного доступа и гарантировать, что только правильные люди имеют полномочия управлять данными. Эта статья предоставляет комплексное руководство по настройке безопасности в Microsoft SQL Server.
Модель безопасности в SQL Server основана на комбинации учетных записей входа, пользователей и ролей. Эти элементы работают в сочетании, чтобы обеспечить доступ к базе данных только уполномоченным пользователям и выполнение определенных операций. Давайте подробнее рассмотрим каждый из этих элементов.
Вход — это учетная запись, используемая для подключения к экземпляру SQL Server. SQL Server поддерживает несколько типов входов, включая аутентификацию SQL Server и аутентификацию Windows. Аутентификация Windows обычно предпочтительнее, так как она интегрируется с моделью безопасности Windows и считается более безопасной.
Чтобы создать новый вход, выполните следующие шаги:
use master; CREATE LOGIN [TestLogin] WITH PASSWORD='YourStrongPassword123';
В этом примере создается новый аутентифицированный вход SQL Server с именем TestLogin. Всегда используйте надежный пароль для вашего входа.
После создания входа для экземпляра вы можете создать пользователя в каждой конкретной базе данных, к которой этот вход может получить доступ. Пользователь в базе данных связан с входом, и эта ассоциация позволяет пользователю пройти аутентификацию при доступе к базе данных.
Чтобы создать пользователя базы данных для ранее созданного входа, используйте следующую команду:
use your database; CREATE USER [TestUser] FOR LOGIN [TestLogin];
Эта команда создает пользователя, связанного с входом TestLogin, в указанной базе данных (YourDatabase).
Роли — это набор разрешений, которые можно назначать пользователю или группе пользователей. Они предоставляют простой способ управления разрешениями, группируя их в роли и затем назначая пользователей этим ролям.
SQL Server предоставляет фиксированные серверные роли и фиксированные роли базы данных. Фиксированные серверные роли применяются ко всему экземпляру SQL Server, тогда как фиксированные роли базы данных применяются только к конкретной базе данных.
Вот как можно добавить пользователя в определенную роль базы данных:
use your database; EXECUTE sp_addrolemember 'db_datareader', 'TestUser';
Эта команда добавляет TestUser в роль db_datareader, предоставляя пользователю разрешение на чтение всех данных в указанной базе данных.
Разрешения — это права на выполнение определенных действий с ресурсами SQL Server, такими как таблицы, представления или хранимые процедуры. SQL Server предоставляет широкий набор разрешений, и вы можете предоставить или отказать в разрешениях учетным записям входа или пользователям в зависимости от их потребностей в безопасности.
Предположим, вы хотите разрешить пользователю вставлять данные в определенную таблицу. Вы можете выполнить следующую команду:
use your database; GRANT INSERT ON [YourTable] TO TestUser;
Эта команда позволяет TestUser вставлять данные в указанную таблицу (YourTable) в YourDatabase.
SQL Server предоставляет возможности шифрования для защиты конфиденциальных данных, хранимых, передаваемых или обмененных между экземплярами SQL Server и приложениями. Это включает поддержку прозрачного шифрования данных (TDE) и функции «всегда зашифровано».
TDE помогает обеспечить безопасность данных, так как шифрует их, что означает, что физические файлы на диске также зашифрованы. Однако данные по-прежнему отображаются как текстовые для приложений, подключающихся к базе данных.
Чтобы реализовать TDE в базе данных, выполните следующие шаги:
use master; Create master key encryption by password = 'YourStrongPassword123'; CREATE CERTIFICATE EncryptCert WITH SUBJECT = 'Database Encryption Certificate'; use your database; Create database encryption key with algorithm = AES_256 Encryption by server certificate EncryptCert; ALTER DATABASE YourDatabase SET ENCRYPTION ON;
Эта серия команд настраивает шифрование базы данных для YourDatabase с использованием сертификата.
Функция "всегда зашифровано" предназначена для защиты конфиденциальных данных в базе данных SQL Server. Только клиентские приложения, обладающие ключами шифрования, могут получить доступ к незашифрованным данным. Шифрование происходит на уровне клиента, поэтому SQL Server никогда не видит незашифрованные значения.
Настройка функции "всегда зашифровано" требует использования главного ключа столбца и ключа шифрования столбца. Главный ключ столбца хранится вне SQL Server, а ключ шифрования столбца хранится в SQL Server и используется для шифрования конфиденциальных столбцов.
Чаще всего для настройки этой функции требуется конфигурация ключей шифрования и использование SQL Server Management Studio (SSMS) или сценария PowerShell для изменения столбцов таблицы на использование шифрования.
Аудит в SQL Server — это неотъемлемая часть безопасности, поскольку он помогает отслеживать и логгировать события, происходящие в системе. Вы можете аудировать события на уровне сервера или базы данных, и SQL Server предоставляет встроенные объекты аудита для облегчения этих действий.
Вот простой пример создания аудита и связывания его с объектом на уровне сервера:
Create a server audit ServerAudit in file(filepath = 'C:\AuditFiles\'); Change server audit ServerAudit with (status = on); Create a server audit specification ServerAuditSpec ServerAudit for server audits add(failed_login_group); Change server audit specification ServerAuditSpec with (status = on);
Этот скрипт создает аудит, который логгирует неудачные попытки входа и выводит лог в указанное место файла.
SQL Server поддерживает несколько политик безопасности, которые помогают автоматизировать и управлять практиками безопасности. Среди них можно выделить политики безопасности на уровне строк (RLS) и динамическое маскирование данных (DDM).
RLS позволяет реализовать детализированный контроль доступа к строкам в таблице. Это гарантирует, что пользователи имеют доступ только к строкам, на которые они обладают разрешением.
Вы можете создать RLS, определив предикатные функции и политики безопасности. Предикатная функция определяет логику, используемую для фильтрации строк.
CREATE FUNCTION dbo.fn_securitypredicate (@UserName AS sysname) Returns Table With SchemaBinding As select return 1 as result where @username = USER_NAME(); Create a security policy SecurityPolicy ADD FILTER PREDICATE dbo.fn_securitypredicate(username) on your table with (status = on);
Этот пример фильтрует доступ к YourTable на основе имени пользователя.
DDM — это встроенная функция в SQL Server, которая способствует процессу скрытия конфиденциальных данных при отображении данных неавторизованным пользователям. Данные хранятся полностью, но скрываются или анонимизируются при извлечении.
Вот пример настройки DDM на таблице:
ALTER TABLE YourTable ALTER COLUMN SensitiveColumn ADD MASKED WITH (FUNCTION = 'partial(2,"*",0)');
Это маскирует SensitiveColumn, используя частичную функцию маскирования, оставляя первые две буквы отображаемыми, а остальные буквы замаскированными.
Настройка безопасности в Microsoft SQL Server включает в себя несколько шагов, начиная с настройки входов, пользователей и ролей, и заканчивая реализацией стратегий шифрования, аудита и политики безопасности. Понимание различных инструментов и стратегий в вашем распоряжении позволит создать мощную архитектуру безопасности для вашего экземпляра SQL Server. Регулярные проверки и обновления вашей конфигурации обеспечат, что ваша безопасность SQL Server будет успевать за новыми угрозами.
Если вы найдете что-то неправильное в содержании статьи, вы можете