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

Conceder permissões de tabela e coluna do MySQL

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:

  1. 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';
    

  2. 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';
    

  3. 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`;
    

  4. 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`;
    

  5. 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.

  1. 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';
    

  2. 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`;
    

  3. 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`;
    

  4. 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.