sql >> Database >  >> RDS >> Mysql

Verleen MySQL-tabel- en kolommachtigingen

Machtigingen op tabelniveau verlenen

U kunt een gebruiker maken met machtigingen op tabelniveau in MySQL door het volgende uit te voeren:

  1. Maak als gebruiker verbinding met MySQL met de Create_user_priv en Grant_priv. Bepaal welke gebruikers deze rechten hebben door de volgende query uit te voeren. Uw gebruiker heeft al het SELECT-privilege op MySQL.user nodig om de query uit te voeren.

    SELECT User, Host, Super_priv, Create_user_priv, Grant_priv from mysql.user WHERE Create_user_priv = 'Y' AND Grant_Priv = 'Y';
    
  2. Voer de volgende query uit om de GRANT-instructies voor uw beperkte gebruiker te genereren. Vervang 'mijndatabase', 'mijngebruiker' en 'mijnhost' door specifieke informatie voor uw database.

    Merk op dat de aanhalingstekens rond mijngebruiker en mijnwachtwoord twee enkele aanhalingstekens zijn, niet dubbele. De tekens rondom myhost en ,TABLE_NAME, zijn backticks (de toets bevindt zich onder de escape-toets op uw toetsenbord).

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

    Als u bijvoorbeeld de gebruiker 'chartio_read_only' wilt verbinden met uw 'Reports'-database met behulp van de chartio_connect-client, voert u het volgende uit:

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

    Als u de gebruiker 'chartio_direct_connect' wilt verbinden met uw 'Analytics'-database via een directe verbinding vanaf de servers van Chartio, voert u het volgende uit:

    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. De zoekopdracht zou als volgt moeten resulteren:

    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. Selecteer de instructies voor alleen de tabellen waartoe u toegang wilt verlenen en voer die query's uit. Als we bijvoorbeeld alleen toegang tot de tabel Gebruikers en Bezoekers wilden verlenen, zouden we het volgende uitvoeren:

    GRANT SELECT, SHOW VIEW ON mydatabase.`Users` to 'myuser'@`myhost`;
    GRANT SELECT, SHOW VIEW ON mydatabase.`Visitors` to 'myuser'@`myhost`;
    
  5. Geef de gebruiker een veilig wachtwoord.

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

    of

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

U kunt nu veilig toegang krijgen tot uw database met deze gebruiker en u kunt er zeker van zijn dat deze alleen machtigingen heeft voor de opgegeven tabellen.

Machtigingen op kolomniveau verlenen

De procedure voor het verlenen van machtigingen op kolomniveau voor een specifieke tabel lijkt erg op het verlenen van machtigingen op tabelniveau.

  1. Genereer de GRANT-instructies voor machtigingen op kolomniveau met behulp van de volgende query:

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

    Als u bijvoorbeeld de gebruiker 'chartio_read_only' wilt koppelen aan specifieke kolommen in de tabel 'Gebruikers' van de 'Rapporten'-database met behulp van de chartio_connect-client, voert u het volgende uit:

    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. De zoekopdracht zou moeten resulteren in iets dat lijkt op het volgende:

    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. Selecteer alleen de instructies voor de kolommen waartoe u toegang wilt verlenen en voer die query's uit. Als we bijvoorbeeld alleen toegang willen verlenen tot de kolommen 'User_ID' en 'Bedrijf', voeren we het volgende uit:

    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. Geef de gebruiker een veilig wachtwoord.

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

Raadpleeg de MySQL-documentatie voor meer informatie.


  1. Kan ik de naam krijgen van alle tabellen van de SQL Server-database in de C#-toepassing?

  2. SQL-groep op datumbereik

  3. Oracle-reeks maar dan in MS SQL Server

  4. SQLite - JOIN-instructies