Меню Закрыть

Ms sql имя пользователя

Содержание

ОБЛАСТЬ ПРИМЕНЕНИЯ: SQL Server База данных SQL Azure Azure Synapse Analytics (хранилище данных SQL) Parallel Data Warehouse APPLIES TO: SQL Server Azure SQL Database Azure Synapse Analytics (SQL DW) Parallel Data Warehouse

Возвращает имя пользователя базы данных по указанному идентификационному номеру. Returns a database user name from a specified identification number.

Синтаксические обозначения в Transact-SQL Transact-SQL Syntax Conventions

Синтаксис Syntax

Аргументы Arguments

идентификатор id
Номер идентификатора, сопоставленный с пользователем базы данных. Is the identification number associated with a database user. Аргумент id имеет тип int. Необходимо поставить скобки. id is int. The parentheses are required.

Типы возвращаемых данных Return Types

nvarchar(128) nvarchar(128)

Remarks Remarks

Когда аргумент id не указывается, подразумевается контекст текущего пользователя. When id is omitted, the current user in the current context is assumed. Если параметр содержит слово NULL, то возвращается NULL. If the parameter contains the word NULL will return NULL. При использовании функции USER_NAME без указания id после инструкции EXECUTE AS функция USER_NAME возвращает имя олицетворенного пользователя. When USER_NAME is called without specifying an id after an EXECUTE AS statement, USER_NAME returns the name of the impersonated user. Если пользователь Windows попытается получить доступ к базе данных в качестве члена группы, функция USER_NAME вернет имя этого пользователя, а не имя группы. If a Windows principal accesses the database by way of membership in a group, USER_NAME returns the name of the Windows principal instead of the group.

Примеры Examples

A. A. Использование USER_NAME. Using USER_NAME

Следующий пример возвращает имя пользователя по его идентификатору 13 . The following example returns the user name for user ID 13 .

Б. B. Использование USER_NAME без идентификатора Using USER_NAME without an ID

Следующий пример демонстрирует поиск имени текущего пользователя без указания его идентификатора. The following example finds the name of the current user without specifying an ID.

Далее приведен результирующий набор для пользователя, который является членом предопределенной роли сервера sysadmin. Here is the result set for a user that is a member of the sysadmin fixed server role.

В. C. Использование USER_NAME в предложении WHERE Using USER_NAME in the WHERE clause

Следующий пример иллюстрирует поиск в таблице sysusers строки, имя которой равняется результату работы системной функции USER_NAME для пользователя с идентификационным номером, равным 1 . The following example finds the row in sysusers in which the name is equal to the result of applying the system function USER_NAME to user identification number 1 .

Ниже приводится результирующий набор. Here is the result set.

Г. D. Вызов USER_NAME во время олицетворения пользователя с помощью EXECUTE AS Calling USER_NAME during impersonation with EXECUTE AS

Следующий пример показывает, как USER_NAME ведет себя во время олицетворения пользователя. The following example shows how USER_NAME behaves during impersonation.

Читайте также:  Как жаловаться в вк

Ниже приводится результирующий набор. Here is the result set.

Примеры: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) и Параллельное хранилище данных Parallel Data Warehouse Examples: Azure Synapse Analytics (хранилище данных SQL) Azure Synapse Analytics (SQL DW) and Параллельное хранилище данных Parallel Data Warehouse

Д. E. Использование USER_NAME без идентификатора Using USER_NAME without an ID

Следующий пример демонстрирует поиск имени текущего пользователя без указания его идентификатора. The following example finds the name of the current user without specifying an ID.

Ниже приведен результирующий набор для пользователя, вошедшего в систему. Here is the result set for a currently logged-in user.

Е. F. Использование USER_NAME в предложении WHERE Using USER_NAME in the WHERE clause

Следующий пример иллюстрирует поиск в таблице sysusers строки, имя которой равняется результату работы системной функции USER_NAME для пользователя с идентификационным номером, равным 1 . The following example finds the row in sysusers in which the name is equal to the result of applying the system function USER_NAME to user identification number 1 .

Ниже приводится результирующий набор. Here is the result set.

Возможно ли в запросе получить имя учетки не той от чего имени выполняется запрос, а той под кем залогинены на ПК? С БД работает ПО от единого прописанного пользователя, на столбец повесил триггер и хочу понимать какой юзер выполняет действия, к исходному коду ПО доступа нет.

2 ответа 2

Ответ на ваш вопрос — нет. Штатными средствами — никак.

Логика такая — сервер, это отдельная изолированная сущность, которая знать не знает ничего о том, кто и под каким именем работает на компьютере.

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

Сам сервер знает имя и пароль этого пользователя, и не более. Для того, что бы сервер смог вам выдать имя пользователя, который у вас залогинен в операционной системе, MS SQL должен уметь опрашивать на этот счет операционную систему. Но зачем это ему? Так что сервер не умеет опрашивать винду и узнавать какой пользователь там залогинен, ибо как это вообще относится к функциям сервера и базам данных? Никак.

Но есть один момент, когда для подключению к серверу используется механизм аутентификации Windows. В этом случае система аутентификации Windows и MS-SQL взаимодействуют. В этом случае для авторизации на сервере используются учетные данные Windows. И только в этом случае имя пользователя в Windows и на MS SQL Server совпадают.

Читайте также:  Что значит если при звонке нет гудков

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

Итого, получаем, что варианты у нас крайне ограничены:

Подключаться к БД через windows-аутентификацию, тогда имя домена и учетной записи будет передано внутрь сервера. Но это не всегда возможно.

Передавать серверу имя домена и пользователя из клиента самостоятельно (нужно подумать, каким именно способом).

2а. Можно попробовать заставлять сервер самостоятельно, каждый раз при подключении пользователя выполнять какой-то внешний инструмент (программу), которая получала бы имя пользователя Windows, подключалась к серверу, и записывала бы в отдельную таблицу имя виндового пользователя, который подключился к серверу.

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

недавно я столкнулся со многими различными областями SQL Server, с которыми я обычно не связываюсь. Один из них, который меня смущает, — это область Логинов и пользователей. Кажется, это должна быть довольно простая тема.

похоже, что каждый логин может иметь только 1 пользователя, и каждый пользователь может иметь только 1 логин.

логин может быть связан с несколькими таблицами, таким образом, связывая этого пользователя со многими таблицами.

поэтому мой вопрос в том, почему даже есть логин и пользователь? они, кажется, почти одно и то же. В чем разница, или чего мне не хватает?

5 ответов

"вход" предоставляет основной вход на сервер.

"пользователь" предоставляет вход в единую базу данных.

один "логин" может быть связан со многими пользователями (по одному на базу данных).

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

одна из причин иметь оба — это то, что аутентификация может быть выполнена сервером базы данных, но авторизация может быть ограничена базой данных. Таким образом, при перемещении базы данных на другой сервер вы всегда можете переназначить отношение пользователь-вход на сервере базы данных, но ваша база данных не должна меняться.

Логинов будет иметь доступ к серверу.

пользователи будет иметь доступ к базе данных.

Я думаю, что есть очень хорошо сообщение в блоге MSDN об этой теме от Laurentiu Cristofor:

первая важная вещь, которая должна быть понята о SQL Server безопасность заключается в том, что задействованы две области безопасности-сервер и база данных. Область сервера включает в себя несколько баз данных царство. Вся работа выполняется в контексте некоторой базы данных, но для получения для выполнения работы необходимо сначала иметь доступ к серверу, а затем к иметь доступ к базе данных.

доступ к серверу предоставляется через логины. Есть два основных категории имен входа: аутентифицированные имена входа SQL Server и Windows аутентификацию. Я обычно буду ссылаться на них, используя более короткий имена имен входа SQL и Windows. Окна аутентификацию можно сопоставить имена входа с пользователями Windows или с именами входа группа Windows. Таким образом, чтобы иметь возможность подключиться к серверу, необходимо иметь доступ через один из этих типов или logins-логины предоставляют доступ к серверная область.

Читайте также:  Как зайти в recovery на samsung

но Логинов недостаточно, потому что работа обычно выполняется в базе данных а базы данных-это отдельные области. Доступ к базам данных предоставляется посредством пользователи.

пользователи сопоставляются с именами входа, и сопоставление выражается SID свойство Логинов и пользователей. Вход в систему сопоставляется с пользователем в базе данных, если их значения SID идентичны. В зависимости от типа логина, мы можем поэтому имейте категоризацию пользователи, имитирующие вышеуказанное категоризация для Логинов; таким образом, у нас есть пользователи SQL и пользователи Windows и последняя категория состоит из пользователей, сопоставленных с именами входа пользователей Windows и пользователей, сопоставленных с именами входа в группу Windows.

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

вот ссылка до полного поста.

Я думаю, что это очень полезный вопрос с хорошим ответом. Просто добавьте мои два цента из MSDN создать логин страницы:

Логин-это субъект безопасности или объект, который может быть аутентифицирован защищенной системой. Для подключения к SQL Server пользователям требуется имя Входа. Можно создать имя входа на основе участника Windows (например, пользователя домена или группы домена Windows) или можно создать имя Входа, не основанное на субъекте Windows (например, SQL Сервер входа в систему).

Примечание:
Чтобы использовать проверку подлинности SQL Server, компонент Database Engine должен использовать проверку подлинности в смешанном режиме. Дополнительные сведения см. В разделе Выбор режима проверки подлинности.

как субъект безопасности, разрешения могут быть предоставлены логинам. Область входа всей СУБД. Для подключения к определенной базе данных на экземпляре SQL Server необходимо сопоставить имя входа с пользователем базы данных. Разрешения внутри базы данных предоставлено и отказано пользователю базы данных, а не логину. Разрешения, имеющие область действия всего экземпляра SQL Server (например, разрешение CREATE ENDPOINT), могут быть предоставлены для входа в систему.

Рекомендуем к прочтению

Добавить комментарий

Ваш адрес email не будет опубликован.