Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Имеется логин (группа "Group 1"). Хочу создать пользователя в БД на основе этого логина:
USE SomeDb;
GO

CREATE USER [Domain-C\ivanov.sa]
FROM LOGIN [Domain-C\Group 1];


SQL Server выдаёт ошибку:
Msg 15006, Level 16, State 1, Line 1
Domain-C\ivanov.sa не является допустимым именем, так как содержит недопустимые символы.


Что самое интересное: если создать логин [Domain-C\ivanov.sa], и на его основе создать пользователя [Domain-C\ivanov.sa], то всё нормально, т.е.:
USE master;
GO

CREATE LOGIN [Domain-C\ivanov.sa] FROM WINDOWS;

USE SomeDb;
GO

CREATE USER [Domain-C\ivanov.sa] FROM LOGIN [Domain-C\ivanov.sa];


P.S. Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Data Center Edition (64-bit)
16 окт 13, 17:25    [14981860]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
MrVoid
Имеется логин (группа "Group 1"). Хочу создать пользователя в БД на основе этого логина:
USE SomeDb;
GO

CREATE USER [Domain-C\ivanov.sa]
FROM LOGIN [Domain-C\Group 1];


SQL Server выдаёт ошибку:
Msg 15006, Level 16, State 1, Line 1
Domain-C\ivanov.sa не является допустимым именем, так как содержит недопустимые символы.


Что самое интересное: если создать логин [Domain-C\ivanov.sa], и на его основе создать пользователя [Domain-C\ivanov.sa], то всё нормально, т.е.:
USE master;
GO

CREATE LOGIN [Domain-C\ivanov.sa] FROM WINDOWS;

USE SomeDb;
GO

CREATE USER [Domain-C\ivanov.sa] FROM LOGIN [Domain-C\ivanov.sa];


P.S. Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) Data Center Edition (64-bit)



CREATE USER [Domain-C\ivanov.sa]
FOR LOGIN [Domain-C\Group 1];
16 окт 13, 17:28    [14981868]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MrVoid,

Похоже, что пользователя с бэкслешем можно создать, только если его имя совпадает с логином.
16 окт 13, 17:35    [14981912]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Сергей Викт.,

И в чём различие? Замена "FROM" на "FOR"??
16 окт 13, 17:36    [14981918]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MX_User
Member

Откуда:
Сообщений: 27
Я б попробовал
CREATE USER [ivanov.sa@Domain-C]
16 окт 13, 17:42    [14981970]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
MX_User
Всё заработало!!!! Был бы пьяным - расцеловал бы! :)
Только в документации я что-то такого не нашёл. :(
16 окт 13, 17:45    [14981989]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MX_User
Member

Откуда:
Сообщений: 27
MrVoid,
Дело не в документации, просто доменная авторизация в win указывается двумя способами домен\пользатель или пользователь@домен
16 окт 13, 17:51    [14982026]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
MX_User,

А почему через слэш не работает? Дело в том, что я вчера группу [Domain-C\Group 1] не мог создать, но чуть позже она добавилась. Бред какой-то...
16 окт 13, 17:53    [14982044]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
Гость333
Member

Откуда:
Сообщений: 3683
MrVoid
Только в документации я что-то такого не нашёл. :(

BOL -> CREATE USER
The names of users that are mapped to SQL Server logins, certificates, or asymmetric keys cannot contain the backslash character (\).

Но, похоже, это работает не совсем так, как описано.
Как я понял, проверяется, нет ли бэкслеша в имени пользователя.
Если есть, то имя пользователя сравнивается с логином.
Если при этом имя пользователя и логин не совпадают, то выдаётся сообщение о неверном символе, при этом существование и тип логина даже не проверяется.
Если же имя пользователя и логин совпадают, тогда уже проверяется, какого типа этот логин.
16 окт 13, 17:56    [14982068]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Гость333,

Спасибо! :)
16 окт 13, 18:01    [14982106]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Попробовал в SQL Server 2012. В BOL написано:
SQL Server 2012 BOL
Only users that are mapped to Windows principals can contain the backslash character (\).

Но всё равно выходит ошибка.
17 окт 13, 12:16    [14984624]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
Уленшпигель
Member

Откуда:
Сообщений: 115
MrVoid, если вы в базе данных создаете пользователя из доменного логина, то или имя пользователя совпадает с логином полностью (тогда можно обратную косую) или, если не совпадает полностью, обратной косой в имени пользователя быть не должно.
17 окт 13, 12:29    [14984729]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Уленшпигель, спасибо! Теперь всё понятно! :)
17 окт 13, 13:55    [14985339]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Пообщавшись на MSDN, я пришёл к следующему:
-- Note the absence of domain name
CREATE USER [ivanov.sa] FROM LOGIN [Domain-C\Group 1];

/*
   Although the name was created without domain notion,
   the user is recognized to be from Domain-C domain.
   Thus, the following statement DOES NOT work:

   EXECUTE AS USER = 'ivanov.sa';
*/

-- The following statement DOES work.
-- And it requires domain name.
EXECUTE AS USER = 'Domain-C\ivanov.sa';

SELECT SYSTEM_USER; -- <= Prints: Domain-C\ivanov.sa
REVERT;
17 окт 13, 17:25    [14987033]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
o-o
Guest
из области догадок:
создавая юзера на основе логина-группы, сервер запоминает виндовский сид группы из АД,
сопостовляя его с именем юзера.
будет какой-то бред, если в sys.database_principals для юзера [Domain-C\ivanov.sa] сохранится "групповой" сид,
у [Domain-C\ivanov.sa] свой есть.
вот чтоб не попасть в такую ситуацию, сервер не позволяет мапить вин группу на юзера,
или одного вин юзера на другого вин юзера.
ну и чем проверять, существует или нет в АД юзер, выбранный в качестве имени,
он просто не позволяет мапить виндовские логины на имена вида "domain\account",
только на "самих себя" или на какое-то левое имя, к-ое нельзя интерпретировать как доменное.

да и вообще, "просочившись" в базу через группового юзера,
все равно же все свои имена и сиды имеют, о чем и говорит SYSTEM_USER.
да и что бы должен был показать SYSTEM_USER, для юзера [Domain-C\PETROV.sa], входящего в группу [Domain-C\Group 1],
если бы ТС-у удалось осуществить задуманное в первом посте?
[Domain-C\ivanov.sa]?
17 окт 13, 18:53    [14987492]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
o-o,

Весь вопрос был о синтаксисе создания юзера. Так как слэш в имени доменного юзера нельзя использовать в моём случае, то есть два варианта: либо указать [ivanov.sa@Domain-C] или просто [ivanov.sa]:
CREATE USER [ivanov.sa@Domain-C] FROM LOGIN [Domain-C\Group 1];

-- или

CREATE USER [ivanov.sa] FROM LOGIN [Domain-C\Group 1];

Результат будет одним и тем же. Только в списке юзеров первый будет так и отображаться ivanov.sa@Domain-C, а во втором просто ivanov.sa.
18 окт 13, 08:16    [14995235]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
o-o
Guest
MrVoid,
а скажите, если не секрет, зачем хочется группу отмапить на юзера, "кажущегося доменным аккаунтом"?
чтоб кто не знает, не догадался, что под ним вся группа ходит?
18 окт 13, 11:04    [14996424]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
В общем, сейчас я сделал так. Админ добавил юзеров в доменные группы (9 групп). Я создал логины на основе этих групп. Далее, создаю юзеров (с таким же именем) в базе данных. Всё нормально. Но! Чтобы протестировать каждую группу, я хочу воспользоваться EXECUTE AS, но... Ничего не получается. Все действия - в скрипте:
USE SomeDb;
GO

-- Создаём юзера на основе логина (имена одинаковые)
CREATE USER [Domain-C\ТПЭУ] FROM LOGIN [Domain-C\ТПЭУ];

-- Пытаемся стать этим юзером
EXECUTE AS USER = 'Domain-C\ТПЭУ';

Ошибка:
Msg 15517, Level 16, State 1, Line 1
Cannot execute as the database principal because the principal "Domain-C\ТПЭУ" does not exist, this type of principal cannot be impersonated, or you do not have permission.


Создаю юзера на основе логина, который создан на основе юзера (а не доменной группы), то всё ОК. Получается, нельзя олицетворить себя, если юзер создан на основе "доменного" логина?
18 окт 13, 16:51    [14999482]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
Glory
Member

Откуда:
Сообщений: 104751
MrVoid
Но! Чтобы протестировать каждую группу, я хочу воспользоваться EXECUTE AS, но... Ничего не получается.

BOL - EXECUTE AS

' user_name '
Specifies the statements inside the module execute in the context of the user specified in user_name. Permissions for any objects within the module are verified against user_name. user_name cannot be specified for DDL triggers with server scope or logon triggers. Use login_name instead.

user_name must exist in the current database and must be a singleton account. user_name cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.


' login_name '
Specifies the statements inside the module execute in the context of the SQL Server login specified in login_name. Permissions for any objects within the module are verified against login_name. login_name can be specified only for DDL triggers with server scope or logon triggers.

login_name cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.
18 окт 13, 16:54    [14999505]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
o-o
Guest
про группу документировано в статье EXECUTE AS

{ EXEC | EXECUTE } AS
{ LOGIN | USER } = 'name'

name must be a singleton account, and cannot be a group, role, certificate, key, or built-in account, such as NT AUTHORITY\LocalService, NT AUTHORITY\NetworkService, or NT AUTHORITY\LocalSystem.
18 окт 13, 16:55    [14999509]     Ответить | Цитировать Сообщить модератору
 Re: Не создаётся пользователь  [new]
MrVoid
Member

Откуда:
Сообщений: 333
Glory, о-о
Разобрался. Надо олицетвориться юзером в этой группе:
CREATE USER [ЭУ] FROM LOGIN [Domain-C\ТПЭУ];
EXECUTE AS USER = 'ivanov.sa';  -- [ivanov.sa] в группе [Domain-C\ТПЭУ]
SELECT SYSTEM_USER;  -- Domain-C\ivanov.sa

Всем огромное спасибо! :) :)
18 окт 13, 17:13    [14999624]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить