Eu preciso limitar o acesso a um usuário específico, mas eles ainda precisam ver os dados nas tabelas de propriedade do dbo.
Estou tentando fazer o seguinte:
- O esquema dbo funciona normalmente, tem acesso a tudo
- schema1 schema tem acesso apenas a objetos schema1
- se uma visualização do esquema1 ou procedimento armazenado acessar dados em tabelas de propriedade do dbo, a cadeia de permissões apropriadamente
- user1 tem acesso ao schema1 e nada mais; exceto no caso de #3
Aqui está o que eu tentei:
- Crie um usuário user1 mapeado para um login de teste com uma senha aleatória
- Criou algumas tabelas no esquema dbo com alguns dados de teste nelas
- Criado um esquema schema1
- Criou um schema1.get_profiles que seleciona a partir de uma visualização chamada schema1.profiles que acessa dados em dbo.people, dbo.taglinks e dbo.tags
No entanto, usando a seguinte instrução enquanto estiver conectado como user1:
EXEC get_profiles 1
resulta em:
The SELECT permission was denied on the object 'tags', database 'schema_test', schema 'dbo'.
Eu tentei WITH EXECUTE AS OWNER
e não consigo entender como o "encadeamento de propriedade" deve funcionar.
eu também tentei
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
mas recebo o seguinte erro (apesar de ser um usuário com acesso de nível dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
O que eu preciso é que o usuário1 possa acessar os dados por meio dos procedimentos armazenados que eu forneço, e nada mais.
Além disso, isso se destina a eventualmente residir em um banco de dados SQL Azure existente, mas estou testando primeiro em um banco de dados fictício local.