Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
o-o, а разве пример их приведенего хелпа , не тоже самое ?
|
|
20 янв 15, 13:17 [17142565] Ответить | Цитировать Сообщить модератору |
komrad Member Откуда: Сообщений: 5491 |
Maxx, пример указан для contained database, а у автора SQL2008R2 - см версию на скриншоте |
20 янв 15, 13:23 [17142611] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
komrad, сорри не досмотрел... таки в доке по 2008R2 етого таки нет |
20 янв 15, 13:35 [17142680] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
а кстате , нигде не написанно что остальные параменты у команды обязательные. И по факту где-то вот начиная от сюда
и стоит искать , и далее
Старый вариант sp_adduser - явно вылетел бы, а вот реализация внутреняя CREATE USER тайна покрытая мраком (если у кого есть былоб любопытно глянуть). Может кто более документированно расскажет почему так просиходит |
||||
20 янв 15, 14:07 [17142905] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
да, вылетает, при всей фантазии: 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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
o-o, да я перед тем как писать код ее посмотрел |
20 янв 15, 14:30 [17143054] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
Махх, ну так тут и пишут, что будет отмаплен в соответствующий логин. а логина-то и нет. и никуда не мапится. мог бы хоть логин создавать попутно, так ведь и происходит с юзером: если выдать права в базе и такого юзера нет, то юзер будет создан. но никакой логин не создается
нет, WITHOUT LOGIN это clause. это когда явно пишешь create user [HD03\s104036] without login я-то создаю без этого WITHOUT LOGIN, хотя по сути получается как раз то же самое. вроде бы |
||||||||
20 янв 15, 14:37 [17143081] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
o-o, у меня с чтетнием хорошо:) Я тут уже больше про то,что такие механизмы есть, т.е. описанны в документации . так же как и не описанно что они ОБЯЗАТЕЛЬНЫЕ (хотя бы попарно)... Вот я и пытаюсь "домудрить" ровно как и вы - почему сработало. Т.е. даже не почему сработало...а где написанно конкретно ,что не должно сработать было. Как пример приводил старую реализацию,которая гарантированно не пашет в таких случаях. |
20 янв 15, 14:43 [17143119] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
o-o, .. так якесь дежавю. Вопрос почему дальше все так происходит вроде разобрали в другой теме (или хотя бы попытались разобрать). Здесь же вроде тема - про то,что все ето "безобразие" стартует с скажем так - не явно запрещенной работы команды create user. |
20 янв 15, 15:31 [17143429] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
ех жаль что мерджить темы нельзя на форуме |
20 янв 15, 15:32 [17143438] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Если вы не пишите какую-то опцию команды, то это не значит, что сервер не подставлеят на место этой опции какое-то значение Рассмотрим описание синтаксиса 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ну без всяких параметров. Единственное упущение здесь я вижу, что по хелпу не указан параметер по-умолчанию. Но это не значит, что параметра по-умолчанию нет
И что тут неправильного ? Поставили ящички с именами. Огродили все это забором, чтобы никто не видел имен. Потом убрали забор. И все, о Боже, увидели ящички. А вы не забыли, что у public-а еще по-умолчанию права VIEW ANY DATABASE ? И еще CONNECT ON ENDPOINT. И еще что-то может быть не по-умолчанию уже Вы еще ключики к каждому ящику положите сверху. Сиречь publc-у/guest-у назначьте максимально прав. И ходите показывайте всем этот фетиш - я мол разрешил что-то и оба-на это разрешение работает. |
||||
20 янв 15, 15:40 [17143488] Ответить | Цитировать Сообщить модератору |
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] Ответить | Цитировать Сообщить модератору |
Maxx Member [скрыт] Откуда: Сообщений: 24290 |
ну где-то к етому я и вел. У вас случайно в загашниках -нет исходников ? (так случайно поинтересовался ..помниться у джимерса 2000 был) |
||
20 янв 15, 15:51 [17143549] Ответить | Цитировать Сообщить модератору |
o-o
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] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А кто-то говорил, что это логин ? По-вашему мнению кому и какие права должна дать команда grant connect sql to 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] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
недостаточно. приведите хоть одно упоминание коннекта к серверу/попаданию на сервер, когда речь идет о public. про попадание в базу через guest-а я вам дофигище покажу. и потом, если это так очевидно, почему вы сразу бросились отрицать сам факт попадания на сервер в отсутствие явного логина? когда здесь на форуме поднимаются темы о попадании в базу, почему-то все помнят про guest-а и спрашивают первым делом, не включен ли на базе guest? |
||
20 янв 15, 16:12 [17143691] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
А кто по-вашему для _сервера_ входит в роль public ?
А привидите упоминание, что для _коннекта_ нужен логин на сервере ? Что вот, например, мне может помешать пытаться коннектиться к вашему серверу, указывая что угодно в качестве логина ? Сервер принимает запрос на соединение. А потом рассматривает, есть ли условия для разрешения создания этого соединения Включите элементарную логику - если блок проверки сообщает, что всем можно соединяться, то что еще нужно проверять серверу ? |
||||
20 янв 15, 16:21 [17143775] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
и еще раз выделю. в той же статье про CREATE USER User without a login. Cannot login but can be granted permissions. в явном виде прописано, что не может коннектиться. безоговорочно. |
20 янв 15, 16:21 [17143778] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Да. Логика - не ваш конек. |
||
20 янв 15, 16:25 [17143808] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Ситуация 1. Дедушке-вахтеру выдана письменная инстркуция - проверить каждого входящего на соответствие правилам входа. если какое-то из правил входа не удовлетварено, то не пускать через ворота Ситуация 2. Дедушке-вахтеру выдана еще одна письменная инстркуция - пускать через ворота каждого, кто в них постучит. Как вы думаете, дедушка будет смотреть инструкцию нр1., если он сначала посмотрит в инструкцию нр.2 ? |
20 янв 15, 16:30 [17143845] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
все имеющиеся логины public Every SQL Server login belongs to the public server role. Server-Level Roles |
||
20 янв 15, 16:30 [17143847] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Фейспалм. Вы разницу между коннектом и логином понимаете ? |
||||
20 янв 15, 16:31 [17143857] Ответить | Цитировать Сообщить модератору |
o-o
Guest |
да куда уж мне. намек на то, что ему могут быть выданы права? ему -- кому, юзеру? да, на уровне базы. при чем тут уровень сервера? 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 | ![]() |