Frage

Ich schreibe einen kleinen Bereitstellung SQL-Skript für meine erste Datenbank-gestützte Anwendung.

Im Prozess finde ich, dass ich mich wiederhole viel , zum Beispiel:

GRANT USAGE ON *.* TO 'foo'@'localhost';
DROP USER 'foo'@'localhost';
CREATE USER 'foo'@'localhost' IDENTIFIED BY 'password';

Es wäre fantastisch, wenn ich eine Variable oder ein Makro zu ersetzen häufig gemeinsam vorkommen Daten nutzen könnte. Ist es möglich, so etwas wie der folgende Ausschnitt zu implementieren?

#define USER 'foo'        #or "Type USER = 'foo'"
#define HOST 'localhost'  #or "Type HOST = 'localhost'"

GRANT USAGE ON *.* TO USER@HOST
DROP USER USER@HOST
CREATE USER USER@HOST IDENTIFIED BY 'password'
War es hilfreich?

Lösung

Die meisten SQL-Datenbanken haben eine Art von Bind-Variablen, die Sie dafür verwenden können.

Zum Beispiel in PostgreSQL verwenden Sie den \ Befehl set in plsql:

\set user = foo
drop user :user;
create user :user identified by 'password';

Ich bin aber nicht sicher, ob MySQL so etwas haben. Es tut Variablen haben, und da der Host und Benutzer eine Zeichenfolge ist, könnten Sie in der Lage sein, so etwas zu tun:

select @user = 'foo';
select @host = 'localhost;

drop user @user@@host;
create user @user@@host identified by 'password';

Wenn Variablen nicht mit dem Drop arbeiten und Benutzer-Anweisungen erstellen, können Sie die Tabelle mysql.user direkt immer ändern, nur nicht vergessen, flush privileges nach auszuführen.

insert into user values(host,@user,PASSWORD('some_pass'),
       'Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y','Y');
flush privileges;

Andere Tipps

Sie können sicher so etwas wie:

SET @user='foo';
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top