Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 создание в базе юзера, минуя создание логина  [new]
o-o
Guest
имеем документированную команду создания юзера в базе: CREATE USER (Transact-SQL)
в ней описаны 11 типов юзеров и способы их создания.
попробуем создать виндового юзера, имеющегося в AD,
но не попадающего на сервер ни в каком виде, т.е.:
для этого виндового аккаунта нет одноименного логина,
нет ни одной группы-логина, куда бы входил аккаунт,
никто не выдавал connect sql to public.

скрипт
create user [HD03\s104036];


успешно выполняется, единственное условие, аккаунт действительно должен существовать в AD,
иначе получим ошибку:
Msg 15401, Level 16, State 1, Line 1
Windows NT user or group 'HD03\rr104036' not found. Check the name again.


итого: юзер создан недокументированным способом,
ибо он не попадает ни в одну из категорий:
Users based on logins in master,
Users that authenticate at the database Only allowed in a contained database,
Users based on Windows principals that connect through Windows group logins,
Users that cannot authenticate

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

К сообщению приложен файл. Размер - 70Kb
20 янв 15, 12:53    [17142435]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

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

а разве пример их приведенего хелпа , не тоже самое ?
+
F. Creating a contained database user for a domain login


The following example creates a contained database user for a login named Fritz in a domain named Contoso. This example can only be executed in a contained database.







Applies to: SQL Server 2012 through SQL Server 2014.







Copy


USE AdventureWorks2012 ;
GO
CREATE USER [Contoso\Fritz] ;
20 янв 15, 13:17    [17142565]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
komrad
Member

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

пример указан для contained database, а у автора SQL2008R2 - см версию на скриншоте
20 янв 15, 13:23    [17142611]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

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

сорри не досмотрел... таки в доке по 2008R2 етого таки нет
20 янв 15, 13:35    [17142680]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
а кстате , нигде не написанно что остальные параменты у команды обязательные.
И по факту где-то вот начиная от сюда
автор
If FOR LOGIN is omitted, the new database user will be mapped to the SQL Server login with the same name

и стоит искать , и далее
автор
The WITHOUT LOGIN clause creates a user that is not mapped to a SQL Server login. It can connect to other databases as guest.

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


Старый вариант sp_adduser - явно вылетел бы, а вот реализация внутреняя CREATE USER тайна покрытая мраком (если у кого есть былоб любопытно глянуть).
Может кто более документированно расскажет почему так просиходит
20 янв 15, 14:07    [17142905]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Maxx
Старый вариант sp_adduser - явно вылетел бы

да, вылетает, при всей фантазии:
sp_adduser [HD03\s104036];

Msg 15007, Level 16, State 1, Procedure sp_adduser, Line 15
'HD03\s104036' is not a valid login or you do not have permission.

sp_adduser @name_in_db = [HD03\s104036];

Msg 201, Level 16, State 4, Procedure sp_adduser, Line 0
Procedure or function 'sp_adduser' expects parameter '@loginame', which was not supplied.

sp_adduser @loginame = [HD03\s104036], @name_in_db = [HD03\s104036];

Msg 15007, Level 16, State 1, Procedure sp_adduser, Line 15
'HD03\s104036' is not a valid login or you do not have permission.

sp_adduser @loginame = null, @name_in_db = [HD03\s104036];

Msg 15151, Level 16, State 1, Line 1
Cannot find the user 'HD03\s104036', because it does not exist or you do not have permission.
Msg 2759, Level 16, State 0, Line 1
CREATE SCHEMA failed due to previous errors.

sp_adduser @loginame = 'public', @name_in_db = [HD03\s104036];

Msg 15007, Level 16, State 1, Procedure sp_adduser, Line 15
'public' is not a valid login or you do not have permission.
20 янв 15, 14:21    [17142998]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

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

да я перед тем как писать код ее посмотрел
20 янв 15, 14:30    [17143054]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Maxx
а кстате , нигде не написанно что остальные параменты у команды обязательные.
И по факту где-то вот начиная от сюда
автор
If FOR LOGIN is omitted, the new database user will be mapped to the SQL Server login with the same name


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

Maxx
и стоит искать , и далее
автор
The WITHOUT LOGIN clause creates a user that is not mapped to a SQL Server login. It can connect to other databases as guest.

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


нет, WITHOUT LOGIN это clause.
это когда явно пишешь
create user [HD03\s104036] without login

я-то создаю без этого WITHOUT LOGIN,
хотя по сути получается как раз то же самое. вроде бы
20 янв 15, 14:37    [17143081]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

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

у меня с чтетнием хорошо:) Я тут уже больше про то,что такие механизмы есть, т.е. описанны в документации . так же как и не описанно что они ОБЯЗАТЕЛЬНЫЕ (хотя бы попарно)...
Вот я и пытаюсь "домудрить" ровно как и вы - почему сработало.
Т.е. даже не почему сработало...а где написанно конкретно ,что не должно сработать было.
Как пример приводил старую реализацию,которая гарантированно не пашет в таких случаях.
20 янв 15, 14:43    [17143119]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Maxx,
ну так еще раз, что пишут про юзеров User without a login?
пускай неважно, созданы они с использованием или без without login:

User without a login. Cannot login but can be granted permissions.

ну так приехали туда, откуда все и началось.
выдаем connect sql на public.
все, этот юзер будет коннентиться к серверу.
и попадать в ту базу, где его создали
20 янв 15, 15:04    [17143263]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
o-o, .. так якесь дежавю. Вопрос почему дальше все так происходит вроде разобрали в другой теме (или хотя бы попытались разобрать). Здесь же вроде тема - про то,что все ето "безобразие" стартует с скажем так - не явно запрещенной работы команды create user.
20 янв 15, 15:31    [17143429]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
ех жаль что мерджить темы нельзя на форуме
20 янв 15, 15:32    [17143438]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
я-то создаю без этого WITHOUT LOGIN,

Если вы не пишите какую-то опцию команды, то это не значит, что сервер не подставлеят на место этой опции какое-то значение

Рассмотрим описание синтаксиса
CREATE USER user_name
[ { { FOR | FROM }
{
LOGIN login_name
| CERTIFICATE cert_name
| ASYMMETRIC KEY asym_key_name
}
| WITHOUT LOGIN
]
[ WITH DEFAULT_SCHEMA = schema_name ]
Есть две группы опций - FOR | FROM и WITH DEFAULT_SCHEMA
Для FOR | FROM можно выбрать либо LOGIN/CERTIFICATE/ASYMMETRIC KEY с параметрами либо WITHOUT LOGIN
Если вы не указали ни LOGIN, ни CERTIFICATE, ни ASYMMETRIC KEY, то почему серверу нельзя подставить WITHOUT LOGIN ??? Т.е. вместо 3х опций с дополнительными параметрами подставить 1ну без всяких параметров.
Единственное упущение здесь я вижу, что по хелпу не указан параметер по-умолчанию. Но это не значит, что параметра по-умолчанию нет

o-o
ну так приехали туда, откуда все и началось.
выдаем connect sql на public.
все, этот юзер будет коннентиться к серверу.

И что тут неправильного ?
Поставили ящички с именами.
Огродили все это забором, чтобы никто не видел имен.
Потом убрали забор.
И все, о Боже, увидели ящички.
А вы не забыли, что у public-а еще по-умолчанию права VIEW ANY DATABASE ? И еще CONNECT ON ENDPOINT. И еще что-то может быть не по-умолчанию уже

Вы еще ключики к каждому ящику положите сверху. Сиречь publc-у/guest-у назначьте максимально прав.
И ходите показывайте всем этот фетиш - я мол разрешил что-то и оба-на это разрешение работает.
20 янв 15, 15:40    [17143488]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Maxx,
не, я немного не про то.
как по мне, так созданный напрямую юзер AD, ни в одну из категорий, перечисленных в статье, не попадает.
т.е. он и не тот, что имеет явный логин,
и не тот, что создан без логина, т.к. последний задуман для выдачи ему прав и использовании в execute as,
и никак не должен коннектиться к серверу.

предлагаю напрямую созданного юзера назвать "юзер AD, неявно сидящий в public-е".
со всеми вытекающими последствиями :)

кстати, за это спасибо: sp_adduser
еще одно подтверждение, что public -- это никаким местом не логин:
sp_adduser @loginame = 'public', @name_in_db = [HD03\s104036];

Msg 15007, Level 16, State 1, Procedure sp_adduser, Line 15
'public' is not a valid login or you do not have permission.
20 янв 15, 15:49    [17143539]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Maxx
Member [скрыт]

Откуда:
Сообщений: 24290
Glory
Единственное упущение здесь я вижу, что по хелпу не указан параметер по-умолчанию. Но это не значит, что параметра по-умолчанию нет

ну где-то к етому я и вел. У вас случайно в загашниках -нет исходников ? (так случайно поинтересовался ..помниться у джимерса 2000 был)
20 янв 15, 15:51    [17143549]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Glory
...И что тут неправильного ?
...Сиречь publc-у/guest-у назначьте максимально прав.
....

guest это все же вход в базу.
это юзер.
его так и называют: guest user
это в документации отражено.

public -- это НЕ логин.
вон об этом в явном виде кричит sp_adduser,
вот и еще косвенное доказательство:

execute as user = 'guest'

Command(s) completed successfully.

execute as login = 'public'

Msg 15406, Level 16, State 1, Line 1
Cannot execute as the server principal because the principal "public" does not exist, this type of principal cannot be impersonated, or you do not have permission.


про guest пишут на каждом углу, что это вход в базу ВСЕМ, не надо ему давать коннект.
почему ни слова про public?
может, потому что входа на сервер через public не должно быть вообще?
20 янв 15, 16:01    [17143619]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
public -- это НЕ логин.

А кто-то говорил, что это логин ?
По-вашему мнению кому и какие права должна дать команда grant connect sql to public ?

o-o
guest это все же вход в базу.
это юзер.
его так и называют: guest user
это в документации отражено.

Остапа понесло

o-o
почему ни слова про public?

Какого слова вы ждете ?
Слов, которые я уже вам цитировал, вам недостаточно ?
public
Every SQL Server login belongs to the public server role. When a server principal has not been granted or denied specific permissions on a securable object, the user inherits the permissions granted to public on that object. Only assign public permissions on any object when you want the object to be available to all users.
20 янв 15, 16:06    [17143652]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Glory
Какого слова вы ждете ?
Слов, которые я уже вам цитировал, вам недостаточно ?
public
Every SQL Server login belongs to the public server role. When a server principal has not been granted or denied specific permissions on a securable object, the user inherits the permissions granted to public on that object. Only assign public permissions on any object when you want the object to be available to all users.


недостаточно.
приведите хоть одно упоминание коннекта к серверу/попаданию на сервер, когда речь идет о public.
про попадание в базу через guest-а я вам дофигище покажу.

и потом, если это так очевидно, почему вы сразу бросились отрицать сам факт попадания на сервер
в отсутствие явного логина?
когда здесь на форуме поднимаются темы о попадании в базу, почему-то все помнят про guest-а
и спрашивают первым делом, не включен ли на базе guest?
20 янв 15, 16:12    [17143691]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
приведите хоть одно упоминание коннекта к серверу/попаданию на сервер, когда речь идет о public.

А кто по-вашему для _сервера_ входит в роль public ?

o-o
и потом, если это так очевидно, почему вы сразу бросились отрицать сам факт попадания на сервер
в отсутствие явного логина?

А привидите упоминание, что для _коннекта_ нужен логин на сервере ?
Что вот, например, мне может помешать пытаться коннектиться к вашему серверу, указывая что угодно в качестве логина ?
Сервер принимает запрос на соединение. А потом рассматривает, есть ли условия для разрешения создания этого соединения
Включите элементарную логику - если блок проверки сообщает, что всем можно соединяться, то что еще нужно проверять серверу ?
20 янв 15, 16:21    [17143775]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
и еще раз выделю. в той же статье про CREATE USER
User without a login. Cannot login but can be granted permissions.
в явном виде прописано, что не может коннектиться.
безоговорочно.
20 янв 15, 16:21    [17143778]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
и еще раз выделю. в той же статье про CREATE USER
User without a login. Cannot login but can be granted permissions.
в явном виде прописано, что не может коннектиться.
безоговорочно.

Да. Логика - не ваш конек.
20 янв 15, 16:25    [17143808]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

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

Ситуация 2.
Дедушке-вахтеру выдана еще одна письменная инстркуция - пускать через ворота каждого, кто в них постучит.

Как вы думаете, дедушка будет смотреть инструкцию нр1., если он сначала посмотрит в инструкцию нр.2 ?
20 янв 15, 16:30    [17143845]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Glory
А кто по-вашему для _сервера_ входит в роль public ?

все имеющиеся логины
public
Every SQL Server login belongs to the public server role.
Server-Level Roles
20 янв 15, 16:30    [17143847]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
Glory
Member

Откуда:
Сообщений: 104751
o-o
Glory
А кто по-вашему для _сервера_ входит в роль public ?

все имеющиеся логины
public
Every SQL Server login belongs to the public server role.
Server-Level Roles


Фейспалм.
Вы разницу между коннектом и логином понимаете ?
20 янв 15, 16:31    [17143857]     Ответить | Цитировать Сообщить модератору
 Re: создание в базе юзера, минуя создание логина  [new]
o-o
Guest
Glory
o-o
и еще раз выделю. в той же статье про CREATE USER
User without a login. Cannot login but can be granted permissions.
в явном виде прописано, что не может коннектиться.
безоговорочно.

Да. Логика - не ваш конек.

да куда уж мне.
намек на то, что ему могут быть выданы права?
ему -- кому, юзеру?
да, на уровне базы.
при чем тут уровень сервера?
create user [esp\ee26245] without login;
grant connect sql to [esp\ee26245];

Msg 15151, Level 16, State 1, Line 1
Cannot find the login 'esp\ee26245', because it does not exist or you do not have permission.


единственное, что про уровень сервера сказано, это что Cannot login
20 янв 15, 16:36    [17143894]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить