Я создаю мультитенантное приложение, которое будет использовать одну базу данных с несколькими схемами. У каждого арендатора будет свой логин / пароль. Мне удалось ограничить права просмотра определенной схемой.
Единственная проблема, с которой я постоянно сталкиваюсь, - это обновление схем. В настоящее время у меня есть вход в систему с кодом C # с использованием правильных учетных данных схемы, а затем я запускаю код SQL всякий раз, когда я хочу обновить определенную (или все) схемы.
Сначала я попытался изменить таблицу, но потом понял, что у меня недостаточно прав. Поэтому я снова настроил разрешения. Теперь я пытаюсь добавить полнотекстовую индексацию для всех схем, и это говорит мне, что у меня нет разрешений.
Мой вопрос прост: как я могу определить права пользователя как the database owner for a specific schema
так что у меня не будет проблем с любым скриптом, который запускается в базе данных.
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
предоставит все разрешения применимо к схемам и содержащим схемы объектам. Однако он не предоставляет никаких разрешений, применимых к объектам, не относящимся к схеме. В данном случае это не относится к полнотекстовым каталогам, которые не привязанные к схеме объекты (вы не указываете схему при создании каталога FT) и которые требуют специальных CREATE FULLTEXT CATALOG
разрешение.
В вашем случае вам необходимо просмотреть всю свою модель безопасности и решить, какие разрешения и действия требуются / разрешены вашим клиентам. Не существует простого универсального ответа. Если вы предоставите своим арендаторам свободу действовать как полный db_owner, вы должны предоставить им настоящую базу данных. Вы не сможете проникнуть в схему и притвориться базой данных. Модель безопасности SQL просто не работает, и вам лучше подыгрывать, чем пытаться обойти ее.
Я не думаю, что это возможно. Если это dbo, то они могут делать с этой базой все необходимое. Если они не dbo, они ограничены. Владелец базы данных означает именно это - владельца этой базы данных.