
Estou criando um aplicativo multilocatário que utilizará um único banco de dados com vários esquemas. Cada locatário terá seu respectivo login/senha. Consegui restringir as permissões de visualização a um esquema específico.
O único problema que encontro é ao atualizar esquemas. Atualmente, tenho meu login de código C # usando as credenciais de esquema adequadas e, em seguida, executo o código SQL sempre que desejo atualizar um esquema específico (ou todos).
A princípio tentei alterar a tabela e depois percebi que não tinha permissões suficientes. Então ajustei as permissões novamente. Agora, estou tentando adicionar indexação de texto completo em todos os esquemas e isso me diz que não tenho permissões.
Minha pergunta é simples, como posso definir as permissões de um usuário para the database owner for a specific schema
não ter problemas com nenhum script executado no banco de dados.
Responder1
GRANT CONTROL ON SCHEMA::<schemaname> TO <username>;
concederá todas as permissõesaplicável a esquemas e objetos contidos em esquema. No entanto, não concederá nenhuma permissão aplicável a objetos que não sejam do esquema. Neste caso, não se aplica a catálogos de texto completo, que sãonãoobjetos vinculados ao esquema (você não especifica um esquema ao criar um catálogo FT) e que requerem CREATE FULLTEXT CATALOG
permissão especial.
No seu caso, você deve revisar todo o seu modelo de segurança e decidir quais permissões e ações são necessárias/permitidas aos seus locatários. Não existe uma resposta fácil e única para todos. Se você conceder aos seus inquilinos a liberdade de agir como um db_owner completo, deverá conceder a eles um banco de dados verdadeiro. Você não poderá entrar furtivamente em um esquema e fingir que é um banco de dados. O modelo de segurança SQL simplesmente não funciona assim, e é melhor você seguir em frente em vez de tentar contorná-lo.
Responder2
Eu não acho que seja possível. Se forem dbo, poderão fazer qualquer coisa necessária nesse banco de dados. Se não forem dbo, serão limitados. Proprietário do banco de dados significa exatamente isso – o proprietário desse banco de dados.