Eu sou muito verde para a segurança do SQL, então talvez alguém possa me ajudar. Temos um aplicativo de banco de dados que, quando instalado, concede por padrão o acesso à função pública a todas as tabelas no banco de dados. Quando você cria um usuário SQL, ele adiciona o usuário à função pública, para que novos usuários tenham acesso a todas as tabelas.
Precisamos conectar aplicativos ODBC de terceiros ao banco de dados. Criamos uma visualização que puxa de tabelas dentro do mesmo banco de dados e queremos que a conexão tenha acesso apenas às visualizações criadas. Em vez de tentar remover a função pública de todas as tabelas, decidimos usar esquemas para aplicar segurança.
Todas as tabelas padrão estão em SCHEMA1
. Colocamos o VIEW
em SCHEMA2
, e criamos USERA
negando SELECT
a SCHEMA1
, e concedemos SELECT
a SCHEMA2
. Ambos SCHEMAS
têm o mesmo proprietário.
Quando eu testo o ODBC usando o Access e tento abrir o VIEW
, recebo o seguinte erro
The SELECT permission was denied on the object (table name in SCHEMA1)....
Suponho que é porque neguei SELECT
a SCHEMA1
, que contém as tabelas referenciadas para o VIEW
. Se for esse o caso, como você restringiria o acesso a apenas tabelas específicas por meio do ODBC?
Depois que postei isso, comecei a pesquisar um pouco mais sobre como revogar as permissões de função pública do esquema como uma opção possível, mas não testou, mas também deparei com a 'função de aplicativo'. Eu ainda preciso ler um pouco mais, mas me pergunto se essa é a direção que eu deveria seguir.