Suponha que eu tenha a seguinte tabela (no esquema 'SchemaX'):
CREATE TABLE [SchemaX].[myTable]...
E a visualização a seguir, baseada na tabela anterior, mas em um esquema diferente ('SchemaY) :
CREATE VIEW [SchemaY].[myView] AS
SELECT * FROM [SchemaX].[myTable]
WHERE ...
Eu dou permissão a um determinado usuário para ler a exibição:
GRANT SELECT ON OBJECT::[SchemaY].[myView] TO [myUser]
Mas ele ainda não consegue lê-lo e recebe o seguinte erro:
A permissão SELECT foi negada no objeto 'myView', esquema 'SchemaY'
Se eu colocar a view no mesmo esquema da tabela, a query funcionará.
Você pode explicar por que está funcionando quando ambos estão no mesmo esquema e por que não está quando estão em esquemas separados?
EDIT: Acontece que meus esquemas tinham proprietários diferentes.
Encontrei este artigo que explica por que não funciona quando os proprietários de esquemas não são os mesmos: https://www.itprotoday.com/sql-server/security-through-ownership-chains
Talvez os esquemas tenham proprietários diferentes? Dê uma olhada nisso: SQL Server - Como conceder permissão SELECT em View que acessam dados em esquemas de diferentes proprietários?
Você tem que conceder privilégio de uso a ambos. Tabela no SchemaX e visualização no SchemaY.
Se você deseja gerenciar permissões por linhas, adicione uma coluna 'user' ou 'role' e adicione essa condição a where CURRENT_USER = table.user .