Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

mysql- Como aplicar concessões à coluna?


Não tenho certeza se estou entendendo a pergunta corretamente, mas parece estar solicitando a capacidade de restringir a pessoa selecionando dados da tabela Persons para que ela não possa ver o valor na coluna Secret, mas deve ser permitida para usar a coluna Secret no interior da consulta (na cláusula WHERE, etc).
CREATE TABLE Person
(
    Id      ...,
    Secret  ...,
    ...
);
REVOKE ALL ON Person FROM PUBLIC;
GRANT SELECT(id) ON Person TO SomeOne;

Então, se minha interpretação estiver correta, quando Alguém seleciona dados:
SELECT Id     FROM Person;    -- Works (as required)
SELECT Secret FROM Person;    -- Fails (as required)
SELECT Id
  FROM Person
 WHERE Secret = 1;            -- Fails (but we want it to work)

O SQL não permite isso, e por boas razões. Basicamente, se você puder condicionar os resultados da consulta em Secret, poderá determinar o valor de Secret com consultas repetidas, para que o que deveria ser secreto não permaneça secreto. É muito fácil vazar informações.

Observando a consulta que falha, mas "não deveria"... a partir de seus resultados, você sabe que cada Id retornado tem o valor Secret de 1, portanto, para esses valores de Id, o Secret não é mais secreto.

Se você olhar para Bancos de Dados Estatísticos, onde você só pode pesquisar em dados agregados, você descobrirá que existem coisas chamadas Rastreadores Únicos que basicamente permitem que você identifique as características de uma pessoa, mesmo que você só tenha permissão para ver dados agregados ( SUM, COUNT, ...) nos conjuntos de resultados. Este é um cenário mais complexo do que você está enfrentando (mas fascinante). C J Date's (há muito esgotado) "Introdução aos sistemas de banco de dados, Vol II" tem uma discussão sobre Banco de Dados Estatístico e Rastreadores Exclusivos. (A pesquisa do Google em 'rastreador exclusivo do banco de dados estatístico' revela informações úteis e mais acessíveis.)

Então, se entendi o que se deseja, acredito que o desejo é equivocado — e o padrão SQL não permite o que se busca.

Existem soluções alternativas?

Se a consulta puder ser incorporada a uma exibição, a pessoa que a criar poderá acessar os dados de detalhes subjacentes e conceder acesso à exibição, mas as pessoas que estiverem usando a exibição não poderão executar a consulta bruta; isso pode lhe dar a proteção que você procura. Comentários semelhantes se aplicam a procedimentos armazenados e permitem que a consulta seja melhor parametrizada.