SQL Mehrere Datenbanken abfragen

Alfredo64

Cadet 3rd Year
Registriert
Jan. 2020
Beiträge
43
Hallo,

ich möchte mehrere Datenbanken auf einem Server nach einem gewissen Inhalt befragen. Das funktioniert auch schon soweit für die einzelnen Datenbanken schon gut. Allerdings weiß ich nicht wie ich es hinbekomme, dass er das automatisch für alle Datenbanken macht.

SQL:
select P123 from C1234

where P123 = 'gesuchterInhalt'
 
SQL:
SELECT foobar
FROM `database1`.`table1`
WHERE key1="value1"
UNION
SELECT foobar
FROM `database2`.`table2`
WHERE key1="value1"
 
Wie Bagbag schon sagte, entweder mit 'union'... oder mit 'join', wobei es bei 'join' unterschiedliche Varianten / Möglichkeiten gibt... kommt halt auf den Einsatzzweck drauf an.
 
Eventuell auch mal das XY Problem anschauen und darüber nachdenken, ob das hier zutreffen könnte.
 
  • Gefällt mir
Reaktionen: Tornhoof
Habe ich das richtig verstanden, dass ich das für jede Datenbank einzel eingeben und so fortsetzen muss?
 
Korrekt. Und jetzt glaube ich noch viel mehr an das XY Problem.
 
  • Gefällt mir
Reaktionen: Domski und Thaddelino
OK dann schau ich mir das XY Problem mal an

schonmal danke
 
du kannst dir aber auch 2-3 Zeilen Skript schreiben um das auf mehrere datenbanken zu querien - hab das zuhause fertig... aber nciht in meinen repos

Code:
declare -a arr=("DB1" "DB2" "DB3")

for i in "${arr[@]}"
do
   echo "executing the script on DAtabase $i"
   mysql -u user -pDeinPasswort $i < db.sql
done

grob so solte das gehen
deine query packst du in db.sql und legst diese datein in den selben order wie das bash skript
 
@Bagbag

ich glaube du hast mit dem XY Problem vielleicht sogar recht. Ich versuche mich jetzt nochmal genauer auszudrücken.

Das Beispiel mit dem Union, ist schon gut ich habe mich mit Union befasst und das passt zu meinem Problem.
Allerdings weiß ich nicht wie ich bei der From Anweisung die Datenbank angeben muss, dass SQL es verarbeiten kann. Denn bei "From" muss ich ja einmal die Datenbank angeben und dahinter nochmal die Tabelle in der das selectierte zu finden ist.

SQl Datenbank1.png

Da wo im Bild master steht ist ja normalerweise die Datenbank angegeben. Die soll aber im Skript stehen.

Der Sinn des ganzen ist es, ein bestimmtes Passwort in all den Datenbanken zu finden und am Ende dann auszutauschen.
 
Mit
Code:
SELECT name
FROM sys.databases
bekommst du vom MS SQL Server alle Datenbanken.
Über sie zu iterieren und jeweils deine Skripte auszuführen kannst du direkt mit T-SQL versuchen (mach eine Stored Procedure oder sowas draus) oder du schreibst halt ein kleines Programm in der Sprache deiner Wahl...
Wie du die DB innerhalb einer Abfrage angibst, wurde doch schon geschrieben:
Code:
SELECT * FROM [databaseName].[schemaName].[tableName]
Oder man macht jedes mal ein
Code:
USE [databaseName]
davor, wenn die ganze Abfrage nur auf eine DB laufen muss.
Wenn du was programmierst, kannst du auch für jede DB eine neue Connection aufmachen und musst den Namen im Skript gar nicht mehr benennen.

So viele Möglichkeiten...
 
Zuletzt bearbeitet:
@Enurian

danke

mal angenommen ich würde es jetzt manuell eintragen.
Wie muss ich das schreiben, dass ich bei "From" die Datenbank eintragen kann.
Beispiel:
SQL:
select Spalte from Datenbank.Tabelle

where Spalte = 'Passwort'

Das was ich hinter from geschriebn hab wie muss ich das machen, dass das Funktioniert oder geht das überhaupt?
 
@madmax2010

ich glaube nicht, da das Passwort eigentlich komplett unrelewant ist. Ich konnte die Passwörter mit SQL auf jeden fall so finden. Wenn man die Passwörter hat bring einem das nicht viel trotzdem habe ich den Auftrag bekommen die Passwörter zu finden und zu ändern.

Gefunden in den Tabellen habe ich sie schon nun muss ich sie irgedwie alle auf den unteschiedlichen Datenbanken geändert bekommen.
Ergänzung ()

@Enurian

Ich habe es schon genau so versucht wie du es gemacht hast allerding klappt das nicht und dann habe ich noch etwas probiert. So wie ich es jetzt probiert habe schlägt er es mir sogar schon vor und trotzdem ist es rot unterstrichen.
SQL:
select * from [*****_crm_***],C****F
Ich schätze mal, dass ich noch irgend eine kleinigkeit falsch mache.
 
Zuletzt bearbeitet:
Ein Punkt, kein Komma zwischen Datenbank und Tabelle.
Und ja, eine solche Abfrage funktioniert, mache ich täglich. Wenn etwas nicht funktioniert, ist es unheimlich hilfreich zu erläutern, WAS nicht funktioniert und wie die Fehlermeldung lautet, wenn es eine gibt.
 
@Enurian
ich hab jetzt dasselbe noch einmal gemacht mit einem Punkt und es geht leider immer noch nicht.

Die Fehlermeldung ist wie folgt:
Meldung 208, Ebene 16, Status 1, Zeile 1
Invalid object name '*****crm*****.****ONF'.
 
Entschuldige bitte, es fehlt natürlich noch das Schema - habe es oben eingefügt. Also z.B. [cursor_crm_dhv].[dbo].[C2XCONF] , falls das bei dir stimmt.
 
  • Gefällt mir
Reaktionen: Alfredo64
@Enurian

ja jetzt Funktioniert es vielern danke jetzt kann ich schonmal weiter machen:)👍

Danke!!!!
 
Eventuell hast du das XY-Problem nicht ganz verstanden oder es trifft hier doch nicht zu (z.B. weil es etwas gegebenes ist, worauf du kein Einfluss hast), zumindest nicht in der Form, in der ich dachte. Worauf ich hinaus wollte: Warum gibt es mehrere Passwort Tabellen und warum sind diese über mehrere Datenbank verstreut?
 
  • Gefällt mir
Reaktionen: madmax2010
Sollten es entfernt möglich sein, dass (einzelne) User die Passwörter selbst setzten können / irgendwann mal setzen können, sollten sie trotzdem gehashed werden.
 
  • Gefällt mir
Reaktionen: AW4
Passwörter, egal wo und wofür immer mit einem geeigenetem Passwort-Hash verschlüsseln.

Ich will dich hier jetzt nicht ankacken oder der gleichen, aber dich (und andere Leser) im Idealfall etwas zum Nachdenken bringen:
Es gibt überwältigend viele Leute (auch solche, die es eigentlich besser Wissen sollten!), die für mehere verschiedene Logins ein und das selbe Passwort benutzen.
Und da liegen sicherlich die ein oder anderen auch in eurer Datenbank, wahrscheinlich sogar relativ einfach verknüpfbar mit persönlichen, identifizierenden Daten.

Jeder, der da mit eurer Software arbeitet, wird auf diese entsprechenden Tabellen auch lesenden Zugriff haben, wenn der Zugang zur Datenbank nicht sogar mit dem selben Login getätigt wird, mit der die Datenbank auch administriert wird.
Da wird also sehr wahrscheinlich jeder mit ein bisschen technischem Verständniss und Google-Skills direkt reinschauen, die Daten raustragen und "Unsinn" damit anstellen können.
Am einfachsten haben es da z.B. auch deine Kollegen, aktuelle, vergangene und vor allem zukünftige.
Weißt ja nicht, was da irgendwann mal antanzt oder wem da mal ans Bein gepisst wird, der dann nach Vergeltung sucht.

Dazu muss die Datenbank nicht mal entfernt aus dem Internet erreichbar sein, alles ab 2 Personen ist ein Sicherheitsrisiko.
 
  • Gefällt mir
Reaktionen: r15ch13 und madmax2010
Zurück
Oben