Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Почему возникает ошибка The server principal is not able to access?  [new]
uaggster
Member

Откуда:
Сообщений: 827
Есть 2 базы на одном сервере.
Владельцем обеих баз является sa.
В первой базе определен sql-пользователь transferter.
Кроме того, в первой базе определен view, который обращается к нескольким таблицам второй базы.
Грант на select пользователю из view пытаюсь дать командой:
GRANT REFERENCES ON [load].[operations0x00] TO [transferter]
GO
GRANT SELECT ON [load].[operations0x00] TO [transferter]
GO

В обеих базах cross database ownership chaining = true и trustworthy = true
Во второй базе пользователя [transferter] - нет.

При попытке сделать select * from [load].[operations0x00] под пользователем transferter получаю ошибку:
The server principal "transferter" is not able to access the database "db0x00" under the current security context.

Как сделать, чтобы заработало?
Еще раз повторю, что пользователь transferter во второй базе отсутствует, и по смыслу от там не нужен. Можно обойтись без его создания?
Точнее КАК обойтись без создания этого пользователя во второй базе?

Microsoft SQL Server 2014 (SP2-CU8) (KB4037356) - 12.0.5557.0 (X64)
Oct 3 2017 14:56:10
Copyright (c) Microsoft Corporation
28 дек 17, 16:41    [21070305]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Ролг Хупин
Member

Откуда: Чебаркуль
Сообщений: 3708
автор
Во второй базе пользователя [transferter] - нет.

При попытке сделать select * from [load].[operations0x00] под пользователем transferter получаю ошибку:
The server principal "transferter" is not able to access the database "db0x00" under the current security context.


в какой базе?
28 дек 17, 16:55    [21070353]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 36970
uaggster
Еще раз повторю, что пользователь transferter во второй базе отсутствует, и по смыслу от там не нужен. Можно обойтись без его создания?
grant connect to guest во второй базе. Это если cross-database ownership chaining настроен правильно.
28 дек 17, 17:10    [21070405]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
не надо жмотиться, отмапьте нужного юзера во вторую базу.
этим вы ему прав не прибавите,
зато заработает ownership chaining, т.е. товарищ сможет читать из второй базы,
но только через вью из первой.

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

а TRUSTWORTHY с базы снимите, оно вам вообще не нужно.
оно позволяет выпрыгнуть из базы,
т.е. если кто-то имперсонэйтит **юзера**, то с овнером базы sa
он обретает права того **логина**, что соответствует юзеру.

соответственно, если кто-то имперсонэйтит юзера transferter,
он становится логином transferter, но логин во вторую базу не отмаплен -> не добились вы ничего.
зато если теперь имерсонэйтить в этой базе dbo,
то станешь sa.
со всеми вытекающими
28 дек 17, 17:26    [21070443]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
Ролг Хупин
автор
Во второй базе пользователя [transferter] - нет.

При попытке сделать select * from [load].[operations0x00] под пользователем transferter получаю ошибку:
The server principal "transferter" is not able to access the database "db0x00" under the current security context.


в какой базе?

вьюха [load].[operations0x00] в базе1 (ее имя нигде в посте не фигурирует).
а базовая таблица для вьюхи в базе db0x00.
так вот в базе1 есть и юзер, и права на вью.
во второй (db0x00) юзера нет, поэтому и ошибка The server principal "transferter" is not able...
28 дек 17, 18:32    [21070577]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
uaggster
Member

Откуда:
Сообщений: 827
Yasha123
не надо жмотиться, отмапьте нужного юзера во вторую базу.
этим вы ему прав не прибавите,
зато заработает ownership chaining, т.е. товарищ сможет читать из второй базы,
но только через вью из первой.

Проблема в том, что вторая база - это вторичная база логшиппинга в состоянии standby/read only.
И таких баз - 4 с лишним десятка.
а TRUSTWORTHY с базы снимите, оно вам вообще не нужно.
оно позволяет выпрыгнуть из базы,
т.е. если кто-то имперсонэйтит **юзера**, то с овнером базы sa
он обретает права того **логина**, что соответствует юзеру.

соответственно, если кто-то имперсонэйтит юзера transferter,
он становится логином transferter, но логин во вторую базу не отмаплен -> не добились вы ничего.
зато если теперь имерсонэйтить в этой базе dbo,
то станешь sa.
со всеми вытекающими

Да, наверное нужно так сделать.
Первичные базы TRUSTWORTHY на своих серверах по другим причинам, наверное, на вторичном сервере сделали эти базы TRUSTWORTHY по инерции.

Т.е., получается, придется на 40 серверах создать пользователя, причем, с одинаковым сид, отмапить его в базу, и подождать, когда восстановятся логи?
Замечательно.
Я так понимаю, если завернуть в первой базе вызов из view в хранимую процедуру, где указать with execute as owner - всё заработает.
... но оно не подходит, т.к. нужно читать именно из view.
Может, есть еще мысли?
Ну, кроме разрешения анонимного логина к базе?
28 дек 17, 22:54    [21071153]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
uaggster,
Вы ж только сейчас описали проблему целиком.
А inline function не подойдёт?
29 дек 17, 00:11    [21071367]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
Yasha123
Member

Откуда:
Сообщений: 1833
пардон, не inline, а multistatement,
в инлайновой нет execute as
29 дек 17, 08:53    [21071679]     Ответить | Цитировать Сообщить модератору
 Re: Почему возникает ошибка The server principal is not able to access?  [new]
uaggster
Member

Откуда:
Сообщений: 827
Yasha123
пардон, не inline, а multistatement,
в инлайновой нет execute as

Я так понимаю, что производительность при этом - пойдет лесом?
30 дек 17, 12:08    [21074385]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить