Page 1 of 1

MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Sun 23. Jan 2022, 14:58
by KlausK
Ich habe einen frisch installierten vServer mit Keyhelp.

Via Shell melde ich mit als MySQL-"root" an, lege einen MySql-User, dann eine DB an. Dannach weise ich dem neuen MySql-User alle Rechte der neuen DB zu und aktualisiere den Cache.

Code: Select all

mysql -u root -pROOTPASSWORT
CREATE USER 'NeueDBAdmin'@'localhost' IDENTIFIED BY 'NeueDBAdminPasswort';
CREATE DATABASE NeueDB;
GRANT ALL PRIVILEGES ON NeueDB . * TO 'NeueDBAdmin'@'localhost';
FLUSH PRIVILEGES;

Natürlich wird alles mit einem "Query OK" quittiert.

Wie bringe ich Keyhelp nun bei, diese neue DB einem Keyhelp-Benutzer in seinem Backend anzuzeigen bzw. zu verwalten?

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Sun 23. Jan 2022, 15:07
by OlliTheDarkness
KlausK wrote: Sun 23. Jan 2022, 14:58 Ich habe einen frisch installierten vServer mit Keyhelp.

Via Shell melde ich mit als MySQL-"root" an, lege einen MySql-User, dann eine DB an. Dannach weise ich dem neuen MySql-User alle Rechte der neuen DB zu und aktualisiere den Cache.

Code: Select all

mysql -u root -pROOTPASSWORT
CREATE USER 'NeueDBAdmin'@'localhost' IDENTIFIED BY 'NeueDBAdminPasswort';
CREATE DATABASE NeueDB;
GRANT ALL PRIVILEGES ON NeueDB . * TO 'NeueDBAdmin'@'localhost';
FLUSH PRIVILEGES;

Natürlich wird alles mit einem "Query OK" quittiert.

Wie bringe ich Keyhelp nun bei, diese neue DB einem Keyhelp-Benutzer in seinem Backend anzuzeigen bzw. zu verwalten?
Überhaupt nicht.

Datenbanken und User sollten auschließlich im Panel oder über die API angelegt werden.

User / DBs welche du über die Shell anlegst intressiert sich KH nicht für, dies gilt besonders für den Fall das die Backup Funktion nutzt.

viewtopic.php?p=32473#p32473

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Sun 23. Jan 2022, 15:10
by Tobi
Wahrscheinlich könnte man die selbst erstellte DB nachträglich in die KeyHelp Datenbank eintragen und mit der passenden UserID verknüpfen…

Aber warum sollte man das machen wollen?

Dafür gibt es die API…

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Sun 23. Jan 2022, 15:10
by 24unix
KlausK wrote: Sun 23. Jan 2022, 14:58 FLUSH PRIVILEGES;
Das brauchst Du nicht, wenn Du die Berechtigungen mit GRANT vergibst, nur wenn Du die per SQl direkt in der MySQL-DB anlegst;

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Mon 24. Jan 2022, 08:40
by Alexander
OlliTheDarkness wrote: Sun 23. Jan 2022, 15:07 User / DBs welche du über die Shell anlegst intressiert sich KH nicht für, dies gilt besonders für den Fall das die Backup Funktion nutzt.

viewtopic.php?p=32473#p32473
Als Ergänzung hierzu: Seit KeyHelp 21.3 kann man als Admin auch am KeyHelp vorbei konfigurierte Datenbanken mit dem neuen Backup-System sichern und wiederherstellen lassen (Bei Backup-Umfang, "Benutzerdefiniert" wählen und entsprechende Checkbox anklicken).

Ansonsten natürlich wie bereits gesagt, Datenbanken einfach über die API anlegen lassen, statt am KeyHelp vorbei.

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Thu 27. Jan 2022, 13:50
by KlausK
Mich in die API einzuarbeiten ist zeitlich kaum möglich. Vermutlich ist es einfacher, die etwa 40 DB's via KH manuell anzulegen und anschließend mit den aktuellen Dumps via Shell zu aktualisieren. Das dürfte sich ja hoffentlich nicht negativ auswirken.

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Thu 27. Jan 2022, 14:02
by 24unix
Hast Du Nutzer, Datenbankname und Passwort in einer Tabelle vorliegen?

Existieren die Nutzer schon in KH?

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Thu 27. Jan 2022, 14:26
by KlausK
Die Daten liegen alle tabellarisch vor.
In KH sind bisher nur ich selbst und ein TestUser angelegt.

Re: MySQL-DB via Shell erzeugen und im Admin-Bereich verwalten

Posted: Thu 27. Jan 2022, 14:48
by 24unix
KlausK wrote: Thu 27. Jan 2022, 14:26 Die Daten liegen alle tabellarisch vor.
In KH sind bisher nur ich selbst und ein TestUser angelegt.
Also muss User und. DB angelget werden?

Ich hatte letzte Woche was für einen anderen User geschrieben, das könnte man wohl mit etwas Änderung übernehmen.

Code: Select all

<?php

function sendCommand($body)
{
	$serverName = 'https://keyhelp/api/v2/clients/';
	$apiKey = 'uhTKKvRb.[..]9TrxCCE9d';

	$apiResult = [
		'response' => 'error'
	];

	$curl = curl_init();
	curl_setopt($curl, option: CURLOPT_URL, value: $serverName);
	curl_setopt($curl, option: CURLOPT_RETURNTRANSFER, value: true);
	curl_setopt($curl, option: CURLOPT_POST, value: true);
	curl_setopt($curl, option: CURLOPT_HTTPHEADER, value: ["X-API-Key:$apiKey"]);
	curl_setopt($curl, option: CURLOPT_POSTFIELDS, value: json_encode($body));

	if ($resultJSON = curl_exec($curl)) {
		$httpResponse = curl_getinfo($curl)['http_code'];
		$apiResult = json_decode($resultJSON);


		switch($httpResponse) {
			case 200:
				// no error
				break;
			case 201:
				// user created
				$apiResult = [
					'userid' => $apiResult->id
				];
				break;
			case 400:
				$apiResult = [
					'code' => '400 Bad Request',
					'error' => $apiResult->message
				];
				break;
			case 401:
				$apiResult = [
					'error' => 'Missing or wrong API Key'
				];
				break;
			default:
				$apiResult = [
					'error' => 'Unhandled error ' . $httpResponse
				];
		}

	} else {
		$apiResult = [
			'error' => 'Unknown error'
		];
	}

	curl_close($curl);

	echo json_encode($apiResult) . PHP_EOL;
}

$ofile = fopen("debug.txt", "w");

$parameter = print_r($_POST, true);

fputs($ofile, $parameter);

fclose($ofile);

$content = [
	'username' => $_REQUEST['username'],
	'language' => "de",
	'email' => "me@example.com",
	'password' => "qwertz",
	'notes' => "Any comments about this client account.",
	'send_login_credentials' => true,
	'create_system_domain' => true,
];

sendCommand($content);
Das ist jetzt zur Interaktion mit einem HTML Formular ausgelegt, aber kann mal sicher anpassen, eine CSV zu parsen und dann drüber zu laufen.