Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
День добрый!

Не могу справиться с такой задачей:

На сервере MS SQL 2008 R2 есть пользователи подключаемые к одной БД (UserDB) у всех роли и права, схемы, все нормально...
Но требуется некоторым пользователям дать информацию из другой БД (OtherDB)
Создавать в OtherDB этих пользователей - не вариант (по этичным, техническим и прочим причинам...)

Пытался сделать:

1) View, Synonym, Table-Functions - самое удобное, но требуются права на удаленную таблицу
2) Процедура - да, там можно выполнить EXECUTE AS NeedLogin , НО из процедуры очень неудобно селектить дальше
3) Делал VIEW с SELECT * FROM OPENROWSET('SQLOLEDB','';'NeedLogin';'Pass','SELECT * FROM [OtherDB].[dbo].[Table1]')
тут проблема в том что в каждой View зашивается пароль, который если забудется/потеряется и тп повлечет весьма не приятное
4) Думал повесить триггер на OtherDB..Table1 и перегонять:
Drop Table UserDB..Table1;
INSERT INTO UserDB..Table1 FROM Table1

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

Есть ли у кого предложения как еще можно решить данную проблему?

P.S. Я не смог постичь Ownership, если кто может прокомментировать - стоит пользоваться этим, и как!?
24 июл 13, 12:17    [14609486]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
_ч_
Member

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

http://msdn.microsoft.com/ru-ru/library/ms188354.aspx

Вьюхи + Execute AS решит Вашу проблему.
24 июл 13, 12:18    [14609500]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
_ч_
Member

Откуда:
Сообщений: 1430
Wrun
2) Процедура - да, там можно выполнить EXECUTE AS NeedLogin , НО из процедуры очень неудобно селектить дальше

Что Вы имеете в виду под неудобством?
24 июл 13, 12:20    [14609518]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Я имею ввиду что бы можно было с этим объектом работать в стиле:
SELECT * FROM Procedure - на сколько мне известно не получится...
А хочется иметь возможность JOIN и тп...
24 июл 13, 12:25    [14609576]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
_ч_
Вьюхи + Execute AS решит Вашу проблему.


Сколько ни искал не нашел у Вьюх Execute As
24 июл 13, 12:26    [14609589]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
_ч_
Member

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

Нет, я имел в виду завести view для таблиц и execute as для хп, функций. Но тогда придется все равно добавлять пользователей для того, чтобы они могли работать с представлениями.

Есть еще несколько экзотических способов, но не думаю, что так делать правильно.
Можно сделать хп, которая будет делать выборку из таблицы и уже на эту хп повесить Execute AS.

Можно сделать так:
declare @sql varchar(1000); 
set @sql = 'select your_fields from your_view_name;' 
execute (@sql) as user = 'your_user_name'


Т.е. из динамического sql делать выборку из ваших таблиц\представлений под другим пользователем
24 июл 13, 12:44    [14609734]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Сергей Викт.
Member

Откуда: Москва
Сообщений: 888
Wrun
_ч_
Вьюхи + Execute AS решит Вашу проблему.


Сколько ни искал не нашел у Вьюх Execute As

а вьюха это не процедура, чтобы у неё был execute as

<view_attribute> ::= 
{
    [ ENCRYPTION ]
    [ SCHEMABINDING ]
    [ VIEW_METADATA ]     }
24 июл 13, 12:44    [14609737]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wrun
Я не смог постичь Ownership, если кто может прокомментировать - стоит пользоваться этим, и как!?

Стоит.
Так, как описано в хелпе
только это будет уже cross database ownership chain
24 июл 13, 12:47    [14609760]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Гость333
Member

Откуда:
Сообщений: 3683
Wrun
Я не смог постичь Ownership

Ownership chains? А что конкретно не удалось постичь? В хелпе это даже с картинками объяснено.
24 июл 13, 13:14    [14609985]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
_ч_
Wrun,

Нет, я имел в виду завести view для таблиц и execute as для хп, функций. Но тогда придется все равно добавлять пользователей для того, чтобы они могли работать с представлениями.

Есть еще несколько экзотических способов, но не думаю, что так делать правильно.
Можно сделать хп, которая будет делать выборку из таблицы и уже на эту хп повесить Execute AS.

Можно сделать так:
declare @sql varchar(1000); 
set @sql = 'select your_fields from your_view_name;' 
execute (@sql) as user = 'your_user_name'


Т.е. из динамического sql делать выборку из ваших таблиц\представлений под другим пользователем


Можно и так:
execute as user = 'your_user_name'
select your_fields from your_view_name;


и это работает, Но как я уже говорил - работать в дальнейшем с этим объектом - нормально не возможно!
24 июл 13, 13:32    [14610140]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Гость333
Wrun
Я не смог постичь Ownership

Ownership chains? А что конкретно не удалось постичь? В хелпе это даже с картинками объяснено.


Читал что рекомендуется только в крайнем случае - так как нарушается безопасность, но конкретно в чем минус и где вылезет проблема пока для себя не уяснил...
24 июл 13, 13:34    [14610147]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wrun
Читал что рекомендуется только в крайнем случае - так как нарушается безопасность,

Это вы цитируете оффициальный источник или ОБС ?
24 июл 13, 13:34    [14610154]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Было бы очень логично (имхо) если можно было давать права на Синоним, а они бы делегировались на ссылаемый объект... Может я что-то не так пробовал?
24 июл 13, 13:35    [14610165]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory
Wrun
Читал что рекомендуется только в крайнем случае - так как нарушается безопасность,

Это вы цитируете оффициальный источник или ОБС ?


Не официальный!

Я не утверждаю сказанное, просто пока не сложилось полное понимание - есть опаска...
24 июл 13, 13:37    [14610169]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wrun
Не официальный!

Ну так прочитайте оффициальный. Чтобы "сложилось понимание"
24 июл 13, 13:38    [14610180]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
А нет, и в официальном:
автор
Не рекомендуется присваивать параметру cross db ownership chaining значение «1», за исключением ситуаций, когда все базы данных, размещенные в экземпляре SQL Server, должны участвовать в межбазовой цепочке владения и известно влияние цепочек на безопасность.


А базы на сервере увы не 2
24 июл 13, 13:38    [14610182]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wrun
А нет, и в официальном:
автор
Не рекомендуется присваивать параметру cross db ownership chaining значение «1», за исключением ситуаций, когда все базы данных, размещенные в экземпляре SQL Server, должны участвовать в межбазовой цепочке владения и известно влияние цепочек на безопасность.

Это вы "переводите" как " так как нарушается безопасность" ?
24 июл 13, 13:40    [14610189]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
_ч_
Member

Откуда:
Сообщений: 1430
Wrun
Можно и так:
execute as user = 'your_user_name'
select your_fields from your_view_name;


и это работает, Но как я уже говорил - работать в дальнейшем с этим объектом - нормально не возможно!


Т.е.
Wrun
иметь возможность JOIN и тп...
так не работает?
24 июл 13, 13:41    [14610194]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory
Wrun
А нет, и в официальном:
пропущено...

Это вы "переводите" как " так как нарушается безопасность" ?


А как вы трактуете "Не рекомендуется"

НА сколько я понимаю это включается целиком на весь сервер, следовательно из Базы3 можно будет "попадать" в Базу4 ?
24 июл 13, 13:44    [14610211]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Wrun
НА сколько я понимаю это включается целиком на весь сервер, следовательно из Базы3 можно будет "попадать" в Базу4 ?

Люблю теоретиков
По одному слову "не рекомендуется" делается вывод, что все смогут попасть куда угодно.
24 июл 13, 13:46    [14610227]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
_ч_
Wrun
Можно и так:
execute as user = 'your_user_name'
select your_fields from your_view_name;


и это работает, Но как я уже говорил - работать в дальнейшем с этим объектом - нормально не возможно!


Т.е.
Wrun
иметь возможность JOIN и тп...
так не работает?



execute as user = 'OtherDB_User'
select *
from OtherDB..Table1
join UserDB..Table2 ON ...

не получится т.к. у OtherDB_User нет прав на UserDB..Table2 и прочие проблемы, т.е. хочется что бы это был уже конечный Объект, с которым можно оперировать как с View или Таблицей...
24 июл 13, 13:47    [14610232]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory
Wrun
НА сколько я понимаю это включается целиком на весь сервер, следовательно из Базы3 можно будет "попадать" в Базу4 ?

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


Ну к чему эта критика, я сразу сказал что недопонимаю, если есть опыт поделитесь что вкладывается в эти слова ?
24 июл 13, 13:48    [14610240]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
_ч_
Member

Откуда:
Сообщений: 1430
Wrun
_ч_
пропущено...


Т.е. пропущено...
так не работает?



execute as user = 'OtherDB_User'
select *
from OtherDB..Table1
join UserDB..Table2 ON ...

не получится т.к. у OtherDB_User нет прав на UserDB..Table2 и прочие проблемы, т.е. хочется что бы это был уже конечный Объект, с которым можно оперировать как с View или Таблицей...


А кто мешает выдать права 'OtherDB_User' на все объекты из UserDB или на конкретные?
24 июл 13, 13:50    [14610255]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
_ч_
Wrun
пропущено...



execute as user = 'OtherDB_User'
select *
from OtherDB..Table1
join UserDB..Table2 ON ...

не получится т.к. у OtherDB_User нет прав на UserDB..Table2 и прочие проблемы, т.е. хочется что бы это был уже конечный Объект, с которым можно оперировать как с View или Таблицей...


А кто мешает выдать права 'OtherDB_User' на все объекты из UserDB или на конкретные?


Допустим разграничение прав для разных пользователей...
24 июл 13, 14:44    [14610792]     Ответить | Цитировать Сообщить модератору
 Re: Запрос под sa в другую БД  [new]
Wrun
Member [заблокирован]

Откуда:
Сообщений: 126
Glory
Wrun
НА сколько я понимаю это включается целиком на весь сервер, следовательно из Базы3 можно будет "попадать" в Базу4 ?

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


Вроде разобрался - попробовал:
Как только появляется база скажем с другим админом с db_owner то у него появляется доступ к другим базам у кого включен db chaining.
А это уже получается проблема, потому что через год забудется и в легкую кто-то сможет создать базу для какой нибудь задачи с подобными правами...

Вы говорили что не стоит делать выводы по фразам из BOL, но как быть в данной ситуации?
24 июл 13, 16:55    [14612167]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить