Existem três abordagens que você pode adotar:
- Faça isso no aplicativo
- Faça isso entre o aplicativo e o banco de dados, dentro de um proxy de banco de dados
- Faça isso dentro do banco de dados
A primeira opção não se qualificaria realmente como controle de acesso em nível de linha, pois a lógica do aplicativo é a responsável pela filtragem/mascaramento. (A filtragem é o controle de acesso em nível de linha, enquanto o mascaramento é em nível de célula).
A segunda opção , usando um proxy, é uma abordagem cada vez mais adotada. Existem soluções dedicadas como:
- GreenSQL
- DDM Informatica e
- Filtro de acesso a dados axiomáticos.
Essas soluções normalmente interceptam o tráfego SQL e o modificam de forma que apenas os dados autorizados sejam retornados. Isso é chamado de mascaramento de dados dinâmico . É explicado um pouco mais em Wikipedia .
A terceira opção é usar os recursos nativos do banco de dados. Por exemplo, a Oracle tem algo chamado Virtual Private Database (VPD) que permite configurar recursos avançados de filtragem de linhas.
No seu caso (MySQL), existe algo chamado controle de acesso refinado (FGAC). Há um ótimo artigo sobre o tópico aqui . Google esse termo para mais recursos.