Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Gewähren Sie MySQL-Tabellen- und -Spaltenberechtigungen

Erteilen von Berechtigungen auf Tabellenebene

Sie können einen Benutzer mit Berechtigungen auf Tabellenebene in MySQL erstellen, indem Sie Folgendes ausführen:

  1. Verbinden Sie sich mit MySQL als Benutzer mit Create_user_priv und Grant_priv. Bestimmen Sie, welche Benutzer diese Berechtigungen haben, indem Sie die folgende Abfrage ausführen. Ihr Benutzer benötigt bereits das SELECT-Privileg für MySQL.user, um die Abfrage auszuführen.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Führen Sie die folgende Abfrage aus, um die GRANT-Anweisungen für Ihren eingeschränkten Benutzer zu generieren. Ersetzen Sie „mydatabase“, „myuser“ und „myhost“ durch spezifische Informationen für Ihre Datenbank.

    Beachten Sie, dass die Anführungszeichen um myuser und mypassword zwei einfache Anführungszeichen sind, keine doppelten. Die Zeichen um myhost und ,TABLE_NAME sind Backticks (die Taste befindet sich unter der Escape-Taste auf Ihrer Tastatur).

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON mydatabase.`', TABLE_NAME, '` to ''myuser''@`myhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'mydatabase';
    

    Wenn Sie beispielsweise den Benutzer „chartio_read_only“ mithilfe des chartio_connect-Clients mit Ihrer „Reports“-Datenbank verbinden möchten, führen Sie Folgendes aus:

    SELECT CONCAT('GRANT SELECT, SHOW VIEW ON Reports.`', TABLE_NAME, '` to ''chartio_read_only''@`localhost`;')
    FROM INFORMATION_SCHEMA.TABLES
    WHERE TABLE_SCHEMA = 'Reports';
    

    Wenn Sie den Benutzer „chartio_direct_connect“ über eine direkte Verbindung von den Servern von Chartio mit Ihrer „Analytics“-Datenbank verbinden möchten, führen Sie Folgendes aus:

    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. Die Abfrage sollte in etwa so aussehen:

    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. Wählen Sie die Anweisungen nur für die Tabellen aus, auf die Sie Zugriff gewähren möchten, und führen Sie diese Abfragen aus. Wenn wir zum Beispiel nur Zugriff auf die Benutzer- und Besuchertabelle gewähren wollten, würden wir Folgendes ausführen:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Geben Sie dem Benutzer ein sicheres Passwort.

    SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
    

    oder

    SET PASSWORD FOR 'chartio_direct_connect'@`52.6.1.1` = PASSWORD('top$secret');
    

Jetzt können Sie mit diesem Benutzer sicher auf Ihre Datenbank zugreifen und sicher sein, dass er nur Berechtigungen für die angegebenen Tabellen hat.

Erteilen von Berechtigungen auf Spaltenebene

Das Verfahren zum Erteilen von Berechtigungen auf Spaltenebene für eine bestimmte Tabelle ist dem Erteilen von Berechtigungen auf Tabellenebene sehr ähnlich.

  1. Generieren Sie die GRANT-Anweisungen für Berechtigungen auf Spaltenebene mit der folgenden Abfrage:

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

    Wenn Sie beispielsweise den Benutzer „chartio_read_only“ mithilfe des chartio_connect-Clients mit bestimmten Spalten in der Tabelle „Benutzer“ der Datenbank „Berichte“ verbinden möchten, führen Sie Folgendes aus:

    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. Die Abfrage sollte etwas Ähnliches wie das Folgende ergeben:

    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. Wählen Sie nur die Anweisungen für die Spalten aus, auf die Sie Zugriff gewähren möchten, und führen Sie diese Abfragen aus. Wenn wir beispielsweise nur den Zugriff auf die Spalten „User_ID“ und „Company“ gewähren wollten, würden wir Folgendes ausführen:

    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. Geben Sie dem Benutzer ein sicheres Passwort.

    SET PASSWORD FOR 'chartio_read_only'@`localhost` = PASSWORD('top$secret');
    

Weitere Informationen finden Sie in der MySQL-Dokumentation.