Conceder permissões no nível da tabela
Você pode criar um usuário com permissões de nível de tabela no MySQL executando o seguinte:
-
Conecte-se ao MySQL como usuário com Create_user_priv e Grant_priv. Determine quais usuários têm esses privilégios executando a consulta a seguir. Seu usuário já precisará do privilégio SELECT no MySQL.user para executar a consulta.
SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
-
Execute a consulta a seguir para gerar as instruções GRANT para seu usuário restrito. Substitua 'mydatabase', 'myuser' e 'myhost' por informações específicas para seu banco de dados.
Observe que as aspas em torno de myuser e mypassword são duas aspas simples, não duplas. Os caracteres ao redor de myhost e ,TABLE_NAME, são backticks (a tecla está localizada sob a tecla de escape do seu teclado).
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'mydatabase';
Por exemplo, se você quisesse conectar o usuário ‘chartio_read_only’ ao seu banco de dados ‘Reports’ usando o cliente chartio_connect, você executaria o seguinte:
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Reports';
Se você quisesse conectar o usuário 'chartio_direct_connect' ao seu banco de dados 'Analytics' usando uma conexão direta dos servidores do Chartio, você executaria o seguinte:
SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Analytics.`', TABLE_NAME, '` to ''chartio_direct_connect''@`52.6.1.1`;') FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = 'Analytics';
-
A consulta deve resultar semelhante ao seguinte:
GRANT SELECT, SHOW VIEW ON mydatabase.`Activity` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Marketing` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Operations` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Payments` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Plans` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Services` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Subscriptions` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
Selecione as instruções apenas para as tabelas às quais você deseja conceder acesso e execute essas consultas. Por exemplo, se quiséssemos apenas conceder acesso à tabela Usuários e Visitantes, executaríamos:
GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`; GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
-
Dê ao usuário uma senha segura.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
ou
SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
Agora você pode acessar seu banco de dados com segurança com este usuário e ter certeza de que ele só tem permissões para as tabelas especificadas.
Conceder permissões no nível da coluna
O procedimento para conceder permissões em nível de coluna em uma tabela específica é muito semelhante a conceder permissões em nível de tabela.
-
Gere as instruções GRANT para permissões no nível da coluna usando a seguinte consulta:
SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'mydatabase' AND TABLE_NAME = 'mytable';
Por exemplo, se você quiser conectar o usuário 'chartio_read_only' a colunas específicas na tabela 'Usuários' do banco de dados 'Relatórios' usando o cliente chartio_connect, execute o seguinte:
SELECTCONCAT('GRANT SELECT (`', COLUMN_NAME, '`), SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;') FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'Reports' AND TABLE_NAME = 'Users';
-
A consulta deve resultar em algo semelhante ao seguinte:
GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Campaign_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Created_Date`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`City`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`State`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Zip`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Phone_Number`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Credit_Card`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
-
Selecione apenas as instruções para as colunas às quais você deseja conceder acesso e execute essas consultas. Por exemplo, se quiséssemos apenas conceder acesso às colunas ‘User_ID’ e ‘Company’, executaríamos:
GRANT SELECT (`User_ID`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`; GRANT SELECT (`Company`), SHOW VIEW ON Reports.`Users` to 'chartio_read_only'@`localhost`;
-
Dê ao usuário uma senha segura.
SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
Para mais informações consulte a documentação do MySQL.