Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
Все форумы / Microsoft SQL Server |
![]() ![]() |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
rigid_joke Member Откуда: Сообщений: 141 |
sql server 2008 r2 (10.50.1600) есть ресторенная база как temp_bud есть пользователь другой базы (bud) , с правами на базу bud - dbo_owner. в базе temp_bud его нет! входит в стандартную серверную роль public есть пользователь select_admin , который входит в серверную роль sysadmin и не привязанный ни к одной из баз пытаюсь из базы bud сделать вот такой вызов под пользователем select_admin exec ('select * from [temp_bud].dbo.Topsheet') as login = 'select_admin' в ответ получаю: Msg 15406, Level 16, State 1, Line 1 Cannot execute as the server principal because the principal "select_admin" does not exist, this type of principal cannot be impersonated, or you do not have permission. я что-то не так делаю или просто из-за того, что у моего пользователя под которым я выполняю строку меньше прав чем у select_admin? |
23 янв 13, 11:01 [13813856] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Ну, как бы объяснено, в чем проблема:this type of principal cannot be impersonated, or you do not have permission Вы бы лучше задачу огласили. Скорее всего без смены контекста можно обойтись. |
23 янв 13, 11:11 [13813922] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
как бы да, но были сомнения!)) задача заключается в том, чтобы сделать select из ,востановленного бэкапа в пустую созданную базу без пользователей в ней , и при этом не давать первичному пользователю роль sysadmin! для этого был заведен другой пользователь с ролью sysadmin и была попытка сделать запрос из восстановленной базы от имени этого пользователя, находясь при этом в роли обычного пользователя задача пока терпит фиаско)) так чот если есть какой-то вариант, подходящий под задачу, буду вам очень признателен!! |
||
23 янв 13, 11:16 [13813955] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Если владельцами обеих баз будут одни и теже логины (sa, например). В бд temp_bud пользователью Guеst будет разрешен коннект и у баз будет разрешено DB_CHAINING, то никаких доп. логинов создавать ненадо. |
||
23 янв 13, 11:20 [13813982] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
что-то я не очень понял или вы меня не очень поняли у меня в базе temp_bud нет никаких логинов (считайте что пустая база)! восстанавливал базу как новую под логином пользователя у которого в системной роли есть кроме public еще и dbcreator если вы имеете ввиду вот так: exec ('select * from [temp_bud].dbo.Topsheet') as login = 'sa' то могу сказать что пишет тоже самое что и в первом примере! |
||||
23 янв 13, 11:27 [13814035] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
или вы имели ввиду что можно программным способом из-под обычного пользователя базы bud с системной ролью public и не завязанного на temp_bud дать какие-то полномочию, которые разрешат сделать запрос? |
23 янв 13, 11:29 [13814047] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Начем с того, что логинов вообще нет в базах Логины находятся на сервере. А в базах находятся пользователи. Вы учитываете это при написании exec () as ?
Разумеется. А вы хотели, чтобы вот так просто любой ВасяПупкин смог "прикидываться" администратором ? Для чего тогда нужна была бы вся система безопасности ? |
||||
23 янв 13, 11:31 [13814067] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Читаем про Ownership Chains в документации. Я написал условия, необходимые для ее работы между бд. Приэтом никакой имперсонации EXEC ... AS ... делать не надо. |
||
23 янв 13, 11:47 [13814167] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
понятное дело, что логины находятся на сервере, я просто некорректно выразился и только потому что в моем примере видно, что я пытаюсь сделать as login , а не as user ! про Ownership Chains я сейчас почитаю в любом случае! но если в вашем случае не много текста и вам не сложно написать или скинуть, как образец, свой пример, то буду вам благодарен! |
||||||
23 янв 13, 11:51 [13814194] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
При выполнении условий, который я огласил ранее, Ваш запрос будет выглядеть просто: select * from [temp_bud].dbo.Topsheet |
||
23 янв 13, 11:55 [13814229] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
поставил галочку на Cross database ownership chaining на сервере, делаю запрос выше, выдает: The server principal "user_new" is not able to access the database "temp_bud" under the current security context. или я опять что-то не доделал? |
||||
23 янв 13, 12:12 [13814353] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
Угу. |
||
23 янв 13, 12:32 [13814515] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
не подскажите что?)) |
||||
23 янв 13, 12:48 [13814649] Ответить | Цитировать Сообщить модератору |
stavgreengo Member Откуда: Сообщений: 710 |
гостя включи, писали же |
||||
23 янв 13, 12:55 [13814707] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
включил таким образом: USE msdb; GRANT connect TO guest; GO получилось вот что: ![]() при запросе select * from [temp_bud].dbo.Topsheetвыдает такую же ошибку:
|
||||||
23 янв 13, 13:02 [13814790] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
И как это понимать ? USE msdb; GRANT connect TO guest; GO not able to access the database "temp_bud" |
23 янв 13, 13:04 [13814809] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
в смысле? насколько я понимаю, эта команда включает пользователя Guest , который мне выше рекомендовали включить чтобы все заработало не заработало если же вы спрашиваете - существует ли база temp_bud на сервере на данный момент, то ответ - да есть вот такая ссылка там вычитал, сделал как написанно. я не до конца понию весь процесс , поэтому и прошу подсказать либо киньте ссылкой где написано нормально и доходчиво, а то уже кучу сайтов перелопатил, не могу или не вижу того что нужно |
||
23 янв 13, 13:11 [13814858] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Пользователя включаем в базе msdb, а лезем в базуtemp_bud. Логика железная. |
||
23 янв 13, 13:13 [13814890] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
если бы я отлично представлял себе механизм работы, то вопроса как обратится к другой базе не имея прав я бы не задал и к теме разговора: ![]() там где замазано считайте что стоит обсуждаемый нами пользователь user_new нафига тогда мне вообще включать пользователя Guest, если из user_new я не могу это сделать? или может что-то посоветуете? |
||||
23 янв 13, 13:20 [13814960] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
извиняюсь за качество картинки, торопился![]() |
23 янв 13, 13:22 [13814975] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Не понял. Вы хотите еще а и GRANT-ы выполнять в базе, где у вас нет прав ? Самому себе назначить права нельзя. Иначе бы каждый поназначал себе админских прав Сообщение было отредактировано: 23 янв 13, 13:24 |
||
23 янв 13, 13:23 [13814993] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
ну значит все что советовали выше не имеет вообще никакого смысла! я вроде ясно изложил задачу: требуется select в новую базу куда никто не заведен, от пользователя , который может иметь любые права кроме sysadmin! причем условие что это должно происходить от лица этого пользователя, так сказать в автоматическом режиме а не так - зашел под админом, настроил все и после этого все заработало если бы был такой вариант, то я бы просто добавил пользователя в базу temp_bud под ролью dbo_owner и не мучался бы и не изголялся бы))) |
||||
23 янв 13, 13:28 [13815029] Ответить | Цитировать Сообщить модератору |
Glory Member Откуда: Сообщений: 104760 |
Так и непонятно, почему вы тогда включаете guest-а под этим пользователем ? Сделайте job c нужными действиями. Дайте вашему пользователю права на запуск джоба. |
||
23 янв 13, 13:32 [13815059] Ответить | Цитировать Сообщить модератору |
pkarklin Member Откуда: Москва (Муром) Сообщений: 74925 |
И для нее было описано решение. Базу Вы ресторите с какими правами? Вот с этими же и делайте все необходимые манипуляции. |
||
23 янв 13, 13:34 [13815085] Ответить | Цитировать Сообщить модератору |
rigid_joke Member Откуда: Сообщений: 141 |
с правами user_new, у него стоит серверная роль dbcreator насчет запуска джоба идея хорошая, сейчас попробую |
||||
23 янв 13, 13:41 [13815137] Ответить | Цитировать Сообщить модератору |
Топик располагается на нескольких страницах: [1] 2 вперед Ctrl→ все |
Все форумы / Microsoft SQL Server | ![]() |