MySQL error 1143 (column-level SELECT denied) is not translated to AccessError
Maintainer antworten meist innerhalb von 1 Tag
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 85/100
Rechercherichtung
Beginne in src/datajoint/adapters/mysql.py bei translate_error, wo der Zweig case 1044 | 1142: Zugriffsfehler auf AccessError abbildet. Lies die vorhandenen Tests für Zugriffsfehler, um zu sehen, wie ein eingeschränkter MySQL-Benutzer eingerichtet wird, und füge dann einen Benutzer mit spaltenbezogenem GRANT SELECT (...) hinzu. Fertig ist es, wenn Fehler 1143 dj.errors.AccessError auslöst und ein Test die spaltenseitig verweigerte Abfrage abdeckt.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
On MySQL, a query that names a column the user has no privilege on fails with error 1143. DataJoint
passes that error through as a raw pymysql.err.OperationalError. The table-level equivalent, 1142, is
translated to dj.errors.AccessError. Code that catches AccessError to handle a missing privilege
therefore misses column-level grants.
Reproduction
import datajoint as dj
admin = dj.Connection("127.0.0.1", "root", "simple", 3306)
schema = dj.Schema("demo_access", connection=admin)
@schema
class Measurement(dj.Manual):
definition = """
measurement_id: int32
---
value: float64
operator: varchar(32)
"""
@schema
class Note(dj.Manual):
definition = """
note_id: int32
---
text: varchar(64)
"""
# '%%' because Connection.query formats its arguments
admin.query("CREATE USER 'reader'@'%%' IDENTIFIED BY 'pw'")
admin.query("GRANT SELECT (measurement_id, value) ON demo_access.measurement TO 'reader'@'%%'")
reader = dj.Connection("127.0.0.1", "reader", "pw", 3306)
reader.query("SELECT text FROM demo_access.note")
# datajoint.errors.AccessError: ('Insufficient privileges.', "SELECT command denied ... for table 'note'", ...)
reader.query("SELECT operator FROM demo_access.measurement")
# pymysql.err.OperationalError: (1143, "SELECT command denied ... for column 'operator' in table 'measurement'")
Observed on MySQL 8.0 with master at b9ace66.
Expected behavior
1143 raises dj.errors.AccessError, like 1044 and 1142. The PostgreSQL adapter already maps
insufficient_privilege (42501) to AccessError for table and column denials alike, so the change also
makes the two backends agree.
Where
src/datajoint/adapters/mysql.py, translate_error: case 1044 | 1142: becomes case 1044 | 1142 | 1143:.
A test beside the existing access-error tests would need a user with a column-level grant.
- Vorherrschende Sprache
- Python
- Sterne
- 197
- Forks
- 99
- Ø Merge
- 1 T. 11 Std.
- Gemergte PRs (30 T.)
- 10
Entwicklungsumgebung
- Enthält ein Dockerfile oder eine Docker-Compose-Datei
- Keine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus datajoint/datajoint-python
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
datajoint/datajoint-python#1581 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
datajoint/datajoint-python#1539 · 3 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Environment variables lose to datajoint.json for settings missing from ENV_VAR_MAPPINGEvtl. vergeben @dimitri-yatsenko hat das vor 1 Tag übernommen. Offen
datajoint/datajoint-python#1585 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
_job_start_time records the populating host's local time, with no zoneEvtl. vergeben @dimitri-yatsenko hat das vor 2 Tagen übernommen. Offen
datajoint/datajoint-python#1584 · 1 zugewiesene Person ·
Maintainer antworten meist innerhalb von 1 Tag
-
database.name should namespace schema names on MySQL, as it does on PostgreSQLEvtl. vergeben @dimitri-yatsenko hat das vor 4 Tagen übernommen. Offenfeature
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 15/100
datajoint/datajoint-python#1582 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in datajoint/datajoint-python
Ähnliche Issues
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 70/100
onyx-dot-app/onyx#16016 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag
-
black --check exits 0 and prints All done when a multi file run is interruptedEvtl. vergeben @jiteshgulati hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 2 Tagen
-
Non-positive worker counts wait for results without starting workersEvtl. vergeben @IlyaKhalafi hat das heute übernommen. Offen
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 85/100
Maintainer antworten meist innerhalb von 1 Tag