Создание нового пользователя в MS SQL пошаговое руководство

Как создать пользователя ms sql

Как создать пользователя ms sql

В MS SQL управление пользователями осуществляется через сочетание логинов на уровне сервера и пользователей базы данных. Каждый новый пользователь должен быть привязан к существующему логину или создан вместе с ним. Для обеспечения безопасности рекомендуется назначать уникальные логины с сильными паролями длиной не менее 12 символов, включающими буквы верхнего и нижнего регистра, цифры и специальные символы.

Процесс создания пользователя начинается с выбора подходящей базы данных и проверки существующих логинов через системные представления sys.server_principals и sys.database_principals. После этого создается логин с помощью команды CREATE LOGIN, где указываются имя пользователя и способ аутентификации – SQL Server или Windows. Следующий шаг – создание пользователя в конкретной базе данных через CREATE USER, связанного с ранее созданным логином.

Для ограничения прав нового пользователя следует заранее определить его роль: db_datareader для чтения данных, db_datawriter для записи, или настраиваемые роли с конкретными привилегиями. Рекомендуется проверять результат создания пользователя с помощью SELECT * FROM sys.database_principals, чтобы убедиться, что учетная запись корректно зарегистрирована и имеет нужные разрешения.

Использование скриптов для создания пользователей позволяет автоматизировать процесс и минимизировать ошибки. В больших проектах стоит поддерживать шаблоны команд CREATE LOGIN и CREATE USER с заранее определенными ролями и ограничениями, что ускоряет добавление новых сотрудников и повышает безопасность базы данных.

Создание нового пользователя в MS SQL: пошаговое руководство

Откройте SQL Server Management Studio (SSMS) и подключитесь к необходимому экземпляру SQL Server. Убедитесь, что у вас есть права администратора или права на создание пользователей.

В разделе «Security» разверните «Logins». Кликните правой кнопкой мыши на «Logins» и выберите «New Login…».

В окне создания нового логина введите уникальное имя пользователя. Для аутентификации выберите тип: «SQL Server authentication» для логина с отдельным паролем или «Windows authentication» для интеграции с учетной записью Windows.

Если выбран SQL Server authentication, задайте надежный пароль, который соответствует политике безопасности сервера. Снимите галочку «User must change password at next login», если необходимо сразу использовать учетную запись.

Перейдите в раздел «Server Roles» и отметьте роли, которые должен иметь пользователь. Для базовой работы достаточно «public», административные права назначаются по необходимости, например, «dbcreator» или «securityadmin».

В разделе «User Mapping» отметьте базы данных, к которым пользователь получит доступ. Для каждой базы данных укажите соответствующую роль: «db_owner», «db_datareader», «db_datawriter» или кастомные роли.

Дополнительно можно задать схемы по умолчанию для пользователя в каждой базе данных и настроить ограничения на доступ к объектам через Security -> Securables.

После заполнения всех параметров нажмите «OK» для создания пользователя. Проверьте подключение с новой учетной записью, чтобы убедиться, что доступ и права назначены корректно.

Для автоматизации через T-SQL используйте команду CREATE LOGIN [ИмяПользователя] WITH PASSWORD = 'Пароль'; и CREATE USER [ИмяПользователя] FOR LOGIN [ИмяПользователя];. Дополнительно назначьте роли через ALTER ROLE [Роль] ADD MEMBER [ИмяПользователя];.

Проверка текущих пользователей и ролей в базе данных

Для точного управления доступом необходимо сначала проверить существующих пользователей и назначенные им роли. MS SQL предоставляет системные представления и команды для этой задачи.

1. Просмотр всех пользователей базы данных:

SELECT name, type_desc, create_date, modify_date
FROM sys.database_principals
WHERE type IN ('S', 'U', 'G')
ORDER BY name;

Здесь:

  • S – SQL-пользователь;
  • U – Windows-пользователь;
  • G – группа Windows.

2. Определение ролей и их членов:

SELECT dp.name AS UserName, dr.name AS RoleName
FROM sys.database_principals dp
JOIN sys.database_role_members drm ON dp.principal_id = drm.member_principal_id
JOIN sys.database_principals dr ON drm.role_principal_id = dr.principal_id
ORDER BY RoleName, UserName;

Эта команда показывает каждого пользователя и роли, в которых он состоит, что позволяет выявить избыточные права.

3. Просмотр встроенных ролей базы данных:

SELECT name, type_desc, is_fixed_role
FROM sys.database_principals
WHERE type = 'R' AND is_fixed_role = 1;

Результат включает роли, такие как db_owner, db_datareader и db_datawriter, которые нельзя удалить, но можно контролировать через назначение пользователей.

4. Проверка прав конкретного пользователя:

EXEC sp_helprotect @username = 'ИмяПользователя';

5. Рекомендации по проверке:

  • Регулярно сверяйте назначенные роли и права с требованиями безопасности проекта.
  • Удаляйте пользователей или роли, неактивные более 90 дней.
  • Для аудита создайте отдельный скрипт, который еженедельно сохраняет список пользователей и их ролей.

Назначение базы данных по умолчанию для нового пользователя

Назначение базы данных по умолчанию для нового пользователя

После создания нового пользователя в MS SQL важно определить базу данных по умолчанию, чтобы все соединения без явного указания базы использовали корректное хранилище данных.

Для назначения базы по умолчанию применяется команда ALTER LOGIN с параметром DEFAULT_DATABASE. Пример:

ALTER LOGIN [ИмяПользователя] WITH DEFAULT_DATABASE = [ИмяБазы];

Имя базы указывается точно так же, как оно зарегистрировано в сервере. Если база не существует или пользователь не имеет к ней доступа, соединение завершится ошибкой.

Рекомендуется назначать базу по умолчанию, которая соответствует основной области работы пользователя. Для пользователей, работающих с несколькими базами, выбирайте наиболее часто используемую. Избегайте системных баз master, model или msdb в качестве значения по умолчанию, если пользователь не выполняет административные задачи.

Проверить текущую базу по умолчанию можно с помощью запроса:

SELECT default_database_name FROM sys.server_principals WHERE name = 'ИмяПользователя';

Для изменения базы по умолчанию достаточно повторно выполнить ALTER LOGIN с новой базой. Это действие не влияет на права доступа, только на стартовую базу при подключении.

Назначение корректной базы по умолчанию повышает удобство работы, предотвращает ошибки выполнения запросов и минимизирует необходимость явного указания базы при каждом соединении.

Выбор схемы для нового пользователя и её настройка

Рекомендуется придерживаться следующих шагов при выборе и настройке схемы:

  1. Определение назначения пользователя:
    • Для работы с данными конкретного приложения создайте отдельную схему, чтобы ограничить доступ к системным объектам.
    • Если пользователь требуется для администрирования, можно использовать существующую схему dbo, но с осторожностью, чтобы не нарушить изоляцию данных.
  2. Создание новой схемы:
    • Используйте команду CREATE SCHEMA [ИмяСхемы] AUTHORIZATION [ИмяПользователя].
    • Названия схем должны быть информативными: например, SalesApp, HRData.
    • Привяжите схему к пользователю для автоматического назначения владельца объектов.
  3. Настройка прав доступа:
    • Используйте GRANT для предоставления необходимых прав на схемы и объекты: GRANT SELECT, INSERT, UPDATE ON SCHEMA::[ИмяСхемы] TO [ИмяПользователя].
    • Избегайте предоставления прав CONTROL или ALTER без реальной необходимости.
    • Регулярно проверяйте права с помощью sys.database_permissions.
  4. Определение схемы по умолчанию:
    • Назначьте пользователю схему по умолчанию через ALTER USER [ИмяПользователя] WITH DEFAULT_SCHEMA = [ИмяСхемы].
    • Схема по умолчанию гарантирует, что создаваемые объекты автоматически попадут в назначенную схему.
  5. Проверка и тестирование:
    • После создания схемы и назначения прав выполните тестовое подключение под новым пользователем.
    • Создайте таблицу и представление, убедитесь, что объекты появляются в нужной схеме и доступны согласно назначенным правам.

Следование этим рекомендациям минимизирует риск случайного предоставления лишних прав и обеспечивает прозрачное управление объектами базы данных для нового пользователя.

Назначение прав на таблицы и представления

Для предоставления пользователю доступа к таблицам и представлениям используется команда GRANT. Пример для таблицы Employees:

GRANT SELECT, INSERT, UPDATE ON Employees TO NewUser;

Эта команда позволяет пользователю выполнять чтение, добавление и изменение данных в таблице. Для ограничения изменений только определёнными колонками применяют синтаксис:

GRANT UPDATE (Salary, Position) ON Employees TO NewUser;

Для представлений права назначаются аналогично таблицам, при этом пользователь может иметь доступ к виртуальному набору данных без возможности изменения базовых таблиц, если представление не допускает INSTEAD OF триггеры.

Удаление прав выполняется командой REVOKE:

REVOKE INSERT ON Employees FROM NewUser;

Для комплексного управления рекомендуется использовать схемы и роли. Создайте роль:

CREATE ROLE DataEditors;

Назначьте роли необходимые права:

GRANT SELECT, UPDATE ON Employees TO DataEditors;

Добавьте пользователя в роль:

ALTER ROLE DataEditors ADD MEMBER NewUser;

Использование ролей упрощает поддержку и изменение прав для групп пользователей и предотвращает прямое изменение прав на каждом объекте вручную.

Настройка прав на выполнение хранимых процедур и функций

Настройка прав на выполнение хранимых процедур и функций

Для предоставления пользователю права на выполнение конкретной хранимой процедуры используйте команду GRANT EXECUTE. Пример для процедуры dbo.UpdateCustomer:

GRANT EXECUTE ON dbo.UpdateCustomer TO [НовыйПользователь];

Если необходимо разрешить выполнение всех процедур и функций в схеме, применяют схему вместо отдельного объекта:

GRANT EXECUTE ON SCHEMA::dbo TO [НовыйПользователь];

Проверка предоставленных прав выполняется через системную представление sys.database_permissions или функцию HAS_PERMS_BY_NAME. Пример проверки для конкретной процедуры:

SELECT HAS_PERMS_BY_NAME('dbo.UpdateCustomer', 'OBJECT', 'EXECUTE');

При настройке прав учитывайте наследование: пользователь, входящий в роль с правом EXECUTE, автоматически получает возможность вызова процедур, указанных для этой роли. Для удаления права применяется REVOKE EXECUTE ON [Объект] FROM [Пользователь].

Для функций применяются те же команды GRANT EXECUTE и REVOKE EXECUTE. Для функций с возвращаемыми значениями важно предоставить права только на вызов, без дополнительных разрешений на изменение данных, если функция только читает информацию.

Рекомендуется документировать все предоставленные права и проверять, что пользователь имеет доступ только к необходимым процедурам и функциям, избегая предоставления прав на выполнение всей схемы без необходимости.

Проверка подключения нового пользователя к базе данных

Проверка подключения нового пользователя выполняется через SSMS или sqlcmd для подтверждения корректных прав и доступа к конкретной базе данных.

Метод Действие Пример команды/действия
SSMS Подключение к серверу с новым логином В «Подключение к серверу» указать имя сервера, логин и пароль нового пользователя
SSMS Выбор целевой базы данных В списке «База данных» выбрать базу, назначенную пользователю
SSMS Выполнение тестового запроса SELECT TOP 5 * FROM dbo.ИмяТаблицы;
sqlcmd Подключение через командную строку sqlcmd -S ИмяСервера -d ИмяБазы -U НовыйПользователь -P Пароль
sqlcmd Проверка прав пользователя SELECT dp.name AS UserName, perm.permission_name AS Permission, perm.state_desc AS State FROM sys.database_principals dp LEFT JOIN sys.database_permissions perm ON dp.principal_id = perm.grantee_principal_id WHERE dp.name = ‘НовыйПользователь’;

Отслеживание и изменение прав пользователя после создания

Для просмотра текущих прав пользователя используйте системные представления. Например, sys.database_permissions показывает разрешения на уровне базы данных, а sys.server_permissions – на уровне сервера:

Пример запроса для базы данных:

SELECT dp.name AS Пользователь, dp.type_desc, p.permission_name, p.state_desc
FROM sys.database_principals dp
JOIN sys.database_permissions p ON dp.principal_id = p.grantee_principal_id
WHERE dp.name = 'ИмяПользователя';

Для изменения прав используйте команды GRANT, DENY и REVOKE. GRANT предоставляет разрешение, DENY запрещает, а REVOKE удаляет ранее назначенное право.

Пример предоставления права на SELECT:

GRANT SELECT ON dbo.ИмяТаблицы TO [ИмяПользователя];

Пример запрета DELETE:

DENY DELETE ON dbo.ИмяТаблицы TO [ИмяПользователя];

Пример удаления права UPDATE:

REVOKE UPDATE ON dbo.ИмяТаблицы FROM [ИмяПользователя];

Для контроля членства пользователя в ролях используйте sp_helpuser или sys.database_role_members. Членство в ролях обеспечивает пакетное управление правами:

SELECT r.name AS Роль, u.name AS Пользователь
FROM sys.database_role_members rm
JOIN sys.database_principals r ON rm.role_principal_id = r.principal_id
JOIN sys.database_principals u ON rm.member_principal_id = u.principal_id
WHERE u.name = 'ИмяПользователя';

Для изменения членства применяйте ALTER ROLE:

Добавление пользователя в роль:

ALTER ROLE [ИмяРоли] ADD MEMBER [ИмяПользователя];

Удаление пользователя из роли:

ALTER ROLE [ИмяРоли] DROP MEMBER [ИмяПользователя];

Регулярно проверяйте права пользователей и роли, особенно после обновлений схемы или изменений бизнес-процессов, чтобы предотвратить лишние доступы и соблюдать принцип минимальных привилегий.

Вопрос-ответ:

Как создать нового пользователя в MS SQL через SQL Server Management Studio?

Для создания нового пользователя в SQL Server Management Studio необходимо подключиться к нужной базе данных, открыть раздел «Безопасность» и выбрать «Пользователи». Нажмите правой кнопкой мыши и выберите «Создать пользователя». В открывшейся форме укажите имя пользователя, тип аутентификации (Windows или SQL Server), пароль, а также роль или права доступа, которые необходимо назначить. После заполнения всех полей подтвердите создание пользователя кнопкой «ОК». Новый пользователь появится в списке и сможет выполнять действия согласно назначенным правам.

В чем разница между логином и пользователем в MS SQL?

Логин в SQL Server – это учетная запись на уровне сервера, которая позволяет подключаться к SQL Server. Пользователь же создается внутри конкретной базы данных и связывается с логином. Другими словами, логин управляет доступом к серверу в целом, а пользователь управляет правами внутри базы данных. Без логина пользователь не сможет подключиться к базе, а логин без пользователя не сможет работать с конкретной базой данных.

Можно ли задать конкретные права доступа новому пользователю без назначения роли?

Да, SQL Server позволяет назначать права напрямую пользователю без использования предопределенных ролей. Для этого при создании пользователя или после его создания нужно открыть свойства пользователя, перейти на вкладку «Членство в роли» или «Разрешения» и отметить конкретные действия, которые пользователь сможет выполнять, такие как SELECT, INSERT, UPDATE или EXECUTE. Такой подход удобен, если требуется предоставить ограниченные права, не соответствующие стандартным ролям базы данных.

Как проверить, что созданный пользователь может подключиться и выполнять действия?

Для проверки можно использовать подключение к базе данных под новым пользователем через SQL Server Management Studio или другую клиентскую программу. После подключения стоит выполнить несколько тестовых запросов: проверить SELECT из таблицы, добавить новую запись через INSERT, выполнить UPDATE или DELETE, если это разрешено. Если все действия проходят успешно, значит, права настроены корректно. Также можно просмотреть журнал безопасности сервера, чтобы убедиться, что нет ошибок при подключении.

Ссылка на основную публикацию