ti-enxame.com

Conceda ao usuário acesso a um número limitado de tabelas no MySQL

Estou executando alguns testes e estou tentando ver se consigo criar um usuário com acesso a apenas 1 ou 2 tabelas no meu banco de dados. Alguém sabe como isso é feito? Meu código abaixo falha:

GRANT SELECT ON testdb.fruits, testdb.sports TO [email protected] IDENTIFIED BY 'pass';

O erro diz que tenho um erro na minha sintaxe.

34
enchance

Execute-os como duas instruções GRANT individuais:

GRANT SELECT ON testdb.fruits TO [email protected] IDENTIFIED BY 'pass';
GRANT SELECT ON testdb.sports TO [email protected] IDENTIFIED BY 'pass';

A sintaxe MySQL GRANT permite apenas um objeto no priv_level position :, embora possa usar um * como curinga:

GRANT
    priv_type [(column_list)]
      [, priv_type [(column_list)]] ...
    ON [object_type] priv_level
    TO user_specification [, user_specification] ...
    [REQUIRE {NONE | ssl_option [[AND] ssl_option] ...}]
    [WITH with_option ...]

object_type:
    TABLE
  | FUNCTION
  | PROCEDURE

priv_level:
    *
  | *.*
  | db_name.*
  | db_name.tbl_name
  | tbl_name
  | db_name.routine_name

A parte abaixo não parece funcionar no MySQL 5.5 . Como "subtrair" privilégios no MySQL aborda o porquê.

Para conceder SELECT em todas as tabelas e depois revogar seletivamente, você pode:

GRANT SELECT ON testdb.* TO [email protected] IDENTIFIED BY 'pass';
REVOKE ALL PRIVILEGES ON testdb.tblname FROM [email protected];

Porém, esse parece ser um método estranho, e eu acho que CONCORDO individualmente e não individualmente.

56
Michael Berkowski

Você pode usar a tabela mysql.tables_priv diretamente:

INSERT INTO mysql.tables_priv (`Host`, `Db`, `User`, `Table_name`, `Grantor`, `Table_priv`)
VALUES
('%', DATABASE(), 'someuser', 'mytable1', CURRENT_USER, 'Select,Insert,Update,Delete'),
('%', DATABASE(), 'someuser', 'mytable2', CURRENT_USER, 'Select,Insert,Update,Delete')

Após uma atualização manual dessas tabelas, você precisará executar explicitamente FLUSH PRIVILEGES consulta para informar ao MySQL para atualizar seu cache de permissões (não é necessário ao usar GRANT)

3
Kip