2012-04-20 11 views
15

Diese Frage kommt aus Neugier. Ich suchte nach Google, bekam aber keine Ahnung.sql offene Verbindung im schreibgeschützten Modus

Angenommen, ein Benutzer hat vollen Lese-/Schreibzugriff auf die MySQL-Datenbank. Ich frage mich, gibt es eine Möglichkeit (einige Parameter in der Verbindungszeichenfolge), mit der Datenbank mit dem gleichen Benutzernamen und Passwort im schreibgeschützten Modus zu verbinden?

Ich möchte dieses ohne Ändern der Berechtigungen dieses Benutzers, da derselbe Benutzer möglicherweise Schreibberechtigung auch zu einem anderen Zeitpunkt benötigen. Dies wäre nützlich (wenn möglich), um eine versehentliche Änderung der Datenbank zu verhindern.

+0

Überprüfen Sie verwandte Fragen. http://stackoverflow.com/questions/654656/odbc-5-1-connection-string-for-mysql-with-read-only-access http://stackoverflow.com/questions/10122745/mvc3-read-only-mysql-verbindungszeichenfolge – hgulyan

+1

Laut ihnen gibt es keine Möglichkeit, schreibgeschützten Zugriff über Verbindungszeichenfolge anzugeben. Eigentlich sollten Sie SQL-Benutzer mit schreibgeschützten Berechtigungen erstellen oder Berechtigungsschicht in der Geschäftslogik Ihrer Software erstellen. – hgulyan

Antwort

4

Die beste Lösung hier ist, ein weiteres Konto auf dem MySQL-Server mit schreibgeschützten Berechtigungen zu erstellen, und verbinden Sie mit diesem.

+0

Ich weiß. Aber ich habe mich gefragt, ob es eine Option ohne dies gibt? Vielen Dank. – gtiwari333

+0

Leider nicht. Ich dachte daran, etwas Cleveres zu tun, wie zB sofort alle Tabellen in der Datenbank zu lesen, aber (a) das würde einen Albtraum für Nebenläufigkeit verursachen und (b) es ist einfach böswillig auszubrechen, wenn man TABLES FREIGABE, und (c) es dich verhindert Verwenden Sie die Sperrung in Ihrer Abfrage (obwohl eine readonly-Sitzung wahrscheinlich nicht zu wahrscheinlich ist, diese sowieso zu verwenden.) Sie wissen mehr über das Zielsystem als wir, also wenn LOCK TABLES Tabellenname READ für Sie arbeiten wird, hurra, sonst ja, das beste und ~ korrekte ~ was zu tun ist, zwei Benutzer zu haben, von denen einer schreibgeschützt ist. –

11

Die Antwort auf Ihre Frage ist

Nein, es gibt keine Möglichkeit, den Zugriff schreibgeschützt in der Verbindungszeichenfolge angeben.

Alternativen sind

1. Erlaubnis SQL-Benutzer mit Lese erstellen

MVC3 Read-Only MySql Connection String

2. Ansichten erstellen oder gespeicherte Prozeduren mit Berechtigungen Logik in ihnen

MS SQL Überprüfung Grant permission to only a view

MySQL Grant a user permission to only view a mysql view

3. Berechtigungen Ebene in der Business-Logik implementieren

Good Luck!

+0

Unter Punkt 3, Der von Ihnen angegebene Link ist für MS SQL Server. Ich bin mir nicht sicher, wie man einen ähnlichen Zugang in MySQL nur lesen kann. –

+1

@GeorgeBailey Du meinst auf Punkt 2, wie man die Erlaubnis auf View Level erteilt? Danke für den Fang. Ich habe einen Link für MySQL hinzugefügt, scheint, dass Syntax ähnlich aussieht. Danke noch einmal! – hgulyan

0

Je nachdem, welchen Anwendungsfall und welche Kontrolle Sie haben, können Sie den Code "set transaction read only" direkt nach dem Verbinden aufrufen oder den Parameter --init-command bei connect verwenden. Dies funktioniert für einen Test-Use-Case, den wir haben,

Hier ist die Set-Transaktion doc: https://dev.mysql.com/doc/refman/5.7/en/set-transaction.html, in ähnlicher Weise können Sie auch als Sitzungsvariable festlegen, wenn das einen Unterschied macht https://dev.mysql.com/doc/refman/5.7/en/server-system-variables.html#sysvar_transaction_read_only.

Verwandte Themen