Preciso limitar o acesso a um usuário específico, mas ele ainda precisa ver os dados nas tabelas pertencentes ao dbo.
Estou tentando fazer o seguinte:
- esquema dbo funciona como normalmente, tem acesso a tudo
- schema1 schema tem acesso apenas aos objetos schema1
- se uma exibição de esquema1 ou procedimento armazenado acessar dados em tabelas pertencentes ao dbo, a cadeia de permissões adequadamente
- o usuário1 tem acesso ao esquema1 e nada mais; exceto no caso de # 3
Aqui está o que eu tentei:
- Crie um usuário user1 mapeado para um logon de teste com uma senha aleatória
- Criou algumas tabelas no esquema dbo com alguns dados de teste
- Criou um esquema schema1
- Criou um schema1.get_profiles que seleciona 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 logado como usuário1:
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 começar a 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 no nível dbo):
Cannot grant, deny, or revoke permissions to sa, dbo, entity owner, information_schema, sys, or yourself.
O que eu preciso é do usuário1 para poder acessar os dados através dos procedimentos armazenados que eu forneço, e nada mais.
Além disso, pretende-se, eventualmente, viver em um banco de dados existente do SQL Azure, mas estou testando primeiro um banco de dados fictício local.