Создание имени входа
В этой статье описывается, как создать имя входа в SQL Server или База данных SQL Azure с помощью SQL Server Management Studio (SSMS) или Transact-SQL. Имя входа — это удостоверение пользователя или процесса, подключающегося к экземпляру SQL Server.
Идентификатор Microsoft Entra — это новое имя Azure Active Directory (Azure AD). В настоящее время мы обновляем документацию.
Общие сведения
Имя входа — это субъект безопасности, с помощью которого система безопасности может проверить подлинность лица или сущности. Пользователям требуется имя входа для подключения к SQL Server. Вы можете создать имя входа на основе субъекта Windows (например, пользователя домена или группы домена Windows) или создать имя входа, которое не основано на субъекте Windows (например, имени входа SQL Server).
Чтобы использовать проверку подлинности SQL Server, ядро СУБД должна использовать проверку подлинности в смешанном режиме. Дополнительные сведения см. в разделе Выбор режима проверки подлинности.
Sql Azure представила субъекты сервера Microsoft Entra (имена входа) для проверки подлинности в База данных SQL Azure, Управляемый экземпляр SQL Azure и Azure Synapse Analytics (только выделенные пулы SQL).
Как субъекты безопасности, разрешения могут быть предоставлены именам входов. Область имени входа — это все ядро СУБД. Чтобы подключиться к определенной базе данных в экземпляре SQL Server, необходимо сопоставить имя входа с пользователем базы данных. Разрешения внутри базы данных предоставляются и запрещаются для пользователя базы данных, а не имени входа. Разрешения, имеющие область всего экземпляра SQL Server (например, разрешение CREATE ENDPOINT), можно предоставить имени входа.
При подключении входа к SQL Server удостоверение проверяется в master базе данных. Используйте пользователей автономной базы данных для проверки подлинности SQL Server и База данных SQL подключений на уровне базы данных. При использовании пользователей автономной базы данных имя входа не требуется. Содержащаяся база данных — это база данных, изолированная от других баз данных и от экземпляра SQL Server или База данных SQL (и master базы данных), в которую размещается база данных. SQL Server поддерживает использование пользователей автономной базы данных для проверки подлинности Windows и SQL Server. При использовании База данных SQL объедините пользователей автономной базы данных с правилами брандмауэра уровня базы данных. Дополнительные сведения см. в статье Пользователи автономной базы данных — создание переносимой базы данных.
Разрешения
SQL Server требует разрешения ALTER ANY LOGIN или ALTER LOGIN на сервере или предопределенных ролей сервера ##MS_LoginManager## (SQL Server 2022 и более поздних версий).
База данных SQL требует членства в роли loginmanager или предопределенных роли сервера ##MS_LoginManager##.
Создание имени входа с помощью SSMS для SQL Server
- В обозревателе объектов раскройте папку экземпляра сервера, в котором необходимо создать имя входа.
- Правой кнопкой мыши щелкните папку Безопасность и выберите пункт Создать, а затем — Имя входа. .
- В диалоговом окне Имя входа — создание на странице Общие введите имя пользователя в поле Имя для входа. Кроме того, выберите «Поиск», чтобы открыть диалоговое окно «Выбрать пользователя или группу «. Если выбрать «Поиск. «:
- В разделе «Выбор этого типа объекта» выберите «Типы объектов», чтобы открыть диалоговое окно «Типы объектов» и выбрать любой или все из следующих элементов: встроенные субъекты безопасности, группы и пользователи. Встроенные субъекты безопасности и Пользователи выбираются по умолчанию. По завершении выберите ОК.
- В разделе «Из этого расположения» выберите «Расположения», чтобы открыть диалоговое окно «Расположения» и выбрать одно из доступных расположений сервера. По завершении выберите ОК.
- В диалоговом окне Введите имена объектов для выбора (примеры)введите пользователя или имя группы, которые необходимо найти. Дополнительные сведения см. в статье Диалоговое окно выбора пользователей, компьютеров или групп.
- Выберите «Дополнительно» для получения дополнительных параметров поиска. Дополнительные сведения см. в статье Выбор диалогового окна «Пользователи», «Компьютеры» или «Группы» — страница «Дополнительно».
- Нажмите ОК.
- В поле Пароль введите пароль для нового пользователя. Повторно введите пароль в поле Подтверждение пароля .
- Если изменяется существующий пароль, выберите пункт Указать старый парольи введите старый пароль в поле Старый пароль .
- Чтобы обеспечить использование паролей в соответствии с политиками паролей, выберите параметр Требовать использование политики паролей. Дополнительные сведения см. в разделе Политика паролей. Это значение по умолчанию при выборе параметра Проверка подлинности SQL Server .
- Чтобы обеспечить использование паролей в соответствии с политиками окончания срока действия паролей, выберите параметр Задать срок окончания действия пароля. Чтобы этот флажок был доступен, должен быть установлен параметрТребовать использование политики паролей . Это значение по умолчанию при выборе параметра Проверка подлинности SQL Server .
- Чтобы пользователь мог создать новый пароль при первом входе в систему, выберите пункт Пользователь должен сменить пароль при следующем входе. Чтобы этот флажок был доступен, необходимо установить параметрПринудительно применить срок окончания действия пароля . Это значение по умолчанию при выборе параметра Проверка подлинности SQL Server .
Дополнительные параметры
Диалоговое окно входа — новое диалоговое окно также предлагает параметры на четырех других страницах: роли сервера, сопоставление пользователей, защищаемые объекты и состояние.
Роли сервера
Эти роли сервера недоступны для База данных SQL. Для База данных SQL доступны фиксированные роли уровня сервера. Дополнительные сведения см. в разделе База данных SQL Azure роли сервера для управления разрешениями.
На странице Роли сервера перечислены все возможные роли, которые могут быть назначены с новым именем входа. Доступны следующие параметры:
Флажокbulkadmin
Элементы предопределенной роли сервера bulkadmin могут выполнять инструкцию BULK INSERT.Флажокdbcreator
Члены предопределенной роли сервера dbcreator могут создавать, изменять, удалять и восстанавливать любые базы данных.Флажокdiskadmin
Элементы предопределенной роли сервера diskadmin могут управлять дисковыми файлами.Флажокprocessadmin
Члены предопределенных ролей сервера processadmin могут завершать процессы, выполняемые в экземпляре ядро СУБД.ФлажокPublic
Все пользователи, группы и роли SQL Server по умолчанию принадлежат предопределенной роли сервера public .Флажокsecurityadmin
Элементы предопределенной роли сервера securityadmin управляют именами входа и их свойствами. Они могут предоставлять, запрещать и отменять разрешения на уровне сервера (инструкции GRANT, DENY и REVOKE). Они также могут предоставлять, запрещать и отменять разрешения на уровне базы данных (инструкции GRANT, DENY и REVOKE). Кроме того, они могут сбрасывать пароли для имен входа SQL Server.Флажокserveradmin
Элементы предопределенной роли сервера serveradmin могут изменять параметры конфигурации на уровне сервера, а также выключать сервер.Флажокsetupadmin
Элементы предопределенной роли сервера setupadmin могут добавлять и удалять связанные серверы, а также выполнять некоторые системные хранимые процедуры.Флажокsysadmin
Члены предопределенных ролей сервера sysadmin могут выполнять любые действия в ядро СУБД.Сопоставление пользователей
На странице Сопоставление пользователей приведен список всех возможных баз данных и ролей баз данных, которые могут применяться в момент входа. Выбранные базы данных определят членство в ролях, которые доступны для этого имени входа. На этой странице доступны следующие параметры.
Пользователи, сопоставленные с этим именем входа
Выберите базы данных, к которым может подключаться это имя входа. При выборе базы данных доступные для нее роли выводятся в области Членство в роли базы данных для:имя_базы_ данных .Map
Разрешает имени входа доступ к перечисленным ниже базам данных.База данных
Список баз данных, доступных на этом сервере.Пользователь
Укажите пользователя базы данных, сопоставляемого с этим именем входа. По умолчанию, у пользователя базы данных такое же имя, как и имя входа.Схема по умолчанию
Указывает схему по умолчанию для данного пользователя. При создании пользователя его схемой по умолчанию является dbo. Можно указать схему по умолчанию, которая еще не существует. Невозможно указать схему по умолчанию для пользователя, сопоставленного с группой Windows, сертификатом или асимметричным ключом.Учетная запись Guest, включенная для:database_name
Атрибут только для чтения, означающий, что учетная запись Guest включена в выбранной базе данных. Страница Состояние диалогового окна Свойства входа в систему для учетной записи Guest позволяет включать и отключать эту учетную запись.Членство в роли базы данных для:имя_базы_ данных
Выберите роли для этого пользователя в указанной базе данных. Все пользователи являются членами общедоступной роли в каждой базе данных и не могут быть удалены. Дополнительные сведения о ролях баз данных см. в разделе Роли уровня базы данных.Защищаемые объекты
На странице Защищаемые объекты перечислены все возможные защищаемые объекты и разрешения на эти объекты, которые могут быть предоставлены для имени входа. На этой странице доступны следующие параметры.
Верхняя сетка
Содержит один или несколько элементов, для которых могут быть установлены разрешения. Отображаемые в верхней сетке столбцы меняются в зависимости от участника или защищаемого объекта.Добавление элементов в верхнюю сетку:
- Нажмите Поиск.
- В диалоговом окне «Добавление объектов» выберите один из следующих параметров: определенные объекты. , все объекты типов. , сервер server_name. Нажмите ОК.
Примечание. При выборе варианта Серверserver_name верхняя сетка автоматически заполняется всеми объектами безопасности.
- В диалоговом окне «Выбор объектов» в разделе «Выбрать эти типы объектов» выберите «Типы объектов. «.
- В диалоговом окне Выбор типов объектов выберите любые или все из следующих типов объектов: Конечные точки, Имена входа, Серверы, Группы доступностии Роли сервера. Нажмите ОК.
- В разделе «Введите имена объектов», чтобы выбрать (примеры),нажмите кнопку Обзор. .
- В диалоговом окне «Обзор объектов» выберите любой из доступных объектов типа, выбранного в диалоговом окне «Выбор типов объектов», а затем нажмите кнопку «ОК«.
- В диалоговом окне «Выбор объектов» нажмите кнопку «ОК«.
Название
Имя каждого участника или защищаемого объекта, добавляемого в сетку.Тип
Описывает тип каждого элемента.Вкладка «Явное»
Содержит возможные разрешения для защищаемого объекта, выбранного в верхней сетке. Не все эти параметры доступны для всех явно указанных разрешений.Разрешения
Имя разрешения.Grantor
Участник, предоставивший разрешение.Право предоставил
Выберите, чтобы предоставить имени входа данное разрешение. Снимите флажок, чтобы отменить это разрешение.Право передачи
Отражает состояние параметра WITH GRANT для разрешения, указанного в списке. Поле доступно только для чтения. Для применения данного разрешения используйте инструкцию GRANT .Запретить
Выберите, чтобы запретить имени входа в данном разрешении. Снимите флажок, чтобы отменить это разрешение.Состояние
На странице «Состояние » перечислены некоторые параметры проверки подлинности и авторизации, которые можно настроить в выбранном имени входа SQL Server.
На этой странице доступны следующие параметры.
Разрешение на подключение к ядру СУБД
При работе с этим параметром выбранное имя входа нужно представлять как участника, которому можно предоставить или не предоставить разрешение на защищаемый объект.Выберите Предоставить , чтобы предоставить имени входа разрешение CONNECT SQL. Выберите Запретить , чтобы запретить имени входа разрешение CONNECT SQL.
Имя входа
При работе с этим параметром выбранное имя входа нужно представлять как запись в таблице. Ей будут присваиваться приведенные здесь значения.Отключенное имя входа продолжает существовать в виде записи. Но если он пытается подключиться к SQL Server, имя входа не будет проходить проверку подлинности.
Выберите этот параметр для включения или отключения имени входа. Этот параметр использует инструкцию ALTER LOGIN с параметром ENABLE или DISABLE.
Проверка подлинности SQL Server
Поле входа проверка заблокировано только в том случае, если выбранный вход подключается с помощью проверки подлинности SQL Server, а имя входа заблокировано. Этот параметр доступен только для чтения. Чтобы разблокировать блокированное имя входа, выполните инструкцию ALTER LOGIN с параметром UNLOCK.Создание имени входа с помощью проверка подлинности Windows с помощью T-SQL
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
-- Create a login for SQL Server by specifying a server name and a Windows domain account name. CREATE LOGIN [\] FROM WINDOWS; GOСоздание имени входа с помощью проверки подлинности SQL Server с помощью T-SQL
- В обозревателе объектов подключитесь к экземпляру ядра СУБД.
- На стандартной панели выберите пункт Создать запрос.
- Скопируйте приведенный ниже пример в окно запроса и нажмите кнопку Выполнить.
-- Creates the user "shcooper" for SQL Server using the security credential "RestrictedFaculty" -- The user login starts with the password "Baz1nga," but that password must be changed after the first login. CREATE LOGIN shcooper WITH PASSWORD = 'Baz1nga' MUST_CHANGE, CREDENTIAL = RestrictedFaculty; GOДополнительные сведения см. в статье CREATE LOGIN (Transact-SQL).
Дальнейшие действия. Действия по созданию имени входа
После создания имени входа имя входа может подключиться к SQL Server, но не обязательно имеет достаточно разрешений для выполнения любой полезной работы. В следующем списке представлены ссылки на основные действия имени входа.
- Дополнительные сведения о присоединении имени входа к роли см. в разделе Присоединение к роли.
- Дополнительные сведения об авторизации имени входа для использования базы данных см. в разделе Создание пользователя базы данных.
- Сведения о предоставлении разрешения для имени входа см. в разделе Предоставление разрешения для участника.
См. также
- Центр безопасности для ядра СУБД SQL Server и Базы данных Azure SQL
- Субъекты сервера Microsoft Entra (имена входа)
- Руководство. Создание и использование имен входа сервера Microsoft Entra
Как узнать логин sql server
Я хочу реализовать такой механизм: клиент (программа Delphi или кто-то еще) не имеет доступа к некоторым таблицам SQL SERVER. Но он вызывает хранимую процедуру, которая, учитывая его логин (а он у него совпадает с учетной записью Windows), выдает ему те записи из таблиц, которые предназначены именно ему. Но если использовать внутри хранимой процедуры:
SELECT @uname = user;
То, если пользователь не владелец этой функции, @uname = «dbo». Видимо, это возникает из за того, что хранимая процедура запускается не под моим пользователем, а под dbo.
Подскажите, пожалуйста, как в хранимой процедуре получить именно имя пользователя, который ее вызвал? Или обходной вариант: например, запустить процедуру откуда-то, передав ей имя пользователя в качестве аргумента (но только не из Delphi :), т.к. должна обеспечиваться защита, чтобы пользователь мог получить только свои строки из таблиц).
> GRANT?
Тут я не разобрался. Права поменять можно, но сложность как раз заключалась в том, что я не знал, какой пользователь запустил процедуру.← →
Anatoly Podgoretsky © ( 2010-09-09 14:15 ) [4]> Ega23 (09.09.2010 13:48:01) [1]
Посмотри по справке, а то там есть их несколько
← →
И. Павел © ( 2010-09-09 15:16 ) [5]> Посмотри по справке, а то там есть их несколько
SUSER_SNAME() — эта функция возвращает логин по security identification number (SID).
SUSER_NAME() — а эта функция возвращает логин по login identification numberНо про SUSER_NAME написано:
«SUSER_NAME returns a login name only for a login that has an entry in the syslogins system table.»
так что наверное лучше ее не использовать, т.к. в справке написано, что syslogins устарела и пока что заменена на view, и лучше ее не использовать в новых разработках.А в справке по SUSER_SNAME() я запутался в контекстах 🙂
When called without an argument, SUSER_SNAME returns the name of the current security context. When called without an argument within a batch that has switched context by using EXECUTE AS, SUSER_SNAME returns the name of the impersonated context. When called from an impersonated context, ORIGINAL_LOGIN returns the name of the original context.Поэтому я решил использовать ORIGINAL_LOGIN().
Подскажите, пожалуйста, это правильно. Я не наткнусь с ней на подвождные камни?← →
sniknik © ( 2010-09-09 15:47 ) [6]ORIGINAL_LOGIN() в 2000м нету. если не критично.
← →
И. Павел © ( 2010-09-09 15:51 ) [7]> ORIGINAL_LOGIN() в 2000м нету
Спасибо за сведения. Но это не критично. У нас стоит 2005 и дальше будем ставить только более новые.Наверное, буду тогда использовать ORIGINAL_LOGIN.
← →
Anatoly Podgoretsky © ( 2010-09-09 16:05 ) [8]
> SUSER_SNAME() — эта функция возвращает логин по security
> identification number (SID).
> SUSER_NAME() — а эта функция возвращает логин по login identification
> number
Попробуй не указывать SID, строго как у меня написано, без самодеятельности.← →
Anatoly Podgoretsky © ( 2010-09-09 16:06 ) [9]Можешь написать так
← →
Anatoly Podgoretsky © ( 2010-09-09 16:10 ) [10]Замечания
Эта функция может быть полезной для аудита идентификатора исходного контекста подключения. Так как остальные функции, такие как SESSION_USER и CURRENT_USER, возвращают текущий исполняющий контекст, ORIGINAL_LOGIN возвращает идентификатор имени входа, первым подключившегося к экземпляру SQL Server в данном сеансе.Примеры
Следующий пример переключает исполняющий контекст текущего сеанса от того, кто вызвал данные инструкции, на login1. Функции SUSER_SNAME и ORIGINAL_LOGIN используются для возврата пользователя текущего сеанса (пользователя, на которого переключается контекст) и исходной учетной записи имени входа.Если у тебя переключается контекст, то лучше CURRENT_USER
← →
И. Павел © ( 2010-09-09 16:11 ) [11]> Попробуй не указывать SID, строго как у меня написано, без
> самодеятельности.Если не указывать, то у меня одно и то же возвращают: логин текущего пользователя.
← →
Anatoly Podgoretsky © ( 2010-09-09 16:12 ) [12]> И. Павел (09.09.2010 15:51:07) [7]
Используй SUSER_SNAME это переносимо и является алиасом по сути.
← →
Anatoly Podgoretsky © ( 2010-09-09 16:16 ) [13]> И. Павел (09.09.2010 16:11:11) [11]
Ты эе это и просил, если не учитывать переключение контекста.
← →
И. Павел © ( 2010-09-09 16:26 ) [14]> Используй SUSER_SNAME это переносимо и является алиасом
> по сути.
Спасибо. Тогда буду использовать его.PS: тем более, что для того, чтобы сменить SUSER_SNAME, пользователю, наверное, все равно нужно знать пароль к новому логину. А если он его знает, то и ORIGINAL_LOGIN не спасет.
← →
Медвежонок Пятачок © ( 2010-09-09 16:32 ) [15]Использование EXECUTE AS CALLER в качестве изолированной инструкции
EXECUTE AS CALLER можно выполнять в модуле в качестве изолированной инструкции для переключения контекста выполнения на пользователя, вызывающего модуль.
Рассмотрим следующую хранимую процедуру под названием SqlUser2.
CREATE PROCEDURE dbo.usp_Demo
WITH EXECUTE AS «SqlUser1»
AS
SELECT user_name(); — Shows execution context is set to SqlUser1.
EXECUTE AS CALLER;
SELECT user_name(); — Shows execution context is set to SqlUser2, the caller of the module.
REVERT;
SELECT user_name(); — Shows execution context is set to SqlUser1.
GO
http://msdn.microsoft.com/ru-ru/library/ms188354.aspx← →
И. Павел © ( 2010-09-09 16:37 ) [16]> Медвежонок Пятачок ©
Спасибо. Тоже интересный вариант.← →
Anatoly Podgoretsky © ( 2010-09-09 16:40 ) [17]> И. Павел (09.09.2010 16:26:14) [14]
ORIGINAL_LOGIN не спасет у него другое назначение показать логин с которым
пользователь начал сессию, для контекста в этом случае нужно использовать
CURRENT_USER
В MSSQL большой набор функций и их вариантов.← →
И. Павел © ( 2010-09-09 16:45 ) [18]> [17] Anatoly Podgoretsky ©
Ясно, спасибо.Записная книжка программиста-новичка, C#, SQL, PHP и все-все-все
Я ведь это уже делал, но хрен теперь найдешь тот кусок кода, гуглим снова… Где бы найти простое и понятное руководство для начинающего, а не тонкости для мега-гуру?
Главная→Transact SQL / MS SQL→ Как проверить, существует ли логин, роль и пользователь базы в MS SQL Server
Рубрики
Свежие записи
- Вырезаем числовую часть из начала строки в transact-sql
- Пул соединений с базой данных в ADO.NET / OleDb — как избежать проблем с утечкой соединений в ASP.NET (перевод)
- ASP .Net MVC, JQuery и AJAX — отсылаем данные на сервер
- Разделитель тысяч и дробной части для decimal
- Создаем расширенный Control в WinForms наследуясь от существующего
- Вставка строк и изменение границ ячеек в Excel Interop из C#
- Как прочитать данные из удаленного DataRow в DataTable
- Проблемы с кодировкой при копировании русского текста из MS SQL Studio в Outlook/Word/Office
- Как проверить, существует ли таблица в MS SQL Server перед удалением/созданием
- Очень просто.
- Получаем выбранные строки DataGridView, в котором выбраны только ячейки
- Ошибка в коде привела к убыткам в 476 миллионов долларов и банкротству компании
- Отслеживаем изменения выбранного значения в колонке ComboBox DataGridView (DataGridViewComboBoxColumn)
- Excel 2010, Windows 7, два монитора и «ошибка при направлении команды приложению»
- Удаляем default-ограничение (constraint) в Transact Sql
Свежие комментарии
- Kirill к записи Самоучитель по C# для начинающих. 01. Основы языка, переменные, логика, циклы.
- как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
- DannyLef к записи Полезные расширения-плагины для WordPress
- как избавиться от чувства вины к записи Как добавить строку/текст в начало файла в C# и .Net
- gweg2ehgwEHERWQHQ к записи Простейшее диалоговое окно-вопрос (MessageBox) в WindowsForms
Архивы
Мета
Как проверить, существует ли логин, роль и пользователь базы в MS SQL Server
Опубликовано 17.10.2012 автором Ведомир
Задача: проверить, есть ли на сервере соответствующий серверный логин, роль на уровне базы данных, пользователь на уровне базы данных и создать в случае отсуствия. Решение приводится для MS SQL Server 2005 и выше.
Существование серверного логина
declare @user_name_db varchar(50), @password varchar(30), @sql_statement nvarchar(1000), @error_message varchar(1000) set @user_name_db = 'a.s.pushkin' set @password = 'pamyatnik'
if not exists (select name from sys.server_principals where type = 'S' and name = @user_name_db) begin select @sql_statement = 'CREATE LOGIN "' + @user_name_db + '" WITH PASSWORD = ''' + @password+ ''', CHECK_POLICY = OFF' exec sp_executesql @sql_statement end
Существование роли в текущей базе данных
if database_principal_id('db_executor') is null begin create role db_executor grant execute to db_executor endСуществование пользователя в текущей базе данных
if (select count(*) from sys.database_principals where name = @user_name_db) = 0 begin -- создаем пользователя select @sql_statement = 'CREATE USER "' + @user_name_db + '" FOR LOGIN "' + @user_name_db+ '"' exec sp_executesql @sql_statement -- прописываем права EXEC sp_addrolemember db_executor, @user_name_db EXEC sp_addrolemember db_datareader, @user_name_db EXEC sp_addrolemember db_datawriter, @user_name_db end else begin set @error_message = 'Пользователь ' + @user_name_db + ' уже существует! ' RAISERROR (@error_message, 14, 1) end
View the SQL Server error log in SQL Server Management Studio (SSMS)
The SQL Server error log contains user-defined events and certain system events you can use for troubleshooting.
View the logs
- In SQL Server Management Studio, select Object Explorer. To open Object Explorer, select F8. Or on the top menu, select View, and then select Object Explorer:
- In Object Explorer, connect to an instance of SQL Server, and then expand that instance.
- Find and expand the Management section (assuming you have permissions to see it).
- Right-click SQL Server Logs, select View, and then choose SQL Server Log.

- The Log File Viewer appears (it might take a moment) with a list of logs for you to view.
Next steps
- Configure SQL Server Error Logs
- sp_readerrorlog
Feedback
Submit and view feedback for
