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

Откуда:
Сообщений: 145
Такой вопрос:

SQL 2005
Есть база db1 и db2. В базе db1 есть табл t1.

Создаю в базе db2 view v1, которая берет данные из db1:
create view v1 as
select * from db1.dbo.t1

Создаю логин в SQL для доменного экаунта domain\user1
Даю ему роль public для базы db2, в базе db2 даю права для domain\user1 на SELECT из вьюхи v1.
На базу db1 прав не даю.

Затем в QA от пользователя domain\user1 запускаю select * from v1 в базе db2

Выдает сообщение:
The server principal "domain\user1" is not able to access the database "db1" under the current security context.

Хотелось бы сделать так, чтобы не давая прав пользователю domain\user1 на таблицу t1 в базе db1 использовать вьюху v1 в базе db2 т.е. получать данные из этой вьюхи.

Такое возможно? Если нет, подскажите пож.каким путем пойти.
Спасибо.
14 окт 09, 16:30    [7786099]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
BOL->cross-database ownership chaining
14 окт 09, 16:36    [7786166]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
сделал
alter database db2 set DB_CHAINING ON

Не помогло.
14 окт 09, 16:39    [7786190]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
сделал
alter database db2 set DB_CHAINING ON

Не помогло.

А это не все, что необходимо
14 окт 09, 16:41    [7786206]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
Серверная опция cross db ownership chaining должна быть в 1. Владельцами баз должен быть один и тот же логин. В бд db1 должеy быть пользователь Guest.

Сообщение было отредактировано: 14 окт 09, 16:45
14 окт 09, 16:44    [7786232]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
1234567
Member

Откуда:
Сообщений: 704
pkarklin
BOL->cross-database ownership chaining


Если 2005-й, то можно ещё покурить опцию базы trustworthy.
14 окт 09, 16:47    [7786253]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Ramin Hashimzade
Member

Откуда: Азербайджан, Баку
Сообщений: 9979
Блог
GRANT SELECT ON ... TO ...;
14 окт 09, 16:47    [7786256]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
pkarklin
Серверная опция cross db ownership chaining должна быть в 1. Владельцами баз должен быть один и тот же логин. В бд db1 должеy быть пользователь Guest.


Сделал
alter database db1 set DB_CHAINING ON
alter database db2 set DB_CHAINING ON

alter database db2 set TRUSTWORTHY ON
alter database db1 set TRUSTWORTHY ON

А зачем еще cross db ownership chaining устанавливать в 1? Это ведь для всего сервера будет действовать? Как я понял из БОЛ - достаточно для баз установить set DB_CHAINING ON.

Владельцами обоих баз является sa. В обоих базах есть юзер Guest, но он с такой красной стрелочкой. Как я понял это из-за того, что в SQL логинах этот пользователь удален в целях безопасности.

Пока select * from v1 выдает по-прежнему ту же ошибку (

Glory
vdv
сделал
alter database db2 set DB_CHAINING ON

Не помогло.

А это не все, что необходимо


Glory, а что еще необходимо?
14 окт 09, 17:13    [7786495]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
Сделал:

exec sp_configure 'cross db ownership chaining',1
RECONFIGURE WITH OVERRIDE
GO

Все равно не помогло.
14 окт 09, 17:23    [7786585]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
автор
В обоих базах есть юзер Guest, но он с такой красной стрелочкой.


Этому полльзователю запрешен доступ. Уберите эту красную стредлочку.
14 окт 09, 17:34    [7786686]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
pkarklin
[quot автор]Этому полльзователю запрешен доступ. Уберите эту красную стредлочку.


Создал sql login "Guest" и ЗАРАБОТАЛО!!!!
select * from v1 выдает данные!!!.

А можно как-то вместо "Guest" использовать sa или domain\user1?

Не хочется оставлять логин "Guest" только для этого.
14 окт 09, 17:48    [7786792]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
pkarklin
[quot автор]Этому полльзователю запрешен доступ. Уберите эту красную стредлочку.


Создал sql login "Guest" и ЗАРАБОТАЛО!!!!
select * from v1 выдает данные!!!.

А можно как-то вместо "Guest" использовать sa или domain\user1?

Не хочется оставлять логин "Guest" только для этого.

Не надо создавать никаких логинов !
Нужно разрешить пользователя(!) guest в нужных базах
14 окт 09, 17:52    [7786820]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
Как разрешить? Какие действия сделать, чтобы эта красная стрелочка убралась?
14 окт 09, 18:05    [7786909]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
GRANT CONNECT TO guest;
14 окт 09, 18:06    [7786914]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
Удалил sql логин Guest. Пользователи guest в базах данных db1 и db2 теперь без красных стрелок.

Работает!!! и без логина Guest.
А почему он такой особенный, что через него это работает? Почему например нельзя использовать dbo т.к. он тоже есть во всех базах.
14 окт 09, 18:11    [7786935]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
Удалил sql логин Guest. Пользователи guest в базах данных db1 и db2 теперь без красных стрелок.

Работает!!! и без логина Guest.
А почему он такой особенный, что через него это работает? Почему например нельзя использовать dbo т.к. он тоже есть во всех базах.

Потому что солнце всходит на востоке, а садится на западе
14 окт 09, 18:12    [7786943]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
pkarklin
Member

Откуда: Москва (Муром)
Сообщений: 74927
vdv
А почему он такой особенный, что через него это работает? Почему например нельзя использовать dbo т.к. он тоже есть во всех базах.


Подключившись к серверу с помощью логина получить доступ к бд можно или в случае явного предоставления доступа к бд (читай создание для него пользователя в бд) конкретному логину или через пользователя Guest.
14 окт 09, 20:29    [7787429]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
Такой вариант (DB_CHAINING) не подошел т.к. если view берет данные из нескольких баз (например db1 и db3) с включенными пользователями guest, тогда получается, что пользователь базы db1 получает доступ к данным базы db3 через пользвателя guest. А это нарушает безовасность.
Поэтому сделал через функцию с опцией with EXECUTE as OWNER, которая берет данные из баз db1 и db3 и возвращает в виде таблицы.
А вью уже вызвает функцию select * from f1(). Еще нужно чтобы овнер баз был один и тот же и поставить SET TRUSTWORTHY ON для базы db2 (в которой вью находится).

При таком варианте пользвателей guest не нужно включать (DB_CHAINING ON тоже не нужно ставить) и безопасность не нарушается.
16 окт 09, 15:22    [7797626]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
Такой вариант (DB_CHAINING) не подошел т.к. если view берет данные из нескольких баз (например db1 и db3) с включенными пользователями guest, тогда получается, что пользователь базы db1 получает доступ к данным базы db3 через пользвателя guest. А это нарушает безовасность.

А что у вас пользователь guest супер-правами в базе обладает ?
16 окт 09, 15:25    [7797640]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
А как посмотреть права Guest детально?
Я пока только вижу что, что если я делаю GRANT CONNECT TO guest в базе db3, то после этого пользователь базы db1 может открыть в SQL Studio таблицы базы db3. Я думаю паблик у Guest есть, хотя явно в свойствах пользователя это не видно т.е. он не принадлежит ни к одной роли или схеме. Логин Guest был удален еще давно. А вот пользователей guest в базах SQL удалить не дает.
16 окт 09, 15:39    [7797743]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
У пользователя guest default schema: guest.
А права этой схемы как посмотреть?
16 окт 09, 15:46    [7797818]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
А как посмотреть права Guest детально?
Я пока только вижу что, что если я делаю GRANT CONNECT TO guest в базе db3, то после этого пользователь базы db1 может открыть в SQL Studio таблицы базы db3. Я думаю паблик у Guest есть, хотя явно в свойствах пользователя это не видно т.е. он не принадлежит ни к одной роли или схеме. Логин Guest был удален еще давно. А вот пользователей guest в базах SQL удалить не дает.

- public есть у всех и всегда
- fn_my_permissions
- Логин Guest к пользоветелю Guest никакого отношения не имеет
16 окт 09, 15:46    [7797822]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
Посмотрел.
В базах db1 и db3 роль public обладает не супер-правами, но select insert delete update имеет. Все пользватели в этих базах работают через эту роль Public.
А тут получается, что через Guest (если он имеет роль Public) пользователи базы db1 получили доступ в базу db3.
16 окт 09, 15:59    [7797911]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
Glory
Member

Откуда:
Сообщений: 104760
vdv
Посмотрел.
В базах db1 и db3 роль public обладает не супер-правами, но select insert delete update имеет. Все пользватели в этих базах работают через эту роль Public.

Интересное решение однако
16 окт 09, 16:01    [7797921]     Ответить | Цитировать Сообщить модератору
 Re: доступ к View  [new]
vdv
Member

Откуда:
Сообщений: 145
А какой командой посмотреть что пользователь guest имеет роль public?
16 окт 09, 16:03    [7797939]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить