Wie überprüfe ich, welches Datenbankmodul auf dem Datenbankserver installiert ist, auf dem ich Abfragen ausführen kann?

11

Ich möchte überprüfen, welcher SQL-Typ auf einem Datenbankserver ausgeführt wird, auf den ich zugreifen kann. Ich habe nur Zugriff auf eine Weboberfläche und eine Liste von Tabellen.

Über die Schnittstelle kann ich Abfragen für die Tabellen ausführen, die in einer Liste vorhanden sind.

Wie kann ich weitere Informationen über den Server und die Version erhalten, auf der der Server ausgeführt wird? Ich habe keine Ahnung von der IP oder dem PORT, auf dem der Server ausgeführt wird.

Ich möchte wissen, ob der Server MySQL, Mircosoft SQL Server, Oracle SQL, Postgre SQL oder ein anderer SQL Server ist.

Die Website, über die ich spreche, ist diese: w3schools.com SQL Editor .

EDIT 2: Obwohl für einige der Befehl select sqlite_version () für mich funktioniert, funktioniert es nicht. Dies ist der Screenshot der Antwort.

Geben Sie hier die Bildbeschreibung ein

EDIT 3: Im Chromium Browser funktioniert der Befehl ordnungsgemäß. Im Firefox-Browser funktionierte der Befehl jedoch nicht.

Ich erwähne auch, dass ich Linux verwende.

Was könnte Ihrer Meinung nach der Grund sein, warum ich bei Firefox und Chrome unterschiedliche Ergebnisse erhalte?

yoyo_fun
quelle
Können Sie eine Abfrage ausführen?
David Markovitz
@DuduMarkovitz Ja, ich kann Abfragen betreiben.
yoyo_fun
Die Tatsache, dass diese Aussage für einige und nicht für andere funktioniert, scheint darauf hinzudeuten, dass die spezifische Umgebung von Bedeutung ist. Wahrscheinlich hatte @joanolo Recht, als er sagte, dass diese Abfragen im Browser ausgeführt werden. Unterschiedliche Benutzer verwenden unterschiedliche Browser, einige möglicherweise mit zusätzlichen Erweiterungen.
Andriy M
2
"Undefinierte Funktion im Ausdruck." ist eine Access - Fehlermeldung sie Jet so scheint , wie Server - Seite verwenden
Martin Smith
@MartinSmith Was ist Jet in diesem Zusammenhang? Wo kann ich mehr darüber lesen?
yoyo_fun

Antworten:

15

Ich gehe davon aus, dass Sie über Ihre Weboberfläche SQL-Befehle ausgeben können. Wenn ja, können Sie verwenden:

SELECT version();

PostgreSQL

Wenn Sie sich in einer PostgreSQL- Datenbank befinden, erhalten Sie eine ähnliche Antwort wie

PostgreSQL 9.6.1 on x86_64-apple-darwin14.5.0, compiled by Apple LLVM version 7.0.0 (clang-700.1.76), 64-bit

MySQL

Wenn Sie sich in einer MySQL- Datenbank befinden, sieht die Antwort so aus

5.7.12-log

Orakel

Wenn Sie sich in einer Oracle- Datenbank befinden, wird eine Fehlermeldung angezeigt:

ORA-00923: FROM keyword not found where expected

(Der ORA-xxxx sagt Ihnen, dass Sie auf Oracle sind). Um herauszufinden, welche Version es gibt, versuchen Sie:

SELECT banner as "oracle version" from v$version

Sie erhalten eine Antwort wie:

Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production
PL/SQL Release 11.2.0.2.0 - Production
CORE    11.2.0.2.0  Production
TNS for 64-bit Windows: Version 11.2.0.2.0 - Production
NLSRTL Version 11.2.0.2.0 - Production

Microsoft SQL Server

Wenn Sie mit MS SQL Server arbeiten , ist die Antwort ebenfalls ein Fehler und sieht folgendermaßen aus:

'version' is not a recognized built-in function name.

In diesem Fall können Sie Folgendes versuchen:

SELECT @@version ;

Als Antwort erhalten Sie Folgendes:

Microsoft SQL Server 2016 (SP1) (KB3182545) - 13.0.4001.0 (X64)   
    Oct 28 2016 18:17:30   
    Copyright (c) Microsoft Corporation  
    Enterprise Edition (64-bit) on Windows Server 2012 R2 Standard 6.3 <X64> (Build 9600: ) (Hypervisor) 

SQLite

Wenn Sie sich in einer SQLite- Datenbank befinden, wird beim Versuch Folgendes angezeigt SELECT version():

 could not prepare statement (1 no such function: version)

In diesem Fall können Sie Folgendes versuchen:

 SELECT sqlite_version()

Und die Antwort wird so aussehen:

3.14.0
joanolo
quelle
danke für die antwort
yoyo_fun
Versuchen Sie das letzte: SELECT sqlite_version()und Sie haben Ihre Antwort.
Joanolo
1
Es sieht so aus, als ob die Version, die sie haben, tatsächlich vollständig in Ihrem Browser ausgeführt wird . Schauen Sie sich github.com/kripken/sql.js
joanolo
Gibt es eine Möglichkeit, um sicherzustellen, dass dies der Fall ist? Hat diese In-Browser-Version der SQL-Sprache eine Möglichkeit, ihre Version zu überprüfen, oder ist dies tatsächlich diese SQL-Engine?
yoyo_fun
7

Dieser Online-SQL-Editor verwendet die Web-SQL-Datenbank , dh SQL, das in den Browser eingebettet ist. Es ist leicht zu erkennen, wenn Sie sich den JS-Quellcode unter http://www.w3schools.com/w3Database.js ansehen und die API-Aufrufe mit der W3C-Spezifikation von Web SQL vergleichen, z. B. wie sie die Datenbank öffnen:

w3Database = window.openDatabase('W3SchoolsDemoDatabase', '1.0',
           'W3SchoolsDemoDatabase', 2 * 1024 * 1024);

Es gibt also keinen Datenbankserver, es ist wirklich der Browser, der das SQL ausführt, mit der SQL-Engine, die Ihr Browser verwendet hat (vorausgesetzt, er verfügt zunächst über die SQL-Fähigkeit), was sqlitesehr sinnvoll ist.

(BEARBEITEN: Nicht unbedingt zutreffend, da laut der Antwort von Martin Smith der JS-Übermittlungscode auf eine serverseitige MS-Jet-Engine zurückgreift, wenn der Browser Web SQL nicht unterstützt.)

Beachten Sie, dass das W3C beschlossen hat, das SQL-in-the-Browser-Konzept im Jahr 2010 aufzugeben. Es ist jetzt veraltet.

Daniel Vérité
quelle
Weißt du, warum sie diese Entscheidung getroffen haben? Gibt es einen Unterschied zwischen SQL im Browser und SQLite?
yoyo_fun
@yoyo_fun: en.wikipedia.org/wiki/Web_SQL_Database hat einige Hinweise . Oder Sie könnten dies als unabhängige Frage auf dba.se stellen
Daniel Vérité
Dies ist in der Tat eine sehr gute Idee :)
yoyo_fun
5

Wie in den anderen Antworten angegeben, hängt dies von Ihrem Browser ab.

Wenn Ihr Browser keine native Unterstützung für die Web SQL-Datenbank bietet, wird er am Ende an den Server zurückgesendet.

Geben Sie hier die Bildbeschreibung ein

Dies verwendet Jet, wie man beim Laufen sehen kann

SELECT X FROM Foobar

Das Microsoft Jet-Datenbankmodul kann die Eingabetabelle oder Abfrage 'Foobar' nicht finden. Stellen Sie sicher, dass es existiert und dass sein Name richtig geschrieben ist.

TRANSFORMDies bedeutet, dass proprietäre Access-Erweiterungen wie die Arbeit beim Zugriff auf die Seite von Firefox aus funktionieren (dies schlägt jedoch in Chrome fehl).

Geben Sie hier die Bildbeschreibung ein

Martin Smith
quelle
Danke für die ausführliche Antwort. Kannst du mir sagen, wie du den ersten Screenshot bekommen hast? Was ist der Editor, den Sie verwenden? Ist es eine Erweiterung für einen Webbrowser?
yoyo_fun
@yoyo_fun die in Firefox eingebauten Entwicklertools
Martin Smith
3

Diese Antwort wurde gegeben, bevor das OP einen Verweis auf w3schools.com hinzufügte


Wenn Sie eine Abfrage ausführen können, beginnen Sie damit:

select version();        -- PostgreSQL  e.g.: PostgreSQL 9.6beta2, compiled by Visual C++ build 1800, 64-bit                                                                                                                                            

select version();        -- MySQL       e.g.: 5.7.11-log                                                                                                                                                                                                

select @@version;        -- SQL Server  e.g.: Microsoft SQL Server 2016 (RTM) - 13.0.1601.5 (X64)   Apr 29 2016 23:23:58   Copyright (c) Microsoft Corporation  Express Edition (64-bit) on Windows 7 Enterprise 6.1 <X64> (Build 7601: Service Pack 1)         

select * from v$version; -- Oracle      e.g.: Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production                      

select sqlite_version(); -- Sqlite:     e.g.: 3.15.1     
David דודו Markovitz
quelle
thansk aber leider funktionieren die befehle nicht auf w3schools site und anderen. Die Adresse lautet www.w3schools.com/sql/trysql.asp?filename=trysql_select_all
yoyo_fun
1
Bitte versuchen Sie auch Sqlite
David דודו Markovitz
Sqlite. Überprüfen Sie die aktualisierte Antwort
David דודו Markovitz
Markovits das Ergebnis der Ausführung des Befehls "select sqlite_version ()" ist "Undefinierte Funktion 'sqlite_version' im Ausdruck."
yoyo_fun
1
(Die Antwort hängt vom Browser ab)
Joanolo
2

Für den speziellen Fall der SQL-Engine, die von der Seite bei W3Schools verwendet wird :

Safari-, Chrome- und Opera-Browser

Wenn Sie den Safari-Browser verwenden (ich habe ihn unter Mac OS X 10.12 getestet), verwendet die Seite SQLite, das anscheinend in den Browser selbst integriert ist. Wenn Sie die „Run SQL“ Taste drücken, es nicht jede externe Ressource verwenden. Weiteres Reverse Engineering zeigt, dass die Seite die Datenbank mithilfe des folgenden JavaScript-Codes initialisiert:

function w3WebSQLInit() {
    var w3DBObj = this;
    w3Database = window.openDatabase('W3SchoolsDemoDatabase', '1.0', 'W3SchoolsDemoDatabase', 2 * 1024 * 1024);
   ...
}

window.openDatabasebedeutet, dass der Code eine Web SQL-Datenbank verwendet . Dies wurde vor einigen Jahren vom W3C definiert und von Opera, Safari und Chrome (AFAIK) in die Praxis umgesetzt, nicht jedoch von FireFox (oder Explorer). Alle drei Browser scheinen die "Web SQL-Datenbank" implementiert zu haben, indem sie verschiedene Versionen von SQLite in sich selbst eingebettet haben.

An dieser Stelle behauptet die W3C-Seite:

"Vorsicht. Diese Spezifikation befindet sich nicht mehr in der aktiven Wartung und die Arbeitsgruppe für Webanwendungen beabsichtigt nicht, sie weiter zu warten."

Ich habe einen Chrome- Browser (Version 56.0.2924.87 unter Windows 10) getestet und er scheint SQLite 3.10.2 zu verwenden. Opera (Version 12.15 unter Windows 10) verwendet SQLite 3.7.9.

Opera ist klar genug in ihrem "Über":

Geben Sie hier die Bildbeschreibung ein

Das Programmierhandbuch für clientseitige Safari-Speicher- und Offline-Anwendungen erwähnt dies ebenfalls

Ab Safari 3.1 und iOS 2.0 unterstützt Safari die HTML5-JavaScript-Datenbankklasse. Die auf SQLite basierende JavaScript-Datenbankklasse bietet eine relationale Datenbank für die lokale Speicherung von Inhalten, die zu groß sind, um bequem in Cookies gespeichert zu werden (oder zu wichtig für das Risiko sind) versehentliches Löschen, wenn der Benutzer seine Cookies löscht).

Ich habe nicht in Chrome geschaut ... aber meine Vermutung ist klar.

Browser für FireFox, Edge und Internet Explore

Wenn Sie den FireFox-Browser verwenden (ich habe ihn unter Mac OS X 10.12 getestet); Dieselbe W3School-Seite verhält sich radikal anders. Die Abfragen werden nicht im Browser ausgeführt , sondern es werden Anforderungen an den Server gesendet . Auf der Serverseite denke ich, dass tatsächlich eine MS Access- Datenbank verwendet wird. Eine Möglichkeit, dies zu überprüfen, besteht darin, den (Standard) zu überprüfen information_schema.

Wenn Sie die folgende Abfrage ausgeben (die in einer standardkonformen Datenbank die Liste der Tabellen enthält, auf die der Benutzer zugreifen kann):

SELECT * FROM information_schema.tables;

Sie erhalten die folgende (zu aussagekräftige) Fehlerantwort :

Could not find file 'C:\Windows\SysWOW64\inetsrv\information_schema.mdb'.

Wenn die Software nach einer MDB-Datei sucht, bedeutet dies, dass sie das Microsoft Jet-Datenbankmodul (oder etwas Ähnliches) auf der Serverseite verwendet und Dateien im Access .MDB-Format verwendet , die Access-Versionen bis und entsprechen einschließlich 2003. (Access 2007 und spätere Versionen verwenden standardmäßig Dateien im ACCDB-Format).

Microsoft Internet Explorer 11 verhält sich genauso (unter Windows 10). und Edge auch (unter Windows 10).

joanolo
quelle