Estou tentando ansiosamente projetar a arquitetura de dados multitenant perfeita para meu banco de dados.
Estou me inspirando em um artigo postado pela Microsoft , baseado no cenário 3.
Recebi todas as minhas tabelas uma coluna de inquilino e depois criei uma VIEW correspondente
ALTER TABLE {table_name} add TenantID varbinary(85) DEFAULT SUSER_SID()
CREATE VIEW {view_name}
AS
SELECT *
FROM {table_name}
WHERE TenantID = SUSER_SID()
Cada um dos meus clientes tem sua própria conta de usuário de banco de dados, esses usuários receberam os seguintes direitos:
db_datareader
db_datawriter
public
E então alterei o seguinte:
DENY SELECT ON {table_name} TO {user_name}
GRANT SELECT ON {view_name} TO {user_name}
De qualquer forma, estou perdendo alguma coisa por enquanto? :)
Eu suspeito que é como o SSMS enumera tabelas
No entanto, você não precisa negar. Só não CONCEDA.
A melhor prática seria algo assim
(nunca os uso)
Então, você não precisa NEGAR na tabela porque ela não será verificada de qualquer maneira devido ao " encadeamento de propriedade "
Dito isso, eu também usaria SCHEMAs, então nem exigi GRANT para a exibição. GRANT uma vez ao SCHEMA. Para saber mais, consulte