Giv **alle** rettigheder til databasen

Jeg har oprettet en database, for eksempel 'mydb'.

CREATE DATABASE mydb CHARACTER SET utf8 COLLATE utf8_bin;
CREATE USER 'myuser'@'%' IDENTIFIED BY PASSWORD '*HASH';
GRANT ALL ON mydb.* TO 'myuser'@'%';
GRANT ALL ON mydb TO 'myuser'@'%';
GRANT CREATE ON mydb TO 'myuser'@'%';
FLUSH PRIVILEGES;

Nu kan jeg logge ind på databasen fra alle steder, men kan ikke oprette tabeller.

Hvordan tildeles alle privilegier på denne database og (i fremtiden) tabeller. Jeg kan ikke oprette tabeller i 'mydb' database. Jeg får altid:

CREATE TABLE t (c CHAR(20) CHARACTER SET utf8 COLLATE utf8_bin);
ERROR 1142 (42000): CREATE command denied to user 'myuser'@'...' for table 't'
Løsning
GRANT ALL PRIVILEGES ON mydb.* TO 'myuser'@'%' WITH GRANT OPTION;

Det er sådan jeg opretter mine "Super User" privilegier (selvom jeg normalt ville angive en vært).

VIGTIG NOTE

Mens dette svar kan løse problemet med adgang, skaber WITH GRANT OPTION en MySQL-bruger, der kan [redigere andre brugeres rettigheder] (https://dev.mysql.com/doc/refman/5.6/en/privileges-provided.html#priv_grant-option).

Med GRANT OPTION-privilegiet kan du give andre brugere eller fjerne fra andre brugere de rettigheder, som du selv har.

Af sikkerhedshensyn bør du ikke bruge denne type brugerkonto til nogen proces, som offentligheden vil have adgang til (f.eks. et websted). Det anbefales, at du [opretter en bruger med kun databaseprivilegier] (https://stackoverflow.com/a/15707789/2370483) til den slags brug.

Kommentarer (14)

Dette er et gammelt spørgsmål, men jeg tror ikke, at det accepterede svar er sikkert. Det er godt til at oprette en superbruger, men ikke godt, hvis du vil give rettigheder til en enkelt database.

grant all privileges on mydb.* to myuser@'%' identified by 'mypasswd';
grant all privileges on mydb.* to myuser@localhost identified by 'mypasswd';

% synes ikke at dække socket kommunikation, som localhost er til. WITH GRANT OPTION er kun godt for superbrugeren, ellers er det normalt en sikkerhedsrisiko.

Håber dette hjælper.

Kommentarer (7)

Dette vil være nyttigt for nogle mennesker:

Fra MySQL kommandolinjen:

CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';

Desværre har newuser på dette tidspunkt ingen tilladelser til at gøre noget med databaserne. Faktisk, hvis newuser overhovedet forsøger at logge ind (med passwordet, password), vil de ikke kunne nå MySQL-shellen.

Derfor er det første, der skal gøres, at give brugeren adgang til de oplysninger, som han/hun skal bruge.

GRANT ALL PRIVILEGES ON * . * TO 'newuser'@'localhost';

Stjernetegn i denne kommando henviser til den database og tabel (henholdsvis), som de kan få adgang til - denne specifikke kommando giver brugeren mulighed for at læse, redigere, udføre og udføre alle opgaver på tværs af alle databaser og tabeller.

Når du har færdiggjort de tilladelser, som du vil oprette for dine nye brugere, skal du altid sørge for at genindlæse alle rettighederne.

FLUSH PRIVILEGES;

Dine ændringer vil nu være i kraft.

For yderligere oplysninger: http://dev.mysql.com/doc/refman/5.6/en/grant.html

Hvis du ikke er fortrolig med kommandolinjen, kan du bruge en klient som MySQL workbench, Navicat eller SQLyog

Kommentarer (4)