Пользователю было отказано в выборе таблицы, но он имеет доступ к таблице через синоним - PullRequest
1 голос
/ 19 июня 2020

Пользователю было отказано в выборе таблицы T1 в DB1, но пользователь может создать синоним в DB2 и выбрать из DB1.TB1. Я не могу отказать пользователю в создании синонимов. Можно ли запретить пользователю выбирать после создания синонимов для DB1.TB1?

use d2
create synonym dbo.cl for d1.dbo.cl
select top 100 * from dbo.cl
(100 rows affected)

select top 100 * from d1.dbo.cl
The SELECT permission was denied on the object 'cl', database 'd1', schema 'dbo'.

Пользователь имеет db_owner через группу AD в d2

1 Ответ

2 голосов
/ 20 июня 2020

Это из-за функции «цепочки владения» в SQL Server. Это означает, что если один объект (в вашем случае синоним) вызывает другой объект (в вашем случае таблицу), он проверяет, совпадает ли владелец объектов. Если владелец обоих объектов один и тот же, то доступ к вызываемым объектам (то есть к вашей таблице) не проверяется.

Благодаря этой функции, например, пользователи могут иметь доступ к представлению, не имея доступа к базовым таблицам.

Обычно эта цепочка владения не включена по умолчанию для разных баз данных. Так что проверьте, относится ли это к вашему случаю. Он может быть предоставлен на уровне базы данных:

SELECT is_db_chaining_on, name FROM sys.databases;

Или он может быть предоставлен на уровне сервера для всех баз данных:

EXECUTE sp_configure 'show advanced', 1;  
RECONFIGURE;  
EXECUTE sp_configure 'cross db ownership chaining';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...