Мені потрібно обмежити доступ до конкретного користувача, але вони все ще повинні мати можливість бачити дані в таблицях, що належать dbo.
Я намагаюся зробити наступне:
- dbo-схема функціонує як завжди, має доступ до всього
- Схема schema1 має доступ лише до об'єктів schema1
- якщо перегляд schema1 або збережена процедура отримує доступ до даних у таблицях, що належать dbo, ланцюги дозволів належним чином
- user1 має доступ до schema1, і більше нічого; за винятком №3
Ось що я спробував:
- Створіть user1 користувача, відображеного на тестовий логін із випадковим паролем
- Створив кілька таблиць на схемі dbo з деякими тестовими даними в них
- Створено схему схеми1
- Створено 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
але я отримую таку помилку (незважаючи на те, що я користувач з добовим рівнем доступу):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
Що мені потрібно - це користувач1, щоб мати доступ до даних за допомогою збережених процедур, які я їм надаю, і нічого іншого.
Крім того, це покликане врешті-решт жити на існуючій базі даних SQL Azure, але я спочатку тестую локальну базу даних.