Мне нужно ограничить доступ для конкретного пользователя, но он все еще должен иметь возможность видеть данные в таблицах, принадлежащих dbo.
Я пытаюсь сделать следующее:
- Схема dbo функционирует как обычно, имеет доступ ко всему
- Схема1 имеет доступ только к объектам схемы1.
- если представление схемы или хранимая процедура обращается к данным в таблицах, принадлежащих dbo, цепочка разрешений соответственно
- user1 имеет доступ к schema1 и больше ничего; за исключением случая № 3
Вот что я попробовал:
- Создайте пользователя user1, сопоставленного с тестовым логином со случайным паролем
- Создал пару таблиц в схеме dbo с некоторыми тестовыми данными в них
- Создана схема schema1
- Создал schema1.get_profiles, который выбирает из представления с именем schema1.profiles, которое обращается к данным в dbo.people, dbo.taglinks и dbo.tags
Тем не менее, используя следующий оператор при входе в систему как user1:
EXEC get_profiles 1
результаты в:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Я пытался WITH EXECUTE AS OWNER
и не могу понять, как «цепочка владения» должна работать.
Я также пытался
GRANT EXECUTE ON SCHEMA::schema1 TO user1
GRANT INSERT ON SCHEMA::schema1 TO user1
GRANT SELECT ON SCHEMA::schema1 TO user1
GRANT UPDATE ON SCHEMA::schema1 TO user1
GRANT VIEW DEFINITION ON SCHEMA::schema1 TO user1
но я получаю следующую ошибку (несмотря на то, что пользователь с уровнем доступа dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Что мне нужно, так это user1, чтобы иметь возможность доступа к данным через хранимые процедуры, которые я им предоставляю, и ничего больше
Кроме того, это в конечном итоге предназначено для использования в существующей базе данных SQL Azure, но сначала я проверяю локальную фиктивную базу данных.