Hacktoberfest 2026: die Issues, die Maintainer für den Oktober markiert haben – offen und einsteigerfreundlich. Hacktoberfest-Issues durchsuchen

MySQL error 1143 (column-level SELECT denied) is not translated to AccessError

Offen Anfängerfreundlich
#1,586 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Maintainer antworten meist innerhalb von 1 Tag

@Bhanu73120 arbeitet bereits daran.

Seit 14.10.2026.

  • #1587 von @Bhanu73120 — offen

Bewertung

Schwierigkeit
2/5
Geschätzter Aufwand
1-3 Stunden
Anfängerfreundlichkeit
85/100
Issue-Typ
Bug
Klarheit
Klar beschrieben
Aktivitätsstatus
Aktiv
Tech-Stack
mysql, python
Bereich
databases

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

bug

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

Erste Schritte

  1. Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
  3. Forken Sie das Repository und arbeiten Sie in einem Branch.
  4. Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.

Mehr aus datajoint/datajoint-python

Alle Issues in datajoint/datajoint-python

Ähnliche Issues

Weitere Issues zu Python

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.